[Bf-blender-cvs] [3e972747a4b] temp-vse-preview-transform: VSE: Add image transform gizmos

Richard Antalik noreply at git.blender.org
Mon Aug 30 00:01:29 CEST 2021


Commit: 3e972747a4bd9b6b94ebf44268954d693522ccf3
Author: Richard Antalik
Date:   Fri Aug 13 10:56:18 2021 +0200
Branches: temp-vse-preview-transform
https://developer.blender.org/rB3e972747a4bd9b6b94ebf44268954d693522ccf3

VSE: Add image transform gizmos

Patch based on D12105

Add transform tools and gizmos to sequencer preview area.

TODO:
 - Caclculate center position for combined selection
 - Limit selection in time
 - Scale always works in local coords, but gizmo doesn't represent this
 - Cage transform needs initial implementation for sequencer data

Differential Revision: https://developer.blender.org/D12208

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

M	release/scripts/presets/keyconfig/keymap_data/blender_default.py
M	release/scripts/startup/bl_ui/space_toolsystem_toolbar.py
M	source/blender/editors/space_sequencer/space_sequencer.c
M	source/blender/editors/transform/transform_gizmo_2d.c

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

diff --git a/release/scripts/presets/keyconfig/keymap_data/blender_default.py b/release/scripts/presets/keyconfig/keymap_data/blender_default.py
index ca847e6dec7..ae86c321c39 100644
--- a/release/scripts/presets/keyconfig/keymap_data/blender_default.py
+++ b/release/scripts/presets/keyconfig/keymap_data/blender_default.py
@@ -7047,6 +7047,39 @@ def km_sequencer_editor_tool_blade(_params):
     )
 
 
+def km_sequencer_editor_tool_move(params):
+    return (
+        "Sequencer Tool: Move",
+        {"space_type": 'SEQUENCE_EDITOR', "region_type": 'WINDOW'},
+        {"items": [
+            ("transform.translate", {"type": params.tool_tweak, "value": 'ANY'},
+             {"properties": [("sequencer_image", True), ("release_confirm", True)]}),
+        ]},
+    )
+
+
+def km_sequencer_editor_tool_rotate(params):
+    return (
+        "Sequencer Tool: Rotate",
+        {"space_type": 'SEQUENCE_EDITOR', "region_type": 'WINDOW'},
+        {"items": [
+            ("transform.rotate", {"type": params.tool_tweak, "value": 'ANY'},
+             {"properties": [("sequencer_image", True), ("release_confirm", True)]}),
+        ]},
+    )
+
+
+def km_sequencer_editor_tool_scale(params):
+    return (
+        "Sequencer Tool: Scale",
+        {"space_type": 'SEQUENCE_EDITOR', "region_type": 'WINDOW'},
+        {"items": [
+            ("transform.resize", {"type": params.tool_tweak, "value": 'ANY'},
+             {"properties": [("sequencer_image", True), ("release_confirm", True)]}),
+        ]},
+    )
+
+
 # ------------------------------------------------------------------------------
 # Full Configuration
 
@@ -7300,6 +7333,9 @@ def generate_keymaps(params=None):
         km_sequencer_editor_tool_select_box(params),
         km_sequencer_editor_tool_blade(params),
         km_sequencer_editor_tool_generic_sample(params),
+        km_sequencer_editor_tool_scale(params),
+        km_sequencer_editor_tool_rotate(params),
+        km_sequencer_editor_tool_move(params),
     ]
 
 # ------------------------------------------------------------------------------
diff --git a/release/scripts/startup/bl_ui/space_toolsystem_toolbar.py b/release/scripts/startup/bl_ui/space_toolsystem_toolbar.py
index c5191e80aef..b968a661c09 100644
--- a/release/scripts/startup/bl_ui/space_toolsystem_toolbar.py
+++ b/release/scripts/startup/bl_ui/space_toolsystem_toolbar.py
@@ -2439,6 +2439,52 @@ class _defs_sequencer_generic:
             keymap="Sequencer Tool: Sample",
         )
 
+    @ToolDef.from_fn
+    def translate():
+        return dict(
+            idname="builtin.move",
+            label="Move",
+            icon="ops.transform.translate",
+            widget="SEQUENCER_GGT_gizmo2d_translate",
+            operator="transform.translate",
+            keymap="Sequencer Tool: Move",
+        )
+
+    @ToolDef.from_fn
+    def rotate():
+        return dict(
+            idname="builtin.rotate",
+            label="Rotate",
+            icon="ops.transform.rotate",
+            widget="SEQUENCER_GGT_gizmo2d_rotate",
+            operator="transform.rotate",
+            keymap="Sequencer Tool: Rotate",
+        )
+
+    @ToolDef.from_fn
+    def scale():
+        return dict(
+            idname="builtin.scale",
+            label="Scale",
+            icon="ops.transform.resize",
+            widget="SEQUENCER_GGT_gizmo2d_resize",
+            operator="transform.resize",
+            keymap="Sequencer Tool: Scale",
+        )
+
+    @ToolDef.from_fn
+    def transform():
+        return dict(
+            idname="builtin.transform",
+            label="Transform",
+            description=(
+                "Supports any combination of grab, rotate, and scale at once"
+            ),
+            icon="ops.transform.transform",
+            widget="SEQUENCER_GGT_gizmo2d",
+            # No keymap default action, only for gizmo!
+        )
+
 
 class _defs_sequencer_select:
     @ToolDef.from_fn
@@ -3030,7 +3076,12 @@ class SEQUENCER_PT_tools_active(ToolSelectPanelHelper, Panel):
         None: [
         ],
         'PREVIEW': [
+            # *_tools_select,
             _defs_sequencer_generic.sample,
+            _defs_sequencer_generic.translate,
+            _defs_sequencer_generic.rotate,
+            _defs_sequencer_generic.scale,
+            _defs_sequencer_generic.transform,
             *_tools_annotate,
         ],
         'SEQUENCER': [
diff --git a/source/blender/editors/space_sequencer/space_sequencer.c b/source/blender/editors/space_sequencer/space_sequencer.c
index 2a6e49edfb6..b8041e775a0 100644
--- a/source/blender/editors/space_sequencer/space_sequencer.c
+++ b/source/blender/editors/space_sequencer/space_sequencer.c
@@ -42,6 +42,7 @@
 
 #include "ED_screen.h"
 #include "ED_space_api.h"
+#include "ED_transform.h"
 #include "ED_view3d.h"
 #include "ED_view3d_offscreen.h" /* Only for sequencer view3d drawing callback. */
 
@@ -364,7 +365,7 @@ static void sequencer_listener(const wmSpaceTypeListenerParams *params)
 
 /* ************* dropboxes ************* */
 
-static bool image_drop_poll(bContext *C, wmDrag *drag, const wmEvent *event)
+static bool SEQUENCER_drop_poll(bContext *C, wmDrag *drag, const wmEvent *event)
 {
   ARegion *region = CTX_wm_region(C);
   Scene *scene = CTX_data_scene(C);
@@ -439,8 +440,12 @@ static void sequencer_dropboxes(void)
 {
   ListBase *lb = WM_dropboxmap_find("Sequencer", SPACE_SEQ, RGN_TYPE_WINDOW);
 
-  WM_dropbox_add(
-      lb, "SEQUENCER_OT_image_strip_add", image_drop_poll, sequencer_drop_copy, NULL, NULL);
+  WM_dropbox_add(lb,
+                 "SEQUENCER_OT_SEQUENCER_strip_add",
+                 SEQUENCER_drop_poll,
+                 sequencer_drop_copy,
+                 NULL,
+                 NULL);
   WM_dropbox_add(
       lb, "SEQUENCER_OT_movie_strip_add", movie_drop_poll, sequencer_drop_copy, NULL, NULL);
   WM_dropbox_add(
@@ -480,11 +485,72 @@ static void SEQUENCER_GGT_navigate(wmGizmoGroupType *gzgt)
   VIEW2D_GGT_navigate_impl(gzgt, "SEQUENCER_GGT_navigate");
 }
 
+static void SEQUENCER_GGT_gizmo2d(wmGizmoGroupType *gzgt)
+{
+  gzgt->name = "Sequencer Transform Gizmo";
+  gzgt->idname = "SEQUENCER_GGT_gizmo2d";
+
+  gzgt->flag |= (WM_GIZMOGROUPTYPE_TOOL_FALLBACK_KEYMAP |
+                 WM_GIZMOGROUPTYPE_DELAY_REFRESH_FOR_TWEAK);
+
+  gzgt->gzmap_params.spaceid = SPACE_SEQ;
+  gzgt->gzmap_params.regionid = RGN_TYPE_PREVIEW;
+
+  ED_widgetgroup_gizmo2d_xform_callbacks_set(gzgt);
+}
+
+static void SEQUENCER_GGT_gizmo2d_translate(wmGizmoGroupType *gzgt)
+{
+  gzgt->name = "Sequencer Translate Gizmo";
+  gzgt->idname = "SEQUENCER_GGT_gizmo2d_translate";
+
+  gzgt->flag |= (WM_GIZMOGROUPTYPE_TOOL_FALLBACK_KEYMAP |
+                 WM_GIZMOGROUPTYPE_DELAY_REFRESH_FOR_TWEAK);
+
+  gzgt->gzmap_params.spaceid = SPACE_SEQ;
+  gzgt->gzmap_params.regionid = RGN_TYPE_PREVIEW;
+
+  ED_widgetgroup_gizmo2d_xform_no_cage_callbacks_set(gzgt);
+}
+
+static void SEQUENCER_GGT_gizmo2d_resize(wmGizmoGroupType *gzgt)
+{
+  gzgt->name = "Sequencer Transform Gizmo Resize";
+  gzgt->idname = "SEQUENCER_GGT_gizmo2d_resize";
+
+  gzgt->flag |= (WM_GIZMOGROUPTYPE_TOOL_FALLBACK_KEYMAP |
+                 WM_GIZMOGROUPTYPE_DELAY_REFRESH_FOR_TWEAK);
+
+  gzgt->gzmap_params.spaceid = SPACE_SEQ;
+  gzgt->gzmap_params.regionid = RGN_TYPE_PREVIEW;
+
+  ED_widgetgroup_gizmo2d_resize_callbacks_set(gzgt);
+}
+
+static void SEQUENCER_GGT_gizmo2d_rotate(wmGizmoGroupType *gzgt)
+{
+  gzgt->name = "Sequencer Transform Gizmo Resize";
+  gzgt->idname = "SEQUENCER_GGT_gizmo2d_rotate";
+
+  gzgt->flag |= (WM_GIZMOGROUPTYPE_TOOL_FALLBACK_KEYMAP |
+                 WM_GIZMOGROUPTYPE_DELAY_REFRESH_FOR_TWEAK);
+
+  gzgt->gzmap_params.spaceid = SPACE_SEQ;
+  gzgt->gzmap_params.regionid = RGN_TYPE_PREVIEW;
+
+  ED_widgetgroup_gizmo2d_rotate_callbacks_set(gzgt);
+}
+
 static void sequencer_gizmos(void)
 {
   wmGizmoMapType *gzmap_type = WM_gizmomaptype_ensure(
       &(const struct wmGizmoMapType_Params){SPACE_SEQ, RGN_TYPE_PREVIEW});
 
+  WM_gizmogrouptype_append(SEQUENCER_GGT_gizmo2d);
+  WM_gizmogrouptype_append(SEQUENCER_GGT_gizmo2d_translate);
+  WM_gizmogrouptype_append(SEQUENCER_GGT_gizmo2d_resize);
+  WM_gizmogrouptype_append(SEQUENCER_GGT_gizmo2d_rotate);
+
   WM_gizmogrouptype_append_and_link(gzmap_type, SEQUENCER_GGT_navigate);
 }
 
@@ -741,6 +807,8 @@ static void sequencer_preview_region_listener(const wmRegionListenerParams *para
   ARegion *region = params->region;
   wmNotifier *wmn = params->notifier;
 
+  WM_gizmomap_tag_refresh(region->gizmo_map);
+
   /* Context changes. */
   switch (wmn->category) {
     case NC_GPENCIL:
diff --git a/source/blender/editors/transform/transform_gizmo_2d.c b/source/blender/editors/transform/transform_gizmo_2d.c
index 0b677e2560b..dd3dea4ae81 100644
--- a/source/blender/editors/transform/transform_gizmo_2d.c
+++ b/source/blender/editors/transform/transform_gizmo_2d.c
@@ -49,6 +49,9 @@
 #include "ED_screen.h"
 #include "ED_uvedit.h"
 
+#include "SEQ_iterator.h"
+#include "SEQ_sequencer.h"
+
 #include "transform.h" /* own include */
 
 /* -------------------------------------------------------------------- */
@@ -245,6 +248,21 @@ static bool gizmo2d_calc_center(const bContext *C, float r_center[2])
     ViewLayer *view_layer = CTX_data_view_layer(C);
     ED_uvedit_center_from_pivot_ex(sima, scene, view_layer, r_center, sima->around, &has_select);
   }
+  else if (area->spacetype == SPACE_SEQ) {
+    Scene *scene = CTX_data_scene(C);
+    ListBase *seqbase = SEQ_active_seqbase_get(SEQ_editing_get(scene, false));
+
+    SeqCollection *selected_strips = SEQ_query_selected_strips(seqbase);
+    has_select = SEQ_collection_len(selected_strips) > 0;
+
+    Sequence *seq;
+    SEQ_ITERATOR_FOREACH (seq, selected_strips) {
+      StripTransform *transform = seq->strip->transform;
+      r_center[0] = transform->xofs;
+      r_center[1] = transform->yofs;
+    }
+    SEQ_collection_free(selected_strips);
+  }
   return has_select;
 }
 
@@ -276,7 +294,7 @@ static int gizmo2d_modal(bContext *C,
   return OPERATOR_RUNNING_MODAL;
 }
 
-static void gizmo2d_xform_setup(const bContext *UNUSED(C), wmGizmoGroup *gzgroup)
+static void gizmo2d_xform_setup(const bContext *C, wmGizmoGroup *gzgroup)
 {
   wmOpe

@@ Diff output truncated at 10240 characters. @@



More information about the Bf-blender-cvs mailing list