Fix slideshow video sizing, revert video hide

- Slideshow video player: auto_size_video=False, no height constraint
- Revert video widget hide/show (caused info panel issues)
- Preview video still auto-sizes to aspect ratio
This commit is contained in:
pax 2026-04-05 20:24:39 -05:00
parent bc0ddcb221
commit 6d6a33f99f

View File

@ -94,6 +94,7 @@ class FullscreenPreview(QMainWindow):
self._stack.addWidget(self._viewer) self._stack.addWidget(self._viewer)
self._video = VideoPlayer() self._video = VideoPlayer()
self._video._auto_size_video = False # fullscreen — don't constrain height
self._video.play_next.connect(lambda: self.navigate.emit(1)) self._video.play_next.connect(lambda: self.navigate.emit(1))
self._stack.addWidget(self._video) self._stack.addWidget(self._video)
@ -485,7 +486,6 @@ class VideoPlayer(QWidget):
self._ended = False self._ended = False
self._video_sized = False self._video_sized = False
self._video_widget.setMaximumHeight(16777215) self._video_widget.setMaximumHeight(16777215)
self._video_widget.hide() # hide until first frame to prevent black flash
self._last_pos = 0 self._last_pos = 0
self._player.setLoops(QMediaPlayer.Loops.Infinite) self._player.setLoops(QMediaPlayer.Loops.Infinite)
self._player.setSource(QUrl.fromLocalFile(path)) self._player.setSource(QUrl.fromLocalFile(path))
@ -562,18 +562,20 @@ class VideoPlayer(QWidget):
else: else:
self._play_btn.setText("Play") self._play_btn.setText("Play")
_auto_size_video = True # set False for fullscreen/slideshow
def _on_video_size(self, frame) -> None: def _on_video_size(self, frame) -> None:
"""Resize video widget to match video aspect ratio on first frame.""" """Resize video widget to match video aspect ratio on first frame."""
if self._video_sized or not frame.isValid(): if self._video_sized or not frame.isValid():
return return
self._video_sized = True self._video_sized = True
vw = frame.size().width() if self._auto_size_video:
vh = frame.size().height() vw = frame.size().width()
if vw > 0 and vh > 0: vh = frame.size().height()
available_w = self._video_widget.parentWidget().width() if self._video_widget.parentWidget() else self._video_widget.width() if vw > 0 and vh > 0:
scaled_h = int(available_w * vh / vw) available_w = self._video_widget.parentWidget().width() if self._video_widget.parentWidget() else self._video_widget.width()
self._video_widget.setMaximumHeight(scaled_h) scaled_h = int(available_w * vh / vw)
self._video_widget.show() self._video_widget.setMaximumHeight(scaled_h)
def _on_media_status(self, status) -> None: def _on_media_status(self, status) -> None:
pass pass