[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