From f699dbba86156ad3f24c24e3d369f0708b3fd1b5 Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Mon, 4 Apr 2022 13:47:06 +1000 Subject: 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. --- .../editors/interface/interface_context_menu.c | 9 +- .../editors/space_view3d/view3d_navigate_dolly.c | 30 +++- .../editors/space_view3d/view3d_navigate_move.c | 47 +++++- .../editors/space_view3d/view3d_navigate_rotate.c | 27 +++- .../editors/space_view3d/view3d_navigate_zoom.c | 27 +++- source/blender/editors/transform/transform.c | 83 +++++++++-- source/blender/makesrna/intern/rna_wm_api.c | 23 ++- source/blender/windowmanager/WM_keymap.h | 56 +++---- .../windowmanager/gizmo/intern/wm_gizmo_group.c | 162 +++++++++++++++++---- source/blender/windowmanager/intern/wm_keymap.c | 64 ++++---- .../blender/windowmanager/intern/wm_keymap_utils.c | 36 +---- 11 files changed, 401 insertions(+), 163 deletions(-) (limited to 'source') diff --git a/source/blender/editors/interface/interface_context_menu.c b/source/blender/editors/interface/interface_context_menu.c index 0b3d36a34c5..e58298cdaee 100644 --- a/source/blender/editors/interface/interface_context_menu.c +++ b/source/blender/editors/interface/interface_context_menu.c @@ -202,7 +202,14 @@ static uiBlock *menu_add_shortcut(bContext *C, ARegion *region, void *arg) /* XXX this guess_opname can potentially return a different keymap * than being found on adding later... */ wmKeyMap *km = WM_keymap_guess_opname(C, idname); - wmKeyMapItem *kmi = WM_keymap_add_item(km, idname, EVT_AKEY, KM_PRESS, 0, 0, KM_ANY); + wmKeyMapItem *kmi = WM_keymap_add_item(km, + idname, + &(const KeyMapItem_Params){ + .type = EVT_AKEY, + .value = KM_PRESS, + .modifier = 0, + .direction = KM_ANY, + }); const int kmi_id = kmi->id; /* This takes ownership of prop, or prop can be NULL for reset. */ diff --git a/source/blender/editors/space_view3d/view3d_navigate_dolly.c b/source/blender/editors/space_view3d/view3d_navigate_dolly.c index 0237ba8bdeb..d45b0c436ac 100644 --- a/source/blender/editors/space_view3d/view3d_navigate_dolly.c +++ b/source/blender/editors/space_view3d/view3d_navigate_dolly.c @@ -50,12 +50,30 @@ void viewdolly_modal_keymap(wmKeyConfig *keyconf) /* disabled mode switching for now, can re-implement better, later on */ #if 0 - WM_modalkeymap_add_item( - keymap, LEFTMOUSE, KM_RELEASE, KM_ANY, 0, KM_ANY, VIEWROT_MODAL_SWITCH_ROTATE); - WM_modalkeymap_add_item( - keymap, LEFTCTRLKEY, KM_RELEASE, KM_ANY, 0, KM_ANY, VIEWROT_MODAL_SWITCH_ROTATE); - WM_modalkeymap_add_item( - keymap, LEFTSHIFTKEY, KM_PRESS, KM_ANY, 0, KM_ANY, VIEWROT_MODAL_SWITCH_MOVE); + WM_modalkeymap_add_item(keymap, + &(const KeyMapItem_Params){ + .type = LEFTMOUSE, + .value = KM_RELEASE, + .modifier = KM_ANY, + .direction = KM_ANY, + }, + VIEWROT_MODAL_SWITCH_ROTATE); + WM_modalkeymap_add_item(keymap, + &(const KeyMapItem_Params){ + .type = EVT_LEFTCTRLKEY, + .value = KM_RELEASE, + .modifier = KM_ANY, + .direction = KM_ANY, + }, + VIEWROT_MODAL_SWITCH_ROTATE); + WM_modalkeymap_add_item(keymap, + &(const KeyMapItem_Params){ + .type = EVT_LEFTSHIFTKEY, + .value = KM_PRESS, + .modifier = KM_ANY, + .direction = KM_ANY, + }, + VIEWROT_MODAL_SWITCH_MOVE); #endif /* assign map to operators */ diff --git a/source/blender/editors/space_view3d/view3d_navigate_move.c b/source/blender/editors/space_view3d/view3d_navigate_move.c index af8419894b1..e653b349a2f 100644 --- a/source/blender/editors/space_view3d/view3d_navigate_move.c +++ b/source/blender/editors/space_view3d/view3d_navigate_move.c @@ -43,15 +43,50 @@ void viewmove_modal_keymap(wmKeyConfig *keyconf) keymap = WM_modalkeymap_ensure(keyconf, "View3D Move Modal", modal_items); /* items for modal map */ - WM_modalkeymap_add_item(keymap, MIDDLEMOUSE, KM_RELEASE, KM_ANY, 0, KM_ANY, VIEW_MODAL_CONFIRM); - WM_modalkeymap_add_item(keymap, EVT_ESCKEY, KM_PRESS, KM_ANY, 0, KM_ANY, VIEW_MODAL_CONFIRM); + + WM_modalkeymap_add_item(keymap, + &(const KeyMapItem_Params){ + .type = MIDDLEMOUSE, + .value = KM_RELEASE, + .modifier = KM_ANY, + .direction = KM_ANY, + }, + VIEW_MODAL_CONFIRM); + WM_modalkeymap_add_item(keymap, + &(const KeyMapItem_Params){ + .type = EVT_ESCKEY, + .value = KM_PRESS, + .modifier = KM_ANY, + .direction = KM_ANY, + }, + VIEW_MODAL_CONFIRM); /* disabled mode switching for now, can re-implement better, later on */ #if 0 - WM_modalkeymap_add_item(keymap, LEFTMOUSE, KM_PRESS, KM_ANY, 0, VIEWROT_MODAL_SWITCH_ZOOM); - WM_modalkeymap_add_item(keymap, LEFTCTRLKEY, KM_PRESS, KM_ANY, 0, VIEWROT_MODAL_SWITCH_ZOOM); - WM_modalkeymap_add_item( - keymap, LEFTSHIFTKEY, KM_RELEASE, KM_ANY, 0, VIEWROT_MODAL_SWITCH_ROTATE); + WM_modalkeymap_add_item(keymap, + &(const KeyMapItem_Params){ + .type = LEFTMOUSE, + .value = KM_PRESS, + .modifier = KM_ANY, + .direction = KM_ANY, + }, + VIEWROT_MODAL_SWITCH_ZOOM); + WM_modalkeymap_add_item(keymap, + &(const KeyMapItem_Params){ + .type = EVT_LEFTCTRLKEY, + .value = KM_PRESS, + .modifier = KM_ANY, + .direction = KM_ANY, + }, + VIEWROT_MODAL_SWITCH_ZOOM); + WM_modalkeymap_add_item(keymap, + &(const KeyMapItem_Params){ + .type = EVT_LEFTSHIFTKEY, + .value = KM_RELEASE, + .modifier = KM_ANY, + .direction = KM_ANY, + }, + VIEWROT_MODAL_SWITCH_ROTATE); #endif /* assign map to operators */ diff --git a/source/blender/editors/space_view3d/view3d_navigate_rotate.c b/source/blender/editors/space_view3d/view3d_navigate_rotate.c index a53c71bd823..c9ef6422982 100644 --- a/source/blender/editors/space_view3d/view3d_navigate_rotate.c +++ b/source/blender/editors/space_view3d/view3d_navigate_rotate.c @@ -46,9 +46,30 @@ void viewrotate_modal_keymap(wmKeyConfig *keyconf) /* disabled mode switching for now, can re-implement better, later on */ #if 0 - WM_modalkeymap_add_item(keymap, LEFTMOUSE, KM_PRESS, KM_ANY, 0, VIEWROT_MODAL_SWITCH_ZOOM); - WM_modalkeymap_add_item(keymap, LEFTCTRLKEY, KM_PRESS, KM_ANY, 0, VIEWROT_MODAL_SWITCH_ZOOM); - WM_modalkeymap_add_item(keymap, LEFTSHIFTKEY, KM_PRESS, KM_ANY, 0, VIEWROT_MODAL_SWITCH_MOVE); + WM_modalkeymap_add_item(keymap, + &(const KeyMapItem_Params){ + .type = LEFTMOUSE, + .value = KM_PRESS, + .modifier = KM_ANY, + .direction = KM_ANY, + }, + VIEWROT_MODAL_SWITCH_ZOOM); + WM_modalkeymap_add_item(keymap, + &(const KeyMapItem_Params){ + .type = EVT_LEFTCTRLKEY, + .value = KM_PRESS, + .modifier = KM_ANY, + .direction = KM_ANY, + }, + VIEWROT_MODAL_SWITCH_ZOOM); + WM_modalkeymap_add_item(keymap, + &(const KeyMapItem_Params){ + .type = EVT_LEFTSHIFTKEY, + .value = KM_PRESS, + .modifier = KM_ANY, + .direction = KM_ANY, + }, + VIEWROT_MODAL_SWITCH_MOVE); #endif /* assign map to operators */ diff --git a/source/blender/editors/space_view3d/view3d_navigate_zoom.c b/source/blender/editors/space_view3d/view3d_navigate_zoom.c index c744ef85236..a67c0850ad9 100644 --- a/source/blender/editors/space_view3d/view3d_navigate_zoom.c +++ b/source/blender/editors/space_view3d/view3d_navigate_zoom.c @@ -50,9 +50,30 @@ void viewzoom_modal_keymap(wmKeyConfig *keyconf) /* disabled mode switching for now, can re-implement better, later on */ #if 0 - WM_modalkeymap_add_item(keymap, LEFTMOUSE, KM_RELEASE, KM_ANY, 0, VIEWROT_MODAL_SWITCH_ROTATE); - WM_modalkeymap_add_item(keymap, LEFTCTRLKEY, KM_RELEASE, KM_ANY, 0, VIEWROT_MODAL_SWITCH_ROTATE); - WM_modalkeymap_add_item(keymap, LEFTSHIFTKEY, KM_PRESS, KM_ANY, 0, VIEWROT_MODAL_SWITCH_MOVE); + WM_modalkeymap_add_item(keymap, + &(const KeyMapItem_Params){ + .type = LEFTMOUSE, + .value = KM_RELEASE, + .modifier = KM_ANY, + .direction = KM_ANY, + }, + VIEWROT_MODAL_SWITCH_ROTATE); + WM_modalkeymap_add_item(keymap, + &(const KeyMapItem_Params){ + .type = EVT_LEFTCTRLKEY, + .value = KM_RELEASE, + .modifier = KM_ANY, + .direction = KM_ANY, + }, + VIEWROT_MODAL_SWITCH_ROTATE); + WM_modalkeymap_add_item(keymap, + &(const KeyMapItem_Params){ + .type = EVT_LEFTSHIFTKEY, + .value = KM_PRESS, + .modifier = KM_ANY, + .direction = KM_ANY, + }, + VIEWROT_MODAL_SWITCH_MOVE); #endif /* assign map to operators */ diff --git a/source/blender/editors/transform/transform.c b/source/blender/editors/transform/transform.c index 4058d77f42f..7a2a2a8a5e8 100644 --- a/source/blender/editors/transform/transform.c +++ b/source/blender/editors/transform/transform.c @@ -704,17 +704,78 @@ wmKeyMap *transform_modal_keymap(wmKeyConfig *keyconf) /* Default modal map values: * * \code{.c} - * WM_modalkeymap_add_item(keymap, EVT_RETKEY, KM_PRESS, KM_ANY, 0, TFM_MODAL_CONFIRM); - * WM_modalkeymap_add_item(keymap, EVT_ESCKEY, KM_PRESS, KM_ANY, 0, TFM_MODAL_CANCEL); - * WM_modalkeymap_add_item(keymap, EVT_PAGEUPKEY, KM_PRESS, KM_ANY, 0, TFM_MODAL_AUTOIK_LEN_INC); - * WM_modalkeymap_add_item( - * keymap, EVT_PAGEDOWNKEY, KM_PRESS, KM_ANY, 0, TFM_MODAL_AUTOIK_LEN_DEC); - * WM_modalkeymap_add_item(keymap, EVT_GKEY, KM_PRESS, KM_ANY, 0, TFM_MODAL_TRANSLATE); - * WM_modalkeymap_add_item(keymap, EVT_RKEY, KM_PRESS, KM_ANY, 0, TFM_MODAL_ROTATE); - * WM_modalkeymap_add_item(keymap, EVT_SKEY, KM_PRESS, KM_ANY, 0, TFM_MODAL_RESIZE); - * WM_modalkeymap_add_item(keymap, MIDDLEMOUSE, KM_PRESS, KM_ANY, 0, TFM_MODAL_AUTOCONSTRAINT); - * WM_modalkeymap_add_item( - * keymap, MIDDLEMOUSE, KM_PRESS, KM_SHIFT, 0, TFM_MODAL_AUTOCONSTRAINTPLANE); + * WM_modalkeymap_add_item(keymap, + * &(const KeyMapItem_Params){ + * .type = EVT_RETKEY, + * .value = KM_PRESS, + * .modifier = KM_ANY, + * .direction = KM_ANY, + * }, + * TFM_MODAL_CONFIRM); + * WM_modalkeymap_add_item(keymap, + * &(const KeyMapItem_Params){ + * .type = EVT_ESCKEY, + * .value = KM_PRESS, + * .modifier = KM_ANY, + * .direction = KM_ANY, + * }, + * TFM_MODAL_CANCEL); + * WM_modalkeymap_add_item(keymap, + * &(const KeyMapItem_Params){ + * .type = EVT_PAGEUPKEY, + * .value = KM_PRESS, + * .modifier = KM_ANY, + * .direction = KM_ANY, + * }, + * TFM_MODAL_AUTOIK_LEN_INC); + * WM_modalkeymap_add_item(keymap, + * &(const KeyMapItem_Params){ + * .type = EVT_PAGEDOWNKEY, + * .value = KM_PRESS, + * .modifier = KM_ANY, + * .direction = KM_ANY, + * }, + * TFM_MODAL_AUTOIK_LEN_DEC); + * WM_modalkeymap_add_item(keymap, + * &(const KeyMapItem_Params){ + * .type = EVT_GKEY, + * .value = KM_PRESS, + * .modifier = KM_ANY, + * .direction = KM_ANY, + * }, + * TFM_MODAL_TRANSLATE); + * WM_modalkeymap_add_item(keymap, + * &(const KeyMapItem_Params){ + * .type = EVT_RKEY, + * .value = KM_PRESS, + * .modifier = KM_ANY, + * .direction = KM_ANY, + * }, + * TFM_MODAL_ROTATE); + * WM_modalkeymap_add_item(keymap, + * &(const KeyMapItem_Params){ + * .type = EVT_SKEY, + * .value = KM_PRESS, + * .modifier = KM_ANY, + * .direction = KM_ANY, + * }, + * TFM_MODAL_RESIZE); + * WM_modalkeymap_add_item(keymap, + * &(const KeyMapItem_Params){ + * .type = MIDDLEMOUSE, + * .value = KM_PRESS, + * .modifier = KM_ANY, + * .direction = KM_ANY, + * }, + * TFM_MODAL_AUTOCONSTRAINT); + * WM_modalkeymap_add_item(keymap, + * &(const KeyMapItem_Params){ + * .type = MIDDLEMOUSE, + * .value = KM_PRESS, + * .modifier = KM_SHIFT, + * .direction = KM_ANY, + * }, + * TFM_MODAL_AUTOCONSTRAINTPLANE); * \endcode */ diff --git a/source/blender/makesrna/intern/rna_wm_api.c b/source/blender/makesrna/intern/rna_wm_api.c index 0589fa7a96e..5da65510399 100644 --- a/source/blender/makesrna/intern/rna_wm_api.c +++ b/source/blender/makesrna/intern/rna_wm_api.c @@ -276,7 +276,15 @@ static wmKeyMapItem *rna_KeyMap_item_new(wmKeyMap *km, WM_operator_bl_idname(idname_bl, idname); /* create keymap item */ - kmi = WM_keymap_add_item(km, idname_bl, type, value, modifier, keymodifier, direction); + kmi = WM_keymap_add_item(km, + idname_bl, + &(const KeyMapItem_Params){ + .type = type, + .value = value, + .modifier = modifier, + .keymodifier = keymodifier, + .direction = direction, + }); if (!repeat) { kmi->flag |= KMI_REPEAT_IGNORE; @@ -338,16 +346,23 @@ static wmKeyMapItem *rna_KeyMap_item_new_modal(wmKeyMap *km, const int modifier = keymap_item_modifier_flag_from_args(any, shift, ctrl, alt, oskey); int propvalue = 0; + KeyMapItem_Params params = { + .type = type, + .value = value, + .modifier = modifier, + .keymodifier = keymodifier, + .direction = direction, + }; + /* not initialized yet, do delayed lookup */ if (!km->modal_items) { - kmi = WM_modalkeymap_add_item_str( - km, type, value, modifier, keymodifier, direction, propvalue_str); + kmi = WM_modalkeymap_add_item_str(km, ¶ms, propvalue_str); } else { if (RNA_enum_value_from_id(km->modal_items, propvalue_str, &propvalue) == 0) { BKE_report(reports, RPT_WARNING, "Property value not in enumeration"); } - kmi = WM_modalkeymap_add_item(km, type, value, modifier, keymodifier, direction, propvalue); + kmi = WM_modalkeymap_add_item(km, ¶ms, propvalue); } if (!repeat) { 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; } -- cgit v1.2.3