diff options
author | Campbell Barton <campbell@blender.org> | 2022-04-04 06:47:06 +0300 |
---|---|---|
committer | Campbell Barton <campbell@blender.org> | 2022-04-04 07:32:42 +0300 |
commit | f699dbba86156ad3f24c24e3d369f0708b3fd1b5 (patch) | |
tree | e244f3f17a5a2166d443d25c14abb915d316f1a2 /source/blender/windowmanager | |
parent | 0ef96cd3922dbc16271f2dbaca0c7752db92a40d (diff) |
Cleanup: use event parameters for functions that create key-map items
Replace 5 arguments with a single struct as the same arguments
are used in many places.
This didn't read well and was confusing with both arguments named
`val` & `value` in the case of WM_modalkeymap_add_item.
Diffstat (limited to 'source/blender/windowmanager')
-rw-r--r-- | source/blender/windowmanager/WM_keymap.h | 56 | ||||
-rw-r--r-- | source/blender/windowmanager/gizmo/intern/wm_gizmo_group.c | 162 | ||||
-rw-r--r-- | source/blender/windowmanager/intern/wm_keymap.c | 64 | ||||
-rw-r--r-- | source/blender/windowmanager/intern/wm_keymap_utils.c | 36 |
4 files changed, 189 insertions, 129 deletions
diff --git a/source/blender/windowmanager/WM_keymap.h b/source/blender/windowmanager/WM_keymap.h index 068dbb32be2..591da28ded2 100644 --- a/source/blender/windowmanager/WM_keymap.h +++ b/source/blender/windowmanager/WM_keymap.h @@ -37,6 +37,20 @@ void WM_keyconfig_update_operatortype(void); /* Keymap */ +/** Parameters for matching events, passed into functions that create key-map items. */ +typedef struct KeyMapItem_Params { + /** #wmKeyMapItem.type */ + int16_t type; + /** #wmKeyMapItem.val */ + int8_t value; + /** #wmKeyMapItem `ctrl, shift, alt, oskey` */ + int8_t modifier; + /** #wmKeyMapItem.keymodifier */ + int16_t keymodifier; + /** #wmKeyMapItem.direction */ + int8_t direction; +} KeyMapItem_Params; + void WM_keymap_clear(struct wmKeyMap *keymap); /** @@ -44,11 +58,7 @@ void WM_keymap_clear(struct wmKeyMap *keymap); */ wmKeyMapItem *WM_keymap_add_item(struct wmKeyMap *keymap, const char *idname, - int type, - int val, - int modifier, - int keymodifier, - int direction); + const KeyMapItem_Params *params); wmKeyMapItem *WM_keymap_add_item_copy(struct wmKeyMap *keymap, wmKeyMapItem *kmi_src); bool WM_keymap_remove_item(struct wmKeyMap *keymap, struct wmKeyMapItem *kmi); @@ -87,41 +97,25 @@ bool WM_keymap_item_compare(const struct wmKeyMapItem *k1, const struct wmKeyMap */ wmKeyMapItem *WM_keymap_add_menu(struct wmKeyMap *keymap, const char *idname, - int type, - int val, - int modifier, - int keymodifier, - int direction); + const KeyMapItem_Params *params); /** * Pie-menu wrapper for #WM_keymap_add_item. */ wmKeyMapItem *WM_keymap_add_menu_pie(struct wmKeyMap *keymap, const char *idname, - int type, - int val, - int modifier, - int keymodifier, - int direction); + const KeyMapItem_Params *params); /** * Panel (popover) wrapper for #WM_keymap_add_item. */ wmKeyMapItem *WM_keymap_add_panel(struct wmKeyMap *keymap, const char *idname, - int type, - int val, - int modifier, - int keymodifier, - int direction); + const KeyMapItem_Params *params); /** * Tool wrapper for #WM_keymap_add_item. */ wmKeyMapItem *WM_keymap_add_tool(struct wmKeyMap *keymap, const char *idname, - int type, - int val, - int modifier, - int keymodifier, - int direction); + const KeyMapItem_Params *params); wmKeyMap *WM_keymap_guess_from_context(const struct bContext *C); @@ -154,18 +148,10 @@ wmKeyMap *WM_modalkeymap_ensure(struct wmKeyConfig *keyconf, const struct EnumPropertyItem *items); wmKeyMap *WM_modalkeymap_find(struct wmKeyConfig *keyconf, const char *idname); wmKeyMapItem *WM_modalkeymap_add_item(struct wmKeyMap *km, - int type, - int val, - int modifier, - int keymodifier, - int direction, + const KeyMapItem_Params *params, int value); wmKeyMapItem *WM_modalkeymap_add_item_str(struct wmKeyMap *km, - int type, - int val, - int modifier, - int keymodifier, - int direction, + const KeyMapItem_Params *params, const char *value); const wmKeyMapItem *WM_modalkeymap_find_propvalue(const wmKeyMap *km, int propvalue); void WM_modalkeymap_assign(struct wmKeyMap *km, const char *opname); diff --git a/source/blender/windowmanager/gizmo/intern/wm_gizmo_group.c b/source/blender/windowmanager/gizmo/intern/wm_gizmo_group.c index d7b54129caa..4ecadbc5685 100644 --- a/source/blender/windowmanager/gizmo/intern/wm_gizmo_group.c +++ b/source/blender/windowmanager/gizmo/intern/wm_gizmo_group.c @@ -640,29 +640,105 @@ wmKeyMap *wm_gizmogroup_tweak_modal_keymap(wmKeyConfig *keyconf) keymap = WM_modalkeymap_ensure(keyconf, name, modal_items); /* items for modal map */ - WM_modalkeymap_add_item(keymap, EVT_ESCKEY, KM_PRESS, KM_ANY, 0, KM_ANY, TWEAK_MODAL_CANCEL); - WM_modalkeymap_add_item(keymap, RIGHTMOUSE, KM_PRESS, KM_ANY, 0, KM_ANY, TWEAK_MODAL_CANCEL); - - WM_modalkeymap_add_item(keymap, EVT_RETKEY, KM_PRESS, KM_ANY, 0, KM_ANY, TWEAK_MODAL_CONFIRM); - WM_modalkeymap_add_item(keymap, EVT_PADENTER, KM_PRESS, KM_ANY, 0, KM_ANY, TWEAK_MODAL_CONFIRM); - - WM_modalkeymap_add_item( - keymap, EVT_RIGHTSHIFTKEY, KM_PRESS, KM_ANY, 0, KM_ANY, TWEAK_MODAL_PRECISION_ON); - WM_modalkeymap_add_item( - keymap, EVT_RIGHTSHIFTKEY, KM_RELEASE, KM_ANY, 0, KM_ANY, TWEAK_MODAL_PRECISION_OFF); - WM_modalkeymap_add_item( - keymap, EVT_LEFTSHIFTKEY, KM_PRESS, KM_ANY, 0, KM_ANY, TWEAK_MODAL_PRECISION_ON); - WM_modalkeymap_add_item( - keymap, EVT_LEFTSHIFTKEY, KM_RELEASE, KM_ANY, 0, KM_ANY, TWEAK_MODAL_PRECISION_OFF); - - WM_modalkeymap_add_item( - keymap, EVT_RIGHTCTRLKEY, KM_PRESS, KM_ANY, 0, KM_ANY, TWEAK_MODAL_SNAP_ON); - WM_modalkeymap_add_item( - keymap, EVT_RIGHTCTRLKEY, KM_RELEASE, KM_ANY, 0, KM_ANY, TWEAK_MODAL_SNAP_OFF); - WM_modalkeymap_add_item( - keymap, EVT_LEFTCTRLKEY, KM_PRESS, KM_ANY, 0, KM_ANY, TWEAK_MODAL_SNAP_ON); - WM_modalkeymap_add_item( - keymap, EVT_LEFTCTRLKEY, KM_RELEASE, KM_ANY, 0, KM_ANY, TWEAK_MODAL_SNAP_OFF); + WM_modalkeymap_add_item(keymap, + &(const KeyMapItem_Params){ + .type = EVT_ESCKEY, + .value = KM_PRESS, + .modifier = KM_ANY, + .direction = KM_ANY, + }, + TWEAK_MODAL_CANCEL); + WM_modalkeymap_add_item(keymap, + &(const KeyMapItem_Params){ + .type = RIGHTMOUSE, + .value = KM_PRESS, + .modifier = KM_ANY, + .direction = KM_ANY, + }, + TWEAK_MODAL_CANCEL); + + WM_modalkeymap_add_item(keymap, + &(const KeyMapItem_Params){ + .type = EVT_RETKEY, + .value = KM_PRESS, + .modifier = KM_ANY, + .direction = KM_ANY, + }, + TWEAK_MODAL_CONFIRM); + WM_modalkeymap_add_item(keymap, + &(const KeyMapItem_Params){ + .type = EVT_PADENTER, + .value = KM_PRESS, + .modifier = KM_ANY, + .direction = KM_ANY, + }, + TWEAK_MODAL_CONFIRM); + + WM_modalkeymap_add_item(keymap, + &(const KeyMapItem_Params){ + .type = EVT_RIGHTSHIFTKEY, + .value = KM_PRESS, + .modifier = KM_ANY, + .direction = KM_ANY, + }, + TWEAK_MODAL_PRECISION_ON); + WM_modalkeymap_add_item(keymap, + &(const KeyMapItem_Params){ + .type = EVT_RIGHTSHIFTKEY, + .value = KM_RELEASE, + .modifier = KM_ANY, + .direction = KM_ANY, + }, + TWEAK_MODAL_PRECISION_OFF); + WM_modalkeymap_add_item(keymap, + &(const KeyMapItem_Params){ + .type = EVT_LEFTSHIFTKEY, + .value = KM_PRESS, + .modifier = KM_ANY, + .direction = KM_ANY, + }, + TWEAK_MODAL_PRECISION_ON); + WM_modalkeymap_add_item(keymap, + &(const KeyMapItem_Params){ + .type = EVT_LEFTSHIFTKEY, + .value = KM_RELEASE, + .modifier = KM_ANY, + .direction = KM_ANY, + }, + TWEAK_MODAL_PRECISION_OFF); + + WM_modalkeymap_add_item(keymap, + &(const KeyMapItem_Params){ + .type = EVT_RIGHTCTRLKEY, + .value = KM_PRESS, + .modifier = KM_ANY, + .direction = KM_ANY, + }, + TWEAK_MODAL_SNAP_ON); + WM_modalkeymap_add_item(keymap, + &(const KeyMapItem_Params){ + .type = EVT_RIGHTCTRLKEY, + .value = KM_RELEASE, + .modifier = KM_ANY, + .direction = KM_ANY, + }, + TWEAK_MODAL_SNAP_OFF); + WM_modalkeymap_add_item(keymap, + &(const KeyMapItem_Params){ + .type = EVT_LEFTCTRLKEY, + .value = KM_PRESS, + .modifier = KM_ANY, + .direction = KM_ANY, + }, + TWEAK_MODAL_SNAP_ON); + WM_modalkeymap_add_item(keymap, + &(const KeyMapItem_Params){ + .type = EVT_LEFTCTRLKEY, + .value = KM_RELEASE, + .modifier = KM_ANY, + .direction = KM_ANY, + }, + TWEAK_MODAL_SNAP_OFF); WM_modalkeymap_assign(keymap, "GIZMOGROUP_OT_gizmo_tweak"); @@ -720,20 +796,44 @@ static wmKeyMap *WM_gizmogroup_keymap_template_select_ex( #endif if (do_init) { - WM_keymap_add_item( - km, "GIZMOGROUP_OT_gizmo_tweak", action_mouse, action_mouse_val, KM_ANY, 0, KM_ANY); - WM_keymap_add_item( - km, "GIZMOGROUP_OT_gizmo_tweak", select_tweak, select_tweak_val, 0, 0, KM_ANY); + WM_keymap_add_item(km, + "GIZMOGROUP_OT_gizmo_tweak", + &(const KeyMapItem_Params){ + .type = action_mouse, + .value = action_mouse_val, + .modifier = KM_ANY, + .direction = KM_ANY, + }); + WM_keymap_add_item(km, + "GIZMOGROUP_OT_gizmo_tweak", + &(const KeyMapItem_Params){ + .type = select_tweak, + .value = select_tweak_val, + .modifier = 0, + .direction = KM_ANY, + }); } if (do_init) { - wmKeyMapItem *kmi = WM_keymap_add_item( - km, "GIZMOGROUP_OT_gizmo_select", select_mouse, select_mouse_val, 0, 0, KM_ANY); + wmKeyMapItem *kmi = WM_keymap_add_item(km, + "GIZMOGROUP_OT_gizmo_select", + &(const KeyMapItem_Params){ + .type = select_mouse, + .value = select_mouse_val, + .modifier = 0, + .direction = KM_ANY, + }); RNA_boolean_set(kmi->ptr, "extend", false); RNA_boolean_set(kmi->ptr, "deselect", false); RNA_boolean_set(kmi->ptr, "toggle", false); - kmi = WM_keymap_add_item( - km, "GIZMOGROUP_OT_gizmo_select", select_mouse, select_mouse_val, KM_SHIFT, 0, KM_ANY); + kmi = WM_keymap_add_item(km, + "GIZMOGROUP_OT_gizmo_select", + &(const KeyMapItem_Params){ + .type = select_mouse, + .value = select_mouse_val, + .modifier = KM_SHIFT, + .direction = KM_ANY, + }); RNA_boolean_set(kmi->ptr, "extend", false); RNA_boolean_set(kmi->ptr, "deselect", false); RNA_boolean_set(kmi->ptr, "toggle", true); diff --git a/source/blender/windowmanager/intern/wm_keymap.c b/source/blender/windowmanager/intern/wm_keymap.c index ffac585cde7..1fa5e64093f 100644 --- a/source/blender/windowmanager/intern/wm_keymap.c +++ b/source/blender/windowmanager/intern/wm_keymap.c @@ -456,32 +456,35 @@ bool WM_keymap_poll(bContext *C, wmKeyMap *keymap) return true; } -static void keymap_event_set( - wmKeyMapItem *kmi, short type, short val, int modifier, short keymodifier, int direction) +static void keymap_event_set(wmKeyMapItem *kmi, const KeyMapItem_Params *params) { - kmi->type = type; - kmi->val = val; - kmi->keymodifier = keymodifier; - kmi->direction = direction; + kmi->type = params->type; + kmi->val = params->value; + kmi->keymodifier = params->keymodifier; + kmi->direction = params->direction; - if (modifier == KM_ANY) { + if (params->modifier == KM_ANY) { kmi->shift = kmi->ctrl = kmi->alt = kmi->oskey = KM_ANY; } else { /* Only one of the flags should be set. */ - BLI_assert(((modifier & (KM_SHIFT | KM_SHIFT_ANY)) != (KM_SHIFT | KM_SHIFT_ANY)) && - ((modifier & (KM_CTRL | KM_CTRL_ANY)) != (KM_CTRL | KM_CTRL_ANY)) && - ((modifier & (KM_ALT | KM_ALT_ANY)) != (KM_ALT | KM_ALT_ANY)) && - ((modifier & (KM_OSKEY | KM_OSKEY_ANY)) != (KM_OSKEY | KM_OSKEY_ANY))); - - kmi->shift = ((modifier & KM_SHIFT) ? KM_MOD_HELD : - ((modifier & KM_SHIFT_ANY) ? KM_ANY : KM_NOTHING)); - kmi->ctrl = ((modifier & KM_CTRL) ? KM_MOD_HELD : - ((modifier & KM_CTRL_ANY) ? KM_ANY : KM_NOTHING)); - kmi->alt = ((modifier & KM_ALT) ? KM_MOD_HELD : - ((modifier & KM_ALT_ANY) ? KM_ANY : KM_NOTHING)); - kmi->oskey = ((modifier & KM_OSKEY) ? KM_MOD_HELD : - ((modifier & KM_OSKEY_ANY) ? KM_ANY : KM_NOTHING)); + BLI_assert(((params->modifier & (KM_SHIFT | KM_SHIFT_ANY)) != (KM_SHIFT | KM_SHIFT_ANY)) && + ((params->modifier & (KM_CTRL | KM_CTRL_ANY)) != (KM_CTRL | KM_CTRL_ANY)) && + ((params->modifier & (KM_ALT | KM_ALT_ANY)) != (KM_ALT | KM_ALT_ANY)) && + ((params->modifier & (KM_OSKEY | KM_OSKEY_ANY)) != (KM_OSKEY | KM_OSKEY_ANY))); + + kmi->shift = ((params->modifier & KM_SHIFT) ? + KM_MOD_HELD : + ((params->modifier & KM_SHIFT_ANY) ? KM_ANY : KM_NOTHING)); + kmi->ctrl = ((params->modifier & KM_CTRL) ? + KM_MOD_HELD : + ((params->modifier & KM_CTRL_ANY) ? KM_ANY : KM_NOTHING)); + kmi->alt = ((params->modifier & KM_ALT) ? + KM_MOD_HELD : + ((params->modifier & KM_ALT_ANY) ? KM_ANY : KM_NOTHING)); + kmi->oskey = ((params->modifier & KM_OSKEY) ? + KM_MOD_HELD : + ((params->modifier & KM_OSKEY_ANY) ? KM_ANY : KM_NOTHING)); } } @@ -498,18 +501,14 @@ static void keymap_item_set_id(wmKeyMap *keymap, wmKeyMapItem *kmi) wmKeyMapItem *WM_keymap_add_item(wmKeyMap *keymap, const char *idname, - int type, - int val, - int modifier, - int keymodifier, - int direction) + const KeyMapItem_Params *params) { wmKeyMapItem *kmi = MEM_callocN(sizeof(wmKeyMapItem), "keymap entry"); BLI_addtail(&keymap->items, kmi); BLI_strncpy(kmi->idname, idname, OP_MAX_TYPENAME); - keymap_event_set(kmi, type, val, modifier, keymodifier, direction); + keymap_event_set(kmi, params); wm_keymap_item_properties_set(kmi); keymap_item_set_id(keymap, kmi); @@ -922,15 +921,14 @@ wmKeyMap *WM_modalkeymap_find(wmKeyConfig *keyconf, const char *idname) return NULL; } -wmKeyMapItem *WM_modalkeymap_add_item( - wmKeyMap *km, int type, int val, int modifier, int keymodifier, int direction, int value) +wmKeyMapItem *WM_modalkeymap_add_item(wmKeyMap *km, const KeyMapItem_Params *params, int value) { wmKeyMapItem *kmi = MEM_callocN(sizeof(wmKeyMapItem), "keymap entry"); BLI_addtail(&km->items, kmi); kmi->propvalue = value; - keymap_event_set(kmi, type, val, modifier, keymodifier, direction); + keymap_event_set(kmi, params); keymap_item_set_id(km, kmi); @@ -940,11 +938,7 @@ wmKeyMapItem *WM_modalkeymap_add_item( } wmKeyMapItem *WM_modalkeymap_add_item_str(wmKeyMap *km, - int type, - int val, - int modifier, - int keymodifier, - int direction, + const KeyMapItem_Params *params, const char *value) { wmKeyMapItem *kmi = MEM_callocN(sizeof(wmKeyMapItem), "keymap entry"); @@ -952,7 +946,7 @@ wmKeyMapItem *WM_modalkeymap_add_item_str(wmKeyMap *km, BLI_addtail(&km->items, kmi); BLI_strncpy(kmi->propvalue_str, value, sizeof(kmi->propvalue_str)); - keymap_event_set(kmi, type, val, modifier, keymodifier, direction); + keymap_event_set(kmi, params); keymap_item_set_id(km, kmi); diff --git a/source/blender/windowmanager/intern/wm_keymap_utils.c b/source/blender/windowmanager/intern/wm_keymap_utils.c index 24c221221d1..5a35570296a 100644 --- a/source/blender/windowmanager/intern/wm_keymap_utils.c +++ b/source/blender/windowmanager/intern/wm_keymap_utils.c @@ -31,42 +31,27 @@ wmKeyMapItem *WM_keymap_add_menu(wmKeyMap *keymap, const char *idname, - int type, - int val, - int modifier, - int keymodifier, - int direction) + const KeyMapItem_Params *params) { - wmKeyMapItem *kmi = WM_keymap_add_item( - keymap, "WM_OT_call_menu", type, val, modifier, keymodifier, direction); + wmKeyMapItem *kmi = WM_keymap_add_item(keymap, "WM_OT_call_menu", params); RNA_string_set(kmi->ptr, "name", idname); return kmi; } wmKeyMapItem *WM_keymap_add_menu_pie(wmKeyMap *keymap, const char *idname, - int type, - int val, - int modifier, - int keymodifier, - int direction) + const KeyMapItem_Params *params) { - wmKeyMapItem *kmi = WM_keymap_add_item( - keymap, "WM_OT_call_menu_pie", type, val, modifier, keymodifier, direction); + wmKeyMapItem *kmi = WM_keymap_add_item(keymap, "WM_OT_call_menu_pie", params); RNA_string_set(kmi->ptr, "name", idname); return kmi; } wmKeyMapItem *WM_keymap_add_panel(wmKeyMap *keymap, const char *idname, - int type, - int val, - int modifier, - int keymodifier, - int direction) + const KeyMapItem_Params *params) { - wmKeyMapItem *kmi = WM_keymap_add_item( - keymap, "WM_OT_call_panel", type, val, modifier, keymodifier, direction); + wmKeyMapItem *kmi = WM_keymap_add_item(keymap, "WM_OT_call_panel", params); RNA_string_set(kmi->ptr, "name", idname); /* TODO: we might want to disable this. */ RNA_boolean_set(kmi->ptr, "keep_open", false); @@ -75,14 +60,9 @@ wmKeyMapItem *WM_keymap_add_panel(wmKeyMap *keymap, wmKeyMapItem *WM_keymap_add_tool(wmKeyMap *keymap, const char *idname, - int type, - int val, - int modifier, - int keymodifier, - int direction) + const KeyMapItem_Params *params) { - wmKeyMapItem *kmi = WM_keymap_add_item( - keymap, "WM_OT_tool_set_by_id", type, val, modifier, keymodifier, direction); + wmKeyMapItem *kmi = WM_keymap_add_item(keymap, "WM_OT_tool_set_by_id", params); RNA_string_set(kmi->ptr, "name", idname); return kmi; } |