feat(cli): added separate option for info window screen (#389)

Closes #388.
This commit is contained in:
Jérome Eertmans
2024-04-04 11:14:25 +02:00
committed by GitHub
parent a85f1c4036
commit 67533c460e
3 changed files with 36 additions and 8 deletions

View File

@ -16,6 +16,13 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
- Added audio output to `manim-slides present`. - Added audio output to `manim-slides present`.
[#382](https://github.com/jeertmans/manim-slides/pull/382) [#382](https://github.com/jeertmans/manim-slides/pull/382)
(unreleased-changed)=
### Changed
- Added `--info-window-screen` option and change `--screen-number`
to not move the info window.
[#389](https://github.com/jeertmans/manim-slides/pull/389)
(v5.1.3)= (v5.1.3)=
## [v5.1.3](https://github.com/jeertmans/manim-slides/compare/v5.1.2...v5.1.3) ## [v5.1.3](https://github.com/jeertmans/manim-slides/compare/v5.1.2...v5.1.3)

View File

@ -242,6 +242,14 @@ def start_at_callback(
is_flag=True, is_flag=True,
help="Hide info window.", help="Hide info window.",
) )
@click.option(
"--info-window-screen",
"info_window_screen_number",
metavar="NUMBER",
type=int,
default=None,
help="Put info window on the given screen (a.k.a. display).",
)
@click.help_option("-h", "--help") @click.help_option("-h", "--help")
@verbosity_option @verbosity_option
def present( def present(
@ -261,6 +269,7 @@ def present(
playback_rate: float, playback_rate: float,
next_terminates_loop: bool, next_terminates_loop: bool,
hide_info_window: bool, hide_info_window: bool,
info_window_screen_number: Optional[int],
) -> None: ) -> None:
""" """
Present SCENE(s), one at a time, in order. Present SCENE(s), one at a time, in order.
@ -295,32 +304,40 @@ def present(
warn_if_non_desirable_pyside6_version() warn_if_non_desirable_pyside6_version()
from qtpy.QtCore import Qt
from qtpy.QtGui import QScreen
from ..qt_utils import qapp from ..qt_utils import qapp
from .player import Player
app = qapp() app = qapp()
app.setApplicationName("Manim Slides") app.setApplicationName("Manim Slides")
if screen_number is not None: def get_screen(number: int) -> Optional[QScreen]:
try: try:
screen = app.screens()[screen_number] return app.screens()[number]
except IndexError: except IndexError:
logger.error( logger.error(
f"Invalid screen number {screen_number}, " f"Invalid screen number {number}, "
f"allowed values are from 0 to {len(app.screens())-1} (incl.)" f"allowed values are from 0 to {len(app.screens())-1} (incl.)"
) )
screen = None return None
if screen_number is not None:
screen = get_screen(screen_number)
else: else:
screen = None screen = None
from qtpy.QtCore import Qt if info_window_screen_number is not None:
info_window_screen = get_screen(info_window_screen_number)
else:
info_window_screen = None
aspect_ratio_modes = { aspect_ratio_modes = {
"keep": Qt.KeepAspectRatio, "keep": Qt.KeepAspectRatio,
"ignore": Qt.IgnoreAspectRatio, "ignore": Qt.IgnoreAspectRatio,
} }
from .player import Player
player = Player( player = Player(
config, config,
presentation_configs, presentation_configs,
@ -336,6 +353,7 @@ def present(
playback_rate=playback_rate, playback_rate=playback_rate,
next_terminates_loop=next_terminates_loop, next_terminates_loop=next_terminates_loop,
hide_info_window=hide_info_window, hide_info_window=hide_info_window,
info_window_screen=info_window_screen,
) )
player.show() player.show()

View File

@ -183,6 +183,7 @@ class Player(QMainWindow): # type: ignore[misc]
playback_rate: float = 1.0, playback_rate: float = 1.0,
next_terminates_loop: bool = False, next_terminates_loop: bool = False,
hide_info_window: bool = False, hide_info_window: bool = False,
info_window_screen: Optional[QScreen] = None,
): ):
super().__init__() super().__init__()
@ -240,7 +241,9 @@ class Player(QMainWindow): # type: ignore[misc]
self.slide_changed.connect(self.slide_changed_callback) self.slide_changed.connect(self.slide_changed_callback)
self.info = Info( self.info = Info(
full_screen=full_screen, aspect_ratio_mode=aspect_ratio_mode, screen=screen full_screen=full_screen,
aspect_ratio_mode=aspect_ratio_mode,
screen=info_window_screen,
) )
self.info.close_event.connect(self.closeEvent) self.info.close_event.connect(self.closeEvent)
self.info.key_press_event.connect(self.keyPressEvent) self.info.key_press_event.connect(self.keyPressEvent)