Refactor: Node Wrangler: PreviewNode operator
[blender-addons.git] / power_sequencer / handlers.py
blob412917817e339af455a96654f85b81f818bab223
1 # SPDX-FileCopyrightText: 2016-2020 by Nathan Lovato, Daniel Oakey, Razvan Radulescu, and contributors
3 # SPDX-License-Identifier: GPL-3.0-or-later
5 import bpy
6 from bpy.app.handlers import persistent
9 @persistent
10 def power_sequencer_playback_speed_post(scene):
11 """
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
16 """
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
20 # errors.
21 if bpy.context.screen and not bpy.context.screen.is_animation_playing:
22 return
24 playback_speed = scene.power_sequencer.playback_speed
26 target_frame = scene.frame_current
27 if playback_speed == "DOUBLE":
28 target_frame += 1
29 elif playback_speed == "TRIPLE":
30 target_frame += 2
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):
37 layout = self.layout
38 scene = context.scene
39 layout.prop(scene.power_sequencer, "playback_speed")
42 def draw_ui_menu(self, context):
43 layout = self.layout
44 layout.menu("POWER_SEQUENCER_MT_main")
47 def register_handlers():
48 # Menus
49 bpy.types.SEQUENCER_HT_header.append(draw_ui_menu)
50 bpy.types.SEQUENCER_HT_header.append(draw_playback_speed)
52 # Handlers
53 bpy.app.handlers.frame_change_post.append(power_sequencer_playback_speed_post)
56 def unregister_handlers():
57 # Menus
58 bpy.types.SEQUENCER_HT_header.remove(draw_ui_menu)
59 bpy.types.SEQUENCER_HT_header.remove(draw_playback_speed)
61 # Handlers
62 bpy.app.handlers.frame_change_post.remove(power_sequencer_playback_speed_post)