From 67533c460eab856a4eb6aaf350198658985e2428 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=A9rome=20Eertmans?= Date: Thu, 4 Apr 2024 11:14:25 +0200 Subject: [PATCH] feat(cli): added separate option for info window screen (#389) Closes #388. --- CHANGELOG.md | 7 +++++++ manim_slides/present/__init__.py | 32 +++++++++++++++++++++++++------- manim_slides/present/player.py | 5 ++++- 3 files changed, 36 insertions(+), 8 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 8b77b6e..f043ab0 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -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`. [#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](https://github.com/jeertmans/manim-slides/compare/v5.1.2...v5.1.3) diff --git a/manim_slides/present/__init__.py b/manim_slides/present/__init__.py index ebf9ac9..c0a0fa0 100644 --- a/manim_slides/present/__init__.py +++ b/manim_slides/present/__init__.py @@ -242,6 +242,14 @@ def start_at_callback( is_flag=True, 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") @verbosity_option def present( @@ -261,6 +269,7 @@ def present( playback_rate: float, next_terminates_loop: bool, hide_info_window: bool, + info_window_screen_number: Optional[int], ) -> None: """ Present SCENE(s), one at a time, in order. @@ -295,32 +304,40 @@ def present( warn_if_non_desirable_pyside6_version() + from qtpy.QtCore import Qt + from qtpy.QtGui import QScreen + from ..qt_utils import qapp + from .player import Player app = qapp() app.setApplicationName("Manim Slides") - if screen_number is not None: + def get_screen(number: int) -> Optional[QScreen]: try: - screen = app.screens()[screen_number] + return app.screens()[number] except IndexError: 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.)" ) - screen = None + return None + + if screen_number is not None: + screen = get_screen(screen_number) else: 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 = { "keep": Qt.KeepAspectRatio, "ignore": Qt.IgnoreAspectRatio, } - from .player import Player - player = Player( config, presentation_configs, @@ -336,6 +353,7 @@ def present( playback_rate=playback_rate, next_terminates_loop=next_terminates_loop, hide_info_window=hide_info_window, + info_window_screen=info_window_screen, ) player.show() diff --git a/manim_slides/present/player.py b/manim_slides/present/player.py index b4777a7..bba7dbc 100644 --- a/manim_slides/present/player.py +++ b/manim_slides/present/player.py @@ -183,6 +183,7 @@ class Player(QMainWindow): # type: ignore[misc] playback_rate: float = 1.0, next_terminates_loop: bool = False, hide_info_window: bool = False, + info_window_screen: Optional[QScreen] = None, ): super().__init__() @@ -240,7 +241,9 @@ class Player(QMainWindow): # type: ignore[misc] self.slide_changed.connect(self.slide_changed_callback) 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.key_press_event.connect(self.keyPressEvent)