io_mesh_uv_layout: speed up png export with OIIO (x7)
[blender-addons.git] / power_sequencer / handlers.py
blobc743d18b88c8f1ab6e5c65d587abd651c4c215a7
1 # SPDX-License-Identifier: GPL-3.0-or-later
2 # Copyright (C) 2016-2020 by Nathan Lovato, Daniel Oakey, Razvan Radulescu, and contributors
3 import bpy
4 from bpy.app.handlers import persistent
7 @persistent
8 def power_sequencer_playback_speed_post(scene):
9 """
10 Handler function for faster playback
11 Skips keyframes after a frame change based on the playback_speed value
12 It steps over frame rather than increase the playback speed smoothly,
13 but it's still useful for faster editing
14 """
16 # Calling this function triggers a callback to this function via the frame
17 # changed handler, causing a stack overflow. We use a property to prevent
18 # errors.
19 if bpy.context.screen and not bpy.context.screen.is_animation_playing:
20 return
22 playback_speed = scene.power_sequencer.playback_speed
24 target_frame = scene.frame_current
25 if playback_speed == "DOUBLE":
26 target_frame += 1
27 elif playback_speed == "TRIPLE":
28 target_frame += 2
30 if target_frame != scene.frame_current:
31 bpy.ops.screen.frame_offset(delta=target_frame - scene.frame_current)
34 def draw_playback_speed(self, context):
35 layout = self.layout
36 scene = context.scene
37 layout.prop(scene.power_sequencer, "playback_speed")
40 def draw_ui_menu(self, context):
41 layout = self.layout
42 layout.menu("POWER_SEQUENCER_MT_main")
45 def register_handlers():
46 # Menus
47 bpy.types.SEQUENCER_HT_header.append(draw_ui_menu)
48 bpy.types.SEQUENCER_HT_header.append(draw_playback_speed)
50 # Handlers
51 bpy.app.handlers.frame_change_post.append(power_sequencer_playback_speed_post)
54 def unregister_handlers():
55 # Menus
56 bpy.types.SEQUENCER_HT_header.remove(draw_ui_menu)
57 bpy.types.SEQUENCER_HT_header.remove(draw_playback_speed)
59 # Handlers
60 bpy.app.handlers.frame_change_post.remove(power_sequencer_playback_speed_post)