[Bf-blender-cvs] [c9881f7ebd5] soc-2021-curves: Moved extra functionalities to modal keymap

Dilith Jayakody noreply at git.blender.org
Sat Mar 5 16:40:04 CET 2022


Commit: c9881f7ebd531e88a37fb2347056d575bfe70fe8
Author: Dilith Jayakody
Date:   Sat Feb 26 11:23:21 2022 +0530
Branches: soc-2021-curves
https://developer.blender.org/rBc9881f7ebd531e88a37fb2347056d575bfe70fe8

Moved extra functionalities to modal keymap

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

M	release/scripts/modules/bl_keymap_utils/keymap_hierarchy.py
M	release/scripts/presets/keyconfig/keymap_data/blender_default.py
M	source/blender/editors/curve/curve_intern.h
M	source/blender/editors/curve/curve_ops.c
M	source/blender/editors/curve/editcurve_pen.c

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

diff --git a/release/scripts/modules/bl_keymap_utils/keymap_hierarchy.py b/release/scripts/modules/bl_keymap_utils/keymap_hierarchy.py
index 938849d8e6e..6389efba049 100644
--- a/release/scripts/modules/bl_keymap_utils/keymap_hierarchy.py
+++ b/release/scripts/modules/bl_keymap_utils/keymap_hierarchy.py
@@ -100,6 +100,7 @@ _km_hierarchy = [
         ('Paint Stroke Modal', 'EMPTY', 'WINDOW', []),
         ('Sculpt Expand Modal', 'EMPTY', 'WINDOW', []),
         ('Paint Curve', 'EMPTY', 'WINDOW', []),
+        ('Curve Pen Modal Map', 'EMPTY', 'WINDOW', []),
 
         ('Object Non-modal', 'EMPTY', 'WINDOW', []),  # mode change
 
diff --git a/release/scripts/presets/keyconfig/keymap_data/blender_default.py b/release/scripts/presets/keyconfig/keymap_data/blender_default.py
index 16b55ddd890..e03abe1d19c 100644
--- a/release/scripts/presets/keyconfig/keymap_data/blender_default.py
+++ b/release/scripts/presets/keyconfig/keymap_data/blender_default.py
@@ -6109,6 +6109,25 @@ def km_sculpt_expand_modal(_params):
     return keymap
 
 
+def km_curve_pen_modal_map(_params):
+    items = []
+    keymap = (
+        "Curve Pen Modal Map",
+        {"space_type": 'EMPTY', "region_type": 'WINDOW', "modal": True},
+        {"items": items},
+    )
+
+    items.extend([
+        ("FREE_ALIGN_TOGGLE", {"type": 'LEFT_SHIFT', "value": 'PRESS', "any": True}, None),
+        ("MOVE_ADJACENT", {"type": 'LEFT_CTRL', "value": 'ANY', "any": True}, None),
+        ("MOVE_ENTIRE", {"type": 'SPACE', "value": 'ANY', "any": True}, None),
+        ("LOCK_ANGLE", {"type": 'LEFT_ALT', "value": 'ANY', "any": True}, None),
+        ("LINK_HANDLES", {"type": 'RIGHT_CTRL', "value": 'PRESS', "any": True}, None),
+    ])
+
+    return keymap
+
+
 # Fallback for gizmos that don't have custom a custom key-map.
 def km_generic_gizmo(_params):
     keymap = (
@@ -7032,11 +7051,6 @@ def km_3d_view_tool_edit_curve_pen(params):
                  ("select_point", True),
                  ("move_point", True),
                  ("close_spline_opts", "ON_CLICK"),
-                 ("free_toggle", "SHIFT"),
-                 ("lock_angle", "CTRL"),
-                 ("move_entire", "ALT"),
-                 ("link_handles", "CTRL_SHIFT"),
-                 ("adj_handle", "CTRL_ALT"),
                 ]}),
             ("curve.pen", {"type": params.tool_mouse, "value": 'PRESS', "ctrl": True},
              {"properties": [("delete_point", True),]}),
@@ -7852,6 +7866,7 @@ def generate_keymaps(params=None):
         km_view3d_dolly_modal(params),
         km_paint_stroke_modal(params),
         km_sculpt_expand_modal(params),
+        km_curve_pen_modal_map(params),
 
         # Gizmos.
         km_generic_gizmo(params),
diff --git a/source/blender/editors/curve/curve_intern.h b/source/blender/editors/curve/curve_intern.h
index c7e234d3aa7..6c7fa6c294f 100644
--- a/source/blender/editors/curve/curve_intern.h
+++ b/source/blender/editors/curve/curve_intern.h
@@ -215,3 +215,4 @@ void CURVE_OT_draw(struct wmOperatorType *ot);
 
 /* editcurve_pen.c */
 void CURVE_OT_pen(struct wmOperatorType *ot);
