1 # SPDX-FileCopyrightText: 2016-2020 by Nathan Lovato, Daniel Oakey, Razvan Radulescu, and contributors
3 # SPDX-License-Identifier: GPL-3.0-or-later
6 from bpy
.app
.handlers
import persistent
10 def power_sequencer_playback_speed_post(scene
):
12 Handler function for faster playback
13 Skips keyframes after a frame change based on the playback_speed value
14 It steps over frame rather than increase the playback speed smoothly,
15 but it's still useful for faster editing
18 # Calling this function triggers a callback to this function via the frame
19 # changed handler, causing a stack overflow. We use a property to prevent
21 if bpy
.context
.screen
and not bpy
.context
.screen
.is_animation_playing
:
24 playback_speed
= scene
.power_sequencer
.playback_speed
26 target_frame
= scene
.frame_current
27 if playback_speed
== "DOUBLE":
29 elif playback_speed
== "TRIPLE":
32 if target_frame
!= scene
.frame_current
:
33 bpy
.ops
.screen
.frame_offset(delta
=target_frame
- scene
.frame_current
)
36 def draw_playback_speed(self
, context
):
39 layout
.prop(scene
.power_sequencer
, "playback_speed")
42 def draw_ui_menu(self
, context
):
44 layout
.menu("POWER_SEQUENCER_MT_main")
47 def register_handlers():
49 bpy
.types
.SEQUENCER_HT_header
.append(draw_ui_menu
)
50 bpy
.types
.SEQUENCER_HT_header
.append(draw_playback_speed
)
53 bpy
.app
.handlers
.frame_change_post
.append(power_sequencer_playback_speed_post
)
56 def unregister_handlers():
58 bpy
.types
.SEQUENCER_HT_header
.remove(draw_ui_menu
)
59 bpy
.types
.SEQUENCER_HT_header
.remove(draw_playback_speed
)
62 bpy
.app
.handlers
.frame_change_post
.remove(power_sequencer_playback_speed_post
)