[Bf-blender-cvs] [90e94068669] master: VSE: Add Update scene frame range operator

Richard Antalik noreply at git.blender.org
Mon Jan 30 07:57:33 CET 2023


Commit: 90e940686692060dfa2de55d1391970c1b99003f
Author: Richard Antalik
Date:   Mon Jan 30 07:47:29 2023 +0100
Branches: master
https://developer.blender.org/rB90e940686692060dfa2de55d1391970c1b99003f

VSE: Add Update scene frame range operator

This operator updates scene strip internal length to reflect target
scene length. Previously scene strip had to be deleted and added from
scratch. Scene strip length in timeline will not be changed.

===================================================================

M	release/scripts/startup/bl_ui/space_sequencer.py
M	source/blender/editors/space_sequencer/sequencer_edit.c
M	source/blender/editors/space_sequencer/sequencer_intern.h
M	source/blender/editors/space_sequencer/sequencer_ops.c

===================================================================

diff --git a/release/scripts/startup/bl_ui/space_sequencer.py b/release/scripts/startup/bl_ui/space_sequencer.py
index c605ed5f835..dfe73356bcd 100644
--- a/release/scripts/startup/bl_ui/space_sequencer.py
+++ b/release/scripts/startup/bl_ui/space_sequencer.py
@@ -946,6 +946,7 @@ class SEQUENCER_MT_strip(Menu):
 
         if strip and strip.type == 'SCENE':
             layout.operator("sequencer.delete", text="Delete Strip & Data").delete_data = True
+            layout.operator("sequencer.scene_frame_range_update")
 
         if has_sequencer:
             if strip:
@@ -1068,6 +1069,7 @@ class SEQUENCER_MT_context_menu(Menu):
         strip = context.active_sequence_strip
         if strip and strip.type == 'SCENE':
             layout.operator("sequencer.delete", text="Delete Strip & Data").delete_data = True
+            layout.operator("sequencer.scene_frame_range_update")
 
         layout.separator()
 
diff --git a/source/blender/editors/space_sequencer/sequencer_edit.c b/source/blender/editors/space_sequencer/sequencer_edit.c
index 3865aee8327..ac6fd73e99c 100644
--- a/source/blender/editors/space_sequencer/sequencer_edit.c
+++ b/source/blender/editors/space_sequencer/sequencer_edit.c
@@ -3565,3 +3565,51 @@ void SEQUENCER_OT_cursor_set(wmOperatorType *ot)
 }
 
 /** \} */
+
+/* -------------------------------------------------------------------- */
+/** \name Update scene strip frame range
+ * \{ */
+
+static int sequencer_scene_frame_range_update_exec(bContext *C, wmOperator *op)
+{
+  Scene *scene = CTX_data_scene(C);
+  Editing *ed = SEQ_editing_get(scene);
+  Sequence *seq = ed->act_seq;
+
+  const int old_start = SEQ_time_left_handle_frame_get(scene, seq);
+  const int old_end = SEQ_time_right_handle_frame_get(scene, seq);
+
+  Scene *target_scene = seq->scene;
+
+  seq->len = target_scene->r.efra - target_scene->r.sfra + 1;
+  SEQ_time_left_handle_frame_set(scene, seq, old_start);
+  SEQ_time_right_handle_frame_set(scene, seq, old_end);
+
+  SEQ_relations_invalidate_cache_raw(scene, seq);
+  DEG_id_tag_update(&scene->id, ID_RECALC_AUDIO | ID_RECALC_SEQUENCER_STRIPS);
+  WM_event_add_notifier(C, NC_SPACE | ND_SPACE_SEQUENCER, NULL);
+  return OPERATOR_FINISHED;
+}
+
+static bool sequencer_scene_frame_range_update_poll(bContext *C)
+{
+  Editing *ed = SEQ_editing_get(CTX_data_scene(C));
+  return (ed->act_seq != NULL && (ed->act_seq->type & SEQ_TYPE_SCENE) != 0);
+}
+
+void SEQUENCER_OT_scene_frame_range_update(wmOperatorType *ot)
+{
+  /* identifiers */
+  ot->name = "Update Scene Frame Range";
+  ot->description = "Update frame range of scene strip";
+  ot->idname = "SEQUENCER_OT_scene_frame_range_update";
+
+  /* api callbacks */
+  ot->exec = sequencer_scene_frame_range_update_exec;
+  ot->poll = sequencer_scene_frame_range_update_poll;
+
+  /* flags */
+  ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO;
+}
+
+/** \} */
diff --git a/source/blender/editors/space_sequencer/sequencer_intern.h b/source/blender/editors/space_sequencer/sequencer_intern.h
index 644e897f631..c6bc2bf7dec 100644
--- a/source/blender/editors/space_sequencer/sequencer_intern.h
+++ b/source/blender/editors/space_sequencer/sequencer_intern.h
@@ -216,6 +216,7 @@ void SEQUENCER_OT_strip_transform_fit(struct wmOperatorType *ot);
 
 void SEQUENCER_OT_strip_color_tag_set(struct wmOperatorType *ot);
 void SEQUENCER_OT_cursor_set(struct wmOperatorType *ot);
+void SEQUENCER_OT_scene_frame_range_update(struct wmOperatorType *ot);
 
 /* sequencer_select.c */
 
diff --git a/source/blender/editors/space_sequencer/sequencer_ops.c b/source/blender/editors/space_sequencer/sequencer_ops.c
index f7a9bcf41e6..e0e2cfa42cc 100644
--- a/source/blender/editors/space_sequencer/sequencer_ops.c
+++ b/source/blender/editors/space_sequencer/sequencer_ops.c
@@ -66,6 +66,7 @@ void sequencer_operatortypes(void)
 
   WM_operatortype_append(SEQUENCER_OT_strip_color_tag_set);
   WM_operatortype_append(SEQUENCER_OT_cursor_set);
+  WM_operatortype_append(SEQUENCER_OT_scene_frame_range_update);
 
   /* sequencer_select.c */
   WM_operatortype_append(SEQUENCER_OT_select_all);



More information about the Bf-blender-cvs mailing list