Lazy Nerd Font detection — runs after QSS is loaded
Detection deferred to first play_file call so the widget's font (including QSS overrides) is checked instead of the default font.
This commit is contained in:
parent
7b6c325bdb
commit
0e092b2b93
@ -378,14 +378,9 @@ class VideoPlayer(QWidget):
|
|||||||
controls = QHBoxLayout()
|
controls = QHBoxLayout()
|
||||||
controls.setContentsMargins(4, 2, 4, 2)
|
controls.setContentsMargins(4, 2, 4, 2)
|
||||||
|
|
||||||
# Nerd Font glyphs with text fallback
|
self._use_icons = None # lazy detection
|
||||||
self._use_icons = self._has_nerd_font()
|
|
||||||
_play = "\uf04b" if self._use_icons else "Play"
|
|
||||||
_mute = "\uf026" if self._use_icons else "Mute"
|
|
||||||
_auto = "\uf01d" if self._use_icons else "Auto"
|
|
||||||
_loop = "\uf01e" if self._use_icons else "Loop"
|
|
||||||
|
|
||||||
self._play_btn = QPushButton(_play)
|
self._play_btn = QPushButton("Play")
|
||||||
self._play_btn.clicked.connect(self._toggle_play)
|
self._play_btn.clicked.connect(self._toggle_play)
|
||||||
controls.addWidget(self._play_btn)
|
controls.addWidget(self._play_btn)
|
||||||
|
|
||||||
@ -410,12 +405,12 @@ class VideoPlayer(QWidget):
|
|||||||
self._vol_slider.valueChanged.connect(self._set_volume)
|
self._vol_slider.valueChanged.connect(self._set_volume)
|
||||||
controls.addWidget(self._vol_slider)
|
controls.addWidget(self._vol_slider)
|
||||||
|
|
||||||
self._mute_btn = QPushButton(_mute)
|
self._mute_btn = QPushButton("Mute")
|
||||||
self._mute_btn.clicked.connect(self._toggle_mute)
|
self._mute_btn.clicked.connect(self._toggle_mute)
|
||||||
controls.addWidget(self._mute_btn)
|
controls.addWidget(self._mute_btn)
|
||||||
|
|
||||||
self._autoplay = True
|
self._autoplay = True
|
||||||
self._autoplay_btn = QPushButton(_auto)
|
self._autoplay_btn = QPushButton("Auto")
|
||||||
self._autoplay_btn.setCheckable(True)
|
self._autoplay_btn.setCheckable(True)
|
||||||
self._autoplay_btn.setChecked(True)
|
self._autoplay_btn.setChecked(True)
|
||||||
self._autoplay_btn.setToolTip("Auto-play videos when selected")
|
self._autoplay_btn.setToolTip("Auto-play videos when selected")
|
||||||
@ -424,7 +419,7 @@ class VideoPlayer(QWidget):
|
|||||||
controls.addWidget(self._autoplay_btn)
|
controls.addWidget(self._autoplay_btn)
|
||||||
|
|
||||||
self._loop_state = 0 # 0=Loop, 1=Once, 2=Next
|
self._loop_state = 0 # 0=Loop, 1=Once, 2=Next
|
||||||
self._loop_btn = QPushButton(_loop)
|
self._loop_btn = QPushButton("Loop")
|
||||||
self._loop_btn.setToolTip("Loop: repeat / Once: stop at end / Next: advance")
|
self._loop_btn.setToolTip("Loop: repeat / Once: stop at end / Next: advance")
|
||||||
self._loop_btn.clicked.connect(self._cycle_loop)
|
self._loop_btn.clicked.connect(self._cycle_loop)
|
||||||
controls.addWidget(self._loop_btn)
|
controls.addWidget(self._loop_btn)
|
||||||
@ -441,6 +436,7 @@ class VideoPlayer(QWidget):
|
|||||||
self._error_fired = False
|
self._error_fired = False
|
||||||
|
|
||||||
def play_file(self, path: str, info: str = "") -> None:
|
def play_file(self, path: str, info: str = "") -> None:
|
||||||
|
self._detect_icons()
|
||||||
self._current_file = path
|
self._current_file = path
|
||||||
self._error_fired = False
|
self._error_fired = False
|
||||||
self._ended = False
|
self._ended = False
|
||||||
@ -451,16 +447,18 @@ class VideoPlayer(QWidget):
|
|||||||
else:
|
else:
|
||||||
self._player.pause()
|
self._player.pause()
|
||||||
|
|
||||||
@staticmethod
|
def _detect_icons(self) -> None:
|
||||||
def _has_nerd_font() -> bool:
|
"""Detect Nerd Font support and swap button labels if available."""
|
||||||
"""Check if the app font can render Nerd Font glyphs."""
|
if self._use_icons is not None:
|
||||||
from PySide6.QtGui import QFontMetrics, QFont
|
return
|
||||||
from PySide6.QtWidgets import QApplication
|
from PySide6.QtGui import QFontMetrics
|
||||||
app = QApplication.instance()
|
fm = QFontMetrics(self._play_btn.font())
|
||||||
if not app:
|
self._use_icons = fm.inFont("\uf04b")
|
||||||
return False
|
if self._use_icons:
|
||||||
fm = QFontMetrics(app.font())
|
self._play_btn.setText("\uf04b")
|
||||||
return fm.inFont("\uf04b") # Nerd Font play icon
|
self._mute_btn.setText("\uf026")
|
||||||
|
labels = ["\uf01e", "\uf0e2", "\uf051"]
|
||||||
|
self._loop_btn.setText(labels[self._loop_state])
|
||||||
|
|
||||||
def _toggle_autoplay(self, checked: bool = True) -> None:
|
def _toggle_autoplay(self, checked: bool = True) -> None:
|
||||||
self._autoplay = self._autoplay_btn.isChecked()
|
self._autoplay = self._autoplay_btn.isChecked()
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user