+struct wmKeyMap *curve_pen_modal_keymap(struct wmKeyConfig *keyconf);
diff --git a/source/blender/editors/curve/curve_ops.c b/source/blender/editors/curve/curve_ops.c
index fa2eefea027..2417947a25e 100644
--- a/source/blender/editors/curve/curve_ops.c
+++ b/source/blender/editors/curve/curve_ops.c
@@ -151,4 +151,6 @@ void ED_keymap_curve(wmKeyConfig *keyconf)
   /* only set in editmode curve, by space_view3d listener */
   keymap = WM_keymap_ensure(keyconf, "Curve", 0, 0);
   keymap->poll = ED_operator_editsurfcurve;
+
+  curve_pen_modal_keymap(keyconf);
 }
diff --git a/source/blender/editors/curve/editcurve_pen.c b/source/blender/editors/curve/editcurve_pen.c
index a4bec0f4673..7992f49e5ca 100644
--- a/source/blender/editors/curve/editcurve_pen.c
+++ b/source/blender/editors/curve/editcurve_pen.c
@@ -107,18 +107,16 @@ typedef struct CurvePenData {
   /* Whether shift-click was pressed. */
   bool select_multi;
 
-  /* Whether shortcut for toggling free handles was pressed. */
-  bool free_toggle_pressed;
   /* Whether the current handle type of the moved handle is free. */
   bool free_toggle;
-  /* Whether shortcut for linking handles was pressed. */
-  bool link_handles_pressed;
+  /* Whether the shortcut for moving the adjacent handle is pressed. */
+  bool move_adjacent;
   /* Whether the current state of the moved handle is linked. */
   bool link_handles;
   /* Whether the current state of the handle angle is locked. */
   bool lock_angle;
   /* Whether the shortcut for moving the entire point is pressed. */
-  bool move_entire_pressed;
+  bool move_entire;
 
   /* Data about found point. Used for closing splines. */
   Nurb *nu;
@@ -393,7 +391,7 @@ static void move_all_selected_points(ListBase *nurbs,
 
   const bool link_handles = cpd->link_handles && !cpd->free_toggle;
   const bool lock_angle = cpd->lock_angle;
-  const bool move_entire = cpd->move_entire_pressed;
+  const bool move_entire = cpd->move_entire;
 
   float distance = 0.0f;
   if (lock_angle) {
@@ -1437,6 +1435,59 @@ static void cycle_handles(BezTriple *bezt)
   }
 }
 
+enum {
+  PEN_MODAL_FREE_ALIGN_TOGGLE = 1,
+  PEN_MODAL_MOVE_ADJACENT,
+  PEN_MODAL_MOVE_ENTIRE,
+  PEN_MODAL_LINK_HANDLES,
+  PEN_MODAL_LOCK_ANGLE
+};
+
+wmKeyMap *curve_pen_modal_keymap(wmKeyConfig *keyconf)
+{
+  static const EnumPropertyItem modal_items[] = {
+      {PEN_MODAL_FREE_ALIGN_TOGGLE,
+       "FREE_ALIGN_TOGGLE",
+       0,
+       "Free Move handle",
+       "Move handle of newly added point freely"},
+      {PEN_MODAL_MOVE_ADJACENT,
+       "MOVE_ADJACENT",
+       0,
+       "Move Adjacent Handle",
+       "Move the closer handle of the adjacent vertex"},
+      {PEN_MODAL_MOVE_ENTIRE,
+       "MOVE_ENTIRE",
+       0,
+       "Move Entire",
+       "Move the closer handle of the adjacent vertex"},
+      {PEN_MODAL_LINK_HANDLES,
+       "LINK_HANDLES",
+       0,
+       "Link Handles",
+       "Mirror the movement of one handle onto the other"},
+      {PEN_MODAL_LOCK_ANGLE,
+       "LOCK_ANGLE",
+       0,
+       "Lock Angle",
+       "Move the handle along its current angle"},
+      {0, NULL, 0, NULL, NULL},
+  };
+
+  wmKeyMap *keymap = WM_modalkeymap_find(keyconf, "Curve Pen Modal Map");
+
+  /* This function is called for each spacetype, only needs to add map once */
+  if (keymap && keymap->modal_items) {
+    return NULL;
+  }
+
+  keymap = WM_modalkeymap_ensure(keyconf, "Curve Pen Modal Map", modal_items);
+
+  WM_modalkeymap_assign(keymap, "CURVE_OT_pen");
+
+  return keymap;
+}
+
 static int curve_pen_modal(bContext *C, wmOperator *op, const wmEvent *event)
 {
   Depsgraph *depsgraph = CTX_data_ensure_evaluated_depsgraph(C);
@@ -1468,11 +1519,6 @@ static int curve_pen_modal(bContext *C, wmOperator *op, const wmEvent *event)
   const bool cycle_handle_type = RNA_boolean_get(op->ptr, "cycle_handle_type");
   const int close_spline_opts = RNA_enum_get(op->ptr, "close_spline_opts");
   const int extrude_handle = RNA_enum_get(op->ptr, "extrude_handle");
-  const int free_toggle = RNA_enum_get(op->ptr, "free_toggle");
-  const int adj_handle = RNA_enum_get(op->ptr, "adj_handle");
-  const int move_entire = RNA_enum_get(op->ptr, "move_entire");
-  const int link_handles = RNA_enum_get(op->ptr, "link_handles");
-  const int lock_angle = RNA_enum_get(op->ptr, "lock_angle");
 
   CurvePenData *cpd;
   if (op->customdata == NULL) {
@@ -1483,21 +1529,27 @@ static int curve_pen_modal(bContext *C, wmOperator *op, const wmEvent *event)
     cpd->select_multi = event->modifier == KM_SHIFT;
   }
 
-  if (!cpd->free_toggle_pressed && is_extra_key_pressed(event, free_toggle)) {
-    toggle_bezt_free_align_handles(nurbs);
-    cpd->free_toggle = !cpd->free_toggle;
-    cpd->dragging = true;
-  }
-  cpd->free_toggle_pressed = is_extra_key_pressed(event, free_toggle);
-  if (!cpd->link_handles_pressed && is_extra_key_pressed(event, link_handles)) {
-    cpd->link_handles = !cpd->link_handles;
-    if (cpd->link_handles && !cpd->free_toggle_pressed) {
-      move_all_selected_points(nurbs, false, cpd, event, &vc);
+  if (event->type == EVT_MODAL_MAP) {
+    if (event->val == PEN_MODAL_FREE_ALIGN_TOGGLE) {
+      toggle_bezt_free_align_handles(nurbs);
+      cpd->free_toggle = !cpd->free_toggle;
+    }
+    else if (event->val == PEN_MODAL_LINK_HANDLES) {
+      cpd->link_handles = !cpd->link_handles;
+      if (cpd->link_handles) {
+        move_all_selected_points(nurbs, false, cpd, event, &vc);
+      }
+    }
+    else if (event->val == PEN_MODAL_MOVE_ENTIRE) {
+      cpd->move_entire = !cpd->move_entire;
+    }
+    else if (event->val == PEN_MODAL_MOVE_ADJACENT) {
+      cpd->move_adjacent = !cpd->move_adjacent;
+    }
+    else if (event->val == PEN_MODAL_LOCK_ANGLE) {
+      cpd->lock_angle = !cpd->lock_angle;
     }
   }
-  cpd->link_handles_pressed = is_extra_key_pressed(event, link_handles);
-  cpd->move_entire_pressed = is_extra_key_pressed(event, move_entire);
-  cpd->lock_angle = is_extra_key_pressed(event, lock_angle);
 
   if (ELEM(event->type, MOUSEMOVE, INBETWEEN_MOUSEMOVE)) {
     /* Check if dragging */
@@ -1526,7 +1578,7 @@ static int curve_pen_modal(bContext *C, wmOperator *op, const wmEvent *event)
           BKE_nurb_handles_calc(seg_data->nu);
         }
       }
-      else if (is_extra_key_pressed(event, adj_handle)) {
+      else if (cpd->move_adjacent) {
         move_adjacent_handle(&vc, event, nurbs);
         cpd->acted = true;
       }
@@ -1723,36 +1775,6 @@ void CURVE_OT_pen(wmOperatorType *ot)
                        "A multiplier on the default click distance",
                        0.1f,
                        1.5f);
-  prop = RNA_def_enum(ot->srna,
-                      "free_toggle",
-                      prop_extra_key_types,
-                      NONE,
-                      "Free-Align Toggle",
-                      "Toggle between free and align handles");
-  prop = RNA_def_enum(ot->srna,
-                      "adj_handle",
-                      prop_extra_key_types,
-                      NONE,
-                      "Move Adjacent Handle",
-                      "Move the closer handle of the adjacent vert

@@ Diff output truncated at 10240 characters. @@



More information about the Bf-blender-cvs mailing list