[Bf-blender-cvs] [d04d27b406b] master: Sequencer: 2D cursor for the preview & transform

Campbell Barton noreply at git.blender.org
Thu Oct 7 18:29:21 CEST 2021


Commit: d04d27b406b856396102452cab0eedf315e94a54
Author: Campbell Barton
Date:   Thu Oct 7 12:32:04 2021 +1100
Branches: master
https://developer.blender.org/rBd04d27b406b856396102452cab0eedf315e94a54

Sequencer: 2D cursor for the preview & transform

- Use 2D cursor in the preview space using shortcuts
  matching the UV editor and 3D view.
- Add Cursor tool, cursor transform.
- Support for cursor and bound-box pivot.
- Add pivot pie menu.

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

M	release/scripts/presets/keyconfig/keymap_data/blender_default.py
M	release/scripts/startup/bl_ui/space_sequencer.py
M	release/scripts/startup/bl_ui/space_toolsystem_toolbar.py
M	source/blender/draw/DRW_engine.h
M	source/blender/draw/intern/draw_view.c
M	source/blender/draw/intern/draw_view.h
M	source/blender/editors/animation/anim_ops.c
M	source/blender/editors/include/ED_screen.h
M	source/blender/editors/include/ED_util.h
M	source/blender/editors/screen/area.c
M	source/blender/editors/space_sequencer/CMakeLists.txt
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
M	source/blender/editors/space_sequencer/space_sequencer.c
M	source/blender/editors/transform/transform.c
M	source/blender/editors/transform/transform.h
M	source/blender/editors/transform/transform_convert.c
M	source/blender/editors/transform/transform_convert.h
M	source/blender/editors/transform/transform_convert_cursor.c
M	source/blender/editors/transform/transform_generics.c
M	source/blender/editors/transform/transform_gizmo_2d.c
M	source/blender/makesdna/DNA_space_types.h
M	source/blender/makesrna/intern/rna_scene.c
M	source/blender/makesrna/intern/rna_space.c
M	source/blender/sequencer/SEQ_transform.h
M	source/blender/sequencer/intern/strip_transform.c

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

diff --git a/release/scripts/presets/keyconfig/keymap_data/blender_default.py b/release/scripts/presets/keyconfig/keymap_data/blender_default.py
index b8b27b0e8ba..7152069972d 100644
--- a/release/scripts/presets/keyconfig/keymap_data/blender_default.py
+++ b/release/scripts/presets/keyconfig/keymap_data/blender_default.py
@@ -2826,6 +2826,8 @@ def km_sequencerpreview(params):
             value=params.select_mouse_value_fallback,
             legacy=params.legacy,
         ),
+        op_menu_pie("SEQUENCER_MT_pivot_pie", {"type": 'PERIOD', "value": 'PRESS'}),
+
         ("sequencer.view_all_preview", {"type": 'HOME', "value": 'PRESS'}, None),
         ("sequencer.view_all_preview", {"type": 'NDOF_BUTTON_FIT', "value": 'PRESS'}, None),
         ("sequencer.view_ghost_border", {"type": 'O', "value": 'PRESS'}, None),
@@ -2862,6 +2864,18 @@ def km_sequencerpreview(params):
         *_template_items_context_menu("SEQUENCER_MT_preview_context_menu", params.context_menu_event),
     ])
 
+    # 2D cursor.
+    if params.cursor_tweak_event:
+        items.extend([
+            ("sequencer.cursor_set", params.cursor_set_event, None),
+            ("transform.translate", params.cursor_tweak_event,
+             {"properties": [("release_confirm", True), ("cursor_transform", True)]}),
+        ])
+    else:
+        items.extend([
+            ("sequencer.cursor_set", params.cursor_set_event, None),
+        ])
+
     return keymap
 
 
@@ -7465,13 +7479,13 @@ def km_sequencer_editor_tool_select(params, *, fallback):
         _fallback_id("Sequencer Tool: Tweak", fallback),
         {"space_type": 'SEQUENCE_EDITOR', "region_type": 'WINDOW'},
         {"items": [
-            # TODO: Use 2D cursor for preview region (currently `sequencer.sample`).
             *([] if fallback else
-              _template_items_tool_select(params, "sequencer.select", "sequencer.sample", extend="toggle")
+              _template_items_tool_select(params, "sequencer.select", "sequencer.cursor_set", extend="toggle")
               ),
             *([] if (not params.use_fallback_tool_rmb) else _template_sequencer_generic_select(
                 type=params.select_mouse, value=params.select_mouse_value, legacy=params.legacy)),
 
+            # Ignored for preview.
             *_template_items_change_frame(params),
         ]},
     )
@@ -7490,6 +7504,7 @@ def km_sequencer_editor_tool_select_box(params, *, fallback):
             *_template_sequencer_select_for_fallback(params, fallback),
 
             # RMB select can already set the frame, match the tweak tool.
+            # Ignored for preview.
             *(_template_items_change_frame(params)
               if params.select_mouse == 'LEFTMOUSE' else []),
         ]},
@@ -7506,6 +7521,19 @@ def km_sequencer_editor_tool_generic_sample(params):
     )
 
 
+def km_sequencer_editor_tool_cursor(params):
+    return (
+        "Sequencer Tool: Cursor",
+        {"space_type": 'SEQUENCE_EDITOR', "region_type": 'WINDOW'},
+        {"items": [
+            ("sequencer.cursor_set", {"type": params.tool_mouse, "value": 'PRESS'}, None),
+            # Don't use `tool_maybe_tweak_event` since it conflicts with `PRESS` that places the cursor.
+            ("transform.translate", params.tool_tweak_event,
+             {"properties": [("release_confirm", True), ("cursor_transform", True)]}),
+        ]},
+    )
+
+
 def km_sequencer_editor_tool_blade(_params):
     return (
         "Sequencer Tool: Blade",
@@ -7808,6 +7836,7 @@ def generate_keymaps(params=None):
         *(km_sequencer_editor_tool_select_box(params, fallback=fallback) for fallback in (False, True)),
         km_sequencer_editor_tool_blade(params),
         km_sequencer_editor_tool_generic_sample(params),
+        km_sequencer_editor_tool_cursor(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_sequencer.py b/release/scripts/startup/bl_ui/space_sequencer.py
index 03a090255f6..58afb6d9203 100644
--- a/release/scripts/startup/bl_ui/space_sequencer.py
+++ b/release/scripts/startup/bl_ui/space_sequencer.py
@@ -1042,6 +1042,22 @@ class SEQUENCER_MT_preview_context_menu(Menu):
             pass
 
 
+class SEQUENCER_MT_pivot_pie(Menu):
+    bl_label = "Pivot Point"
+
+    def draw(self, context):
+        layout = self.layout
+        pie = layout.menu_pie()
+
+        tool_settings = context.tool_settings
+        sequencer_tool_settings = context.tool_settings.sequencer_tool_settings
+
+        pie.prop_enum(sequencer_tool_settings, "pivot_point", value='CENTER')
+        pie.prop_enum(sequencer_tool_settings, "pivot_point", value='CURSOR')
+        pie.prop_enum(sequencer_tool_settings, "pivot_point", value='INDIVIDUAL_ORIGINS')
+        pie.prop_enum(sequencer_tool_settings, "pivot_point", value='MEDIAN')
+
+
 class SequencerButtonsPanel:
     bl_space_type = 'SEQUENCE_EDITOR'
     bl_region_type = 'UI'
@@ -2185,6 +2201,22 @@ class SEQUENCER_PT_view(SequencerButtonsPanel_Output, Panel):
             col.prop(st, "show_separate_color")
 
 
+class SEQUENCER_PT_view_cursor(SequencerButtonsPanel_Output, Panel):
+    bl_category = "View"
+    bl_label = "2D Cursor"
+
+    def draw(self, context):
+        layout = self.layout
+
+        st = context.space_data
+
+        layout.use_property_split = True
+        layout.use_property_decorate = False
+
+        col = layout.column()
+        col.prop(st, "cursor_location", text="Location")
+
+
 class SEQUENCER_PT_frame_overlay(SequencerButtonsPanel_Output, Panel):
     bl_label = "Frame Overlay"
     bl_category = "View"
@@ -2464,6 +2496,7 @@ classes = (
     SEQUENCER_MT_color_tag_picker,
     SEQUENCER_MT_context_menu,
     SEQUENCER_MT_preview_context_menu,
+    SEQUENCER_MT_pivot_pie,
 
     SEQUENCER_PT_color_tag_picker,
 
@@ -2500,6 +2533,7 @@ classes = (
     SEQUENCER_PT_custom_props,
 
     SEQUENCER_PT_view,
+    SEQUENCER_PT_view_cursor,
     SEQUENCER_PT_frame_overlay,
     SEQUENCER_PT_view_safe_areas,
     SEQUENCER_PT_view_safe_areas_center_cut,
diff --git a/release/scripts/startup/bl_ui/space_toolsystem_toolbar.py b/release/scripts/startup/bl_ui/space_toolsystem_toolbar.py
index 6478cff3597..008129cd389 100644
--- a/release/scripts/startup/bl_ui/space_toolsystem_toolbar.py
+++ b/release/scripts/startup/bl_ui/space_toolsystem_toolbar.py
@@ -2440,6 +2440,19 @@ class _defs_node_edit:
 
 class _defs_sequencer_generic:
 
+    @ToolDef.from_fn
+    def cursor():
+        return dict(
+            idname="builtin.cursor",
+            label="Cursor",
+            description=(
+                "Set the cursor location, drag to transform"
+            ),
+            icon="ops.generic.cursor",
+            keymap="Sequencer Tool: Cursor",
+            options={'KEYMAP_FALLBACK'},
+        )
+
     @ToolDef.from_fn
     def blade():
         def draw_settings(_context, layout, tool):
@@ -3094,6 +3107,8 @@ class SEQUENCER_PT_tools_active(ToolSelectPanelHelper, Panel):
         ],
         'PREVIEW': [
             *_tools_select,
+            _defs_sequencer_generic.cursor,
+            None,
             _defs_sequencer_generic.translate,
             _defs_sequencer_generic.rotate,
             _defs_sequencer_generic.scale,
@@ -3106,6 +3121,8 @@ class SEQUENCER_PT_tools_active(ToolSelectPanelHelper, Panel):
         ],
         'SEQUENCER_PREVIEW': [
             *_tools_select,
+            _defs_sequencer_generic.cursor,
+            None,
             _defs_sequencer_generic.translate,
             _defs_sequencer_generic.rotate,
             _defs_sequencer_generic.scale,
diff --git a/source/blender/draw/DRW_engine.h b/source/blender/draw/DRW_engine.h
index 927a29ed6b6..af6c8ea62b2 100644
--- a/source/blender/draw/DRW_engine.h
+++ b/source/blender/draw/DRW_engine.h
@@ -179,6 +179,9 @@ void DRW_viewport_data_free(struct DRWData *drw_data);
 bool DRW_opengl_context_release(void);
 void DRW_opengl_context_activate(bool drw_state);
 
+/* We may want to move this into a more general location. */
+void DRW_draw_cursor_2d_ex(const struct ARegion *region, const float cursor[2]);
+
 #ifdef __cplusplus
 }
 #endif
diff --git a/source/blender/draw/intern/draw_view.c b/source/blender/draw/intern/draw_view.c
index 90bb3762473..bbd345271b1 100644
--- a/source/blender/draw/intern/draw_view.c
+++ b/source/blender/draw/intern/draw_view.c
@@ -28,6 +28,7 @@
 #include "DNA_view3d_types.h"
 
 #include "ED_screen.h"
+#include "ED_util.h"
 #include "ED_view3d.h"
 
 #include "GPU_immediate.h"
@@ -226,6 +227,46 @@ static bool is_cursor_visible_2d(const DRWContextState *draw_ctx)
   return (sima->overlay.flag & SI_OVERLAY_SHOW_OVERLAYS) != 0;
 }
 
+/* -------------------------------------------------------------------- */
+/** \name Generic Cursor
+ * \{ */
+
+/**
+ * \note This doesn't require the draw context to be in use.
+ */
+void DRW_draw_cursor_2d_ex(const ARegion *region, const float cursor[2])
+{
+  int co[2];
+  UI_view2d_view_to_region(&region->v2d, cursor[0], cursor[1], &co[0], &co[1]);
+
+  /* Draw nice Anti Aliased cursor. */
+  GPU_line_width(1.0f);
+  GPU_blend(GPU_BLEND_ALPHA);
+  GPU_line_smooth(true);
+
+  /* Draw lines */
+  float original_proj[4][4];
+  GPU_matrix_projection_get(original_proj);
+  GPU_matrix_push();
+  ED_region_pixelspace(region);
+  GPU_matrix_translate_2f(co[0] + 0.5f, co[1] + 0.5f);
+  GPU_matrix_scale_2f(U.widget_unit, U.widget_unit);
+
+  GPUBatch *cursor_batch = DRW_cache_cursor_get(true);
+
+  GPUShader *shader = GPU_shader_get_builtin_shader(GPU_SHADER_2D_FLAT_COLOR);
+  GPU_batch_set_shader(cursor_batch, shader);
+
+  GPU_batch_draw(cursor_batch);
+
+  GPU_blend(GPU_BLEND_NONE);
+  GPU_line_smooth(false);
+  GPU_matrix_pop();
+  GPU_matrix_projection_set(original_proj);
+}
+
+/** \} */
+
 void DRW_draw_cursor_2d(void)
 {
   const DRWContextState *draw_ctx = DRW_context_state_get();
@@ -236,33 +277,8 @@ void DRW_draw_cursor_2d(void)
   GPU_depth_test(GPU_DEPTH_NONE);
 
   if (is_cursor_visible_2d(draw_ctx)) {
-    SpaceImage *sima = (SpaceImage *)draw_ctx->space_data;
-    int co[2];
-    UI_view2d_view_to_region(&region->v2d, sima->cursor[0

@@ Diff output truncated at 10240 characters. @@



More information about the Bf-blender-cvs mailing list