Auto show/hide controls in fullscreen based on activity
This commit is contained in:
@@ -7,7 +7,8 @@ from PyQt6.QtWidgets import (
|
|||||||
QPushButton, QFrame, QSlider, QTextEdit, QTextBrowser, QApplication, QToolTip
|
QPushButton, QFrame, QSlider, QTextEdit, QTextBrowser, QApplication, QToolTip
|
||||||
)
|
)
|
||||||
from PyQt6.QtCore import Qt, pyqtSignal, QTimer
|
from PyQt6.QtCore import Qt, pyqtSignal, QTimer
|
||||||
from PyQt6.QtGui import QIcon
|
from PyQt6.QtGui import QIcon, QCursor
|
||||||
|
|
||||||
import uuid
|
import uuid
|
||||||
|
|
||||||
from vlc_player import VLCSyncPlayer
|
from vlc_player import VLCSyncPlayer
|
||||||
@@ -125,10 +126,10 @@ class RoomWidget(QWidget):
|
|||||||
self.video_frame.setAttribute(Qt.WidgetAttribute.WA_NativeWindow, True)
|
self.video_frame.setAttribute(Qt.WidgetAttribute.WA_NativeWindow, True)
|
||||||
|
|
||||||
# Controls Bar
|
# Controls Bar
|
||||||
controls = QFrame()
|
self.controls_bar = QFrame()
|
||||||
controls.setObjectName("controlsBar")
|
self.controls_bar.setObjectName("controlsBar")
|
||||||
controls.setFixedHeight(60)
|
self.controls_bar.setFixedHeight(60)
|
||||||
controls_layout = QHBoxLayout(controls)
|
controls_layout = QHBoxLayout(self.controls_bar)
|
||||||
|
|
||||||
self.play_btn = QPushButton("▶")
|
self.play_btn = QPushButton("▶")
|
||||||
self.play_btn.setFixedSize(40, 40)
|
self.play_btn.setFixedSize(40, 40)
|
||||||
@@ -172,7 +173,7 @@ class RoomWidget(QWidget):
|
|||||||
|
|
||||||
video_layout.addWidget(self.topbar)
|
video_layout.addWidget(self.topbar)
|
||||||
video_layout.addWidget(self.video_frame)
|
video_layout.addWidget(self.video_frame)
|
||||||
video_layout.addWidget(controls)
|
video_layout.addWidget(self.controls_bar)
|
||||||
|
|
||||||
# --- Right Side: Chat ---
|
# --- Right Side: Chat ---
|
||||||
self.chat_container = QFrame()
|
self.chat_container = QFrame()
|
||||||
@@ -276,6 +277,18 @@ class RoomWidget(QWidget):
|
|||||||
|
|
||||||
self.play_btn.clicked.connect(self.toggle_playback)
|
self.play_btn.clicked.connect(self.toggle_playback)
|
||||||
|
|
||||||
|
# Fullscreen auto-hide timer
|
||||||
|
self._fs_hide_timer = QTimer()
|
||||||
|
self._fs_hide_timer.setSingleShot(True)
|
||||||
|
self._fs_hide_timer.setInterval(3000)
|
||||||
|
self._fs_hide_timer.timeout.connect(self._hide_fullscreen_controls)
|
||||||
|
|
||||||
|
# Mouse movement polling (needed because VLC's native window eats mouse events)
|
||||||
|
self._last_mouse_pos = None
|
||||||
|
self._mouse_poll_timer = QTimer()
|
||||||
|
self._mouse_poll_timer.setInterval(200)
|
||||||
|
self._mouse_poll_timer.timeout.connect(self._check_mouse_movement)
|
||||||
|
|
||||||
def get_seekbar_tooltip(self, value):
|
def get_seekbar_tooltip(self, value):
|
||||||
length_ms = self.vlc_player.get_length()
|
length_ms = self.vlc_player.get_length()
|
||||||
if length_ms > 0:
|
if length_ms > 0:
|
||||||
@@ -320,11 +333,35 @@ class RoomWidget(QWidget):
|
|||||||
self.fullscreen_btn.setText("⛶")
|
self.fullscreen_btn.setText("⛶")
|
||||||
self.chat_container.show()
|
self.chat_container.show()
|
||||||
self.topbar.show()
|
self.topbar.show()
|
||||||
|
self.controls_bar.show()
|
||||||
|
self._fs_hide_timer.stop()
|
||||||
|
self._mouse_poll_timer.stop()
|
||||||
|
self.setCursor(QCursor(Qt.CursorShape.ArrowCursor))
|
||||||
else:
|
else:
|
||||||
top_window.showFullScreen()
|
top_window.showFullScreen()
|
||||||
self.fullscreen_btn.setText("🗗")
|
self.fullscreen_btn.setText("🗗")
|
||||||
self.chat_container.hide()
|
self.chat_container.hide()
|
||||||
self.topbar.hide()
|
self.topbar.hide()
|
||||||
|
self._last_mouse_pos = QCursor.pos()
|
||||||
|
self._fs_hide_timer.start()
|
||||||
|
self._mouse_poll_timer.start()
|
||||||
|
|
||||||
|
def _hide_fullscreen_controls(self):
|
||||||
|
if self.window().isFullScreen():
|
||||||
|
self.controls_bar.hide()
|
||||||
|
self.setCursor(QCursor(Qt.CursorShape.BlankCursor))
|
||||||
|
|
||||||
|
def _show_fullscreen_controls(self):
|
||||||
|
self.controls_bar.show()
|
||||||
|
self.setCursor(QCursor(Qt.CursorShape.ArrowCursor))
|
||||||
|
self._fs_hide_timer.start()
|
||||||
|
|
||||||
|
def _check_mouse_movement(self):
|
||||||
|
pos = QCursor.pos()
|
||||||
|
if pos != self._last_mouse_pos:
|
||||||
|
self._last_mouse_pos = pos
|
||||||
|
if not self.controls_bar.isVisible():
|
||||||
|
self._show_fullscreen_controls()
|
||||||
|
|
||||||
def toggle_mute(self):
|
def toggle_mute(self):
|
||||||
current_vol = self.vlc_player.get_volume()
|
current_vol = self.vlc_player.get_volume()
|
||||||
|
|||||||
Reference in New Issue
Block a user