Skip to content

Commit 106c7d4

Browse files
authored
feat(cli): add next-terminates-loop CLI option (#299)
* feat(cli): add `next-terminates-loop` CLI option Closes #254 * chore(lib): fix `--next-terminates-loop` * chore(CHANGELOG): document changes
1 parent 6c52906 commit 106c7d4

File tree

3 files changed

+22
-2
lines changed

3 files changed

+22
-2
lines changed

CHANGELOG.md

+4
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,10 @@ In an effort to better document changes, this CHANGELOG document is now created.
4646
- Added `Slide.next_section` for compatibility with `manim`'s
4747
`Scene.next_section` method.
4848
[#295](https://github.com/jeertmans/manim-slides/pull/295)
49+
- Added `--next-terminates-loop` option to `manim-slides present` for turn a
50+
looping slide into a normal one, so that it ends nicely. This is useful to
51+
have a smooth transition with the next slide.
52+
[#299](https://github.com/jeertmans/manim-slides/pull/299)
4953
- Added `--playback-rate` option to `manim-slides present` for testing purposes.
5054
[#300](https://github.com/jeertmans/manim-slides/pull/300)
5155
- Added `auto_next` option to `Slide`'s `next_slide` method to automatically

manim_slides/present/__init__.py

+10-2
Original file line numberDiff line numberDiff line change
@@ -219,6 +219,12 @@ def str_to_int_or_none(value: str) -> Optional[int]:
219219
default=1.0,
220220
help="Playback rate of the video slides, see PySide6 docs for details.",
221221
)
222+
@click.option(
223+
"--next-terminates-loop",
224+
"next_terminates_loop",
225+
is_flag=True,
226+
help="If set, pressing next will turn any looping slide into a play slide.",
227+
)
222228
@click.help_option("-h", "--help")
223229
@verbosity_option
224230
def present(
@@ -234,8 +240,9 @@ def present(
234240
start_at: Tuple[Optional[int], Optional[int], Optional[int]],
235241
start_at_scene_number: int,
236242
start_at_slide_number: int,
237-
screen_number: Optional[int] = None,
238-
playback_rate: float = 1.0,
243+
screen_number: Optional[int],
244+
playback_rate: float,
245+
next_terminates_loop: bool,
239246
) -> None:
240247
"""
241248
Present SCENE(s), one at a time, in order.
@@ -296,6 +303,7 @@ def present(
296303
slide_index=start_at_slide_number,
297304
screen=screen,
298305
playback_rate=playback_rate,
306+
next_terminates_loop=next_terminates_loop,
299307
)
300308

301309
player.show()

manim_slides/present/player.py

+8
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,7 @@ def __init__(
5454
slide_index: int = 0,
5555
screen: Optional[QScreen] = None,
5656
playback_rate: float = 1.0,
57+
next_terminates_loop: bool = False,
5758
):
5859
super().__init__()
5960

@@ -125,6 +126,7 @@ def __init__(
125126
# Misc
126127

127128
self.exit_after_last_slide = exit_after_last_slide
129+
self.next_terminates_loop = next_terminates_loop
128130

129131
# Setting-up everything
130132

@@ -313,6 +315,12 @@ def close(self) -> None:
313315
def next(self) -> None:
314316
if self.media_player.playbackState() == QMediaPlayer.PausedState:
315317
self.media_player.play()
318+
elif self.next_terminates_loop and self.media_player.loops() != 1:
319+
position = self.media_player.position()
320+
self.media_player.setLoops(1)
321+
self.media_player.stop()
322+
self.media_player.setPosition(position)
323+
self.media_player.play()
316324
else:
317325
self.load_next_slide()
318326

0 commit comments

Comments
 (0)