[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