1 # SPDX-License-Identifier: GPL-3.0-or-later
2 # Copyright 2016-2020 by Nathan Lovato, Daniel Oakey, Razvan Radulescu, and contributors
4 # This file is part of Power Sequencer.
7 from bpy
.app
.handlers
import persistent
11 def power_sequencer_load_file_post(arg
):
13 Called after loading the blend file
15 for scene
in bpy
.data
.scenes
:
16 scene
.power_sequencer
.frame_pre
= bpy
.context
.scene
.frame_current
20 def power_sequencer_playback_speed_post(scene
):
22 Handler function for faster playback
23 Skips keyframes after a frame change based on the playback_speed value
24 It steps over frame rather than increase the playback speed smoothly,
25 but it's still useful for faster editing
27 if bpy
.context
.screen
and not bpy
.context
.screen
.is_animation_playing
:
30 playback_speed
= scene
.power_sequencer
.playback_speed
32 frame_start
= scene
.frame_current
33 frame_post
= scene
.frame_current
35 if playback_speed
== "FAST" and frame_start
% 3 == 0:
37 elif playback_speed
== "FASTER" and frame_start
% 2 == 0:
39 elif playback_speed
== "DOUBLE":
40 # 2.5x -> skip 5 frames for 2. 2 then 3 then 2 etc.
42 elif playback_speed
== "TRIPLE":
45 if frame_start
!= frame_post
:
46 bpy
.ops
.screen
.frame_offset(delta
=frame_post
- frame_start
)
47 scene
.power_sequencer
.frame_pre
= scene
.frame_current
50 def draw_playback_speed(self
, context
):
53 layout
.prop(scene
.power_sequencer
, "playback_speed")
56 def draw_ui_menu(self
, context
):
58 layout
.menu("POWER_SEQUENCER_MT_main")
61 def register_handlers():
63 bpy
.types
.SEQUENCER_HT_header
.append(draw_ui_menu
)
64 bpy
.types
.SEQUENCER_HT_header
.append(draw_playback_speed
)
67 bpy
.app
.handlers
.load_post
.append(power_sequencer_load_file_post
)
68 bpy
.app
.handlers
.frame_change_post
.append(power_sequencer_playback_speed_post
)
71 def unregister_handlers():
73 bpy
.types
.SEQUENCER_HT_header
.remove(draw_ui_menu
)
74 bpy
.types
.SEQUENCER_HT_header
.remove(draw_playback_speed
)
77 bpy
.app
.handlers
.load_post
.remove(power_sequencer_load_file_post
)
78 bpy
.app
.handlers
.frame_change_post
.remove(power_sequencer_playback_speed_post
)