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.
This commit is contained in:
2022-04-04 13:47:06 +10:00
parent 0ef96cd392
commit f699dbba86
11 changed files with 397 additions and 159 deletions

View File

@@ -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 /* XXX this guess_opname can potentially return a different keymap
* than being found on adding later... */ * than being found on adding later... */
wmKeyMap *km = WM_keymap_guess_opname(C, idname); 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; const int kmi_id = kmi->id;
/* This takes ownership of prop, or prop can be NULL for reset. */ /* This takes ownership of prop, or prop can be NULL for reset. */

View File

@@ -50,12 +50,30 @@ void viewdolly_modal_keymap(wmKeyConfig *keyconf)
/* disabled mode switching for now, can re-implement better, later on */ /* disabled mode switching for now, can re-implement better, later on */
#if 0 #if 0
WM_modalkeymap_add_item( WM_modalkeymap_add_item(keymap,
keymap, LEFTMOUSE, KM_RELEASE, KM_ANY, 0, KM_ANY, VIEWROT_MODAL_SWITCH_ROTATE); &(const KeyMapItem_Params){
WM_modalkeymap_add_item( .type = LEFTMOUSE,
keymap, LEFTCTRLKEY, KM_RELEASE, KM_ANY, 0, KM_ANY, VIEWROT_MODAL_SWITCH_ROTATE); .value = KM_RELEASE,
WM_modalkeymap_add_item( .modifier = KM_ANY,
keymap, LEFTSHIFTKEY, KM_PRESS, KM_ANY, 0, KM_ANY, VIEWROT_MODAL_SWITCH_MOVE); .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 #endif
/* assign map to operators */ /* assign map to operators */

View File

@@ -43,15 +43,50 @@ void viewmove_modal_keymap(wmKeyConfig *keyconf)
keymap = WM_modalkeymap_ensure(keyconf, "View3D Move Modal", modal_items); keymap = WM_modalkeymap_ensure(keyconf, "View3D Move Modal", modal_items);
/* items for modal map */ /* 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 */ /* disabled mode switching for now, can re-implement better, later on */
#if 0 #if 0
WM_modalkeymap_add_item(keymap, LEFTMOUSE, KM_PRESS, KM_ANY, 0, VIEWROT_MODAL_SWITCH_ZOOM); WM_modalkeymap_add_item(keymap,
WM_modalkeymap_add_item(keymap, LEFTCTRLKEY, KM_PRESS, KM_ANY, 0, VIEWROT_MODAL_SWITCH_ZOOM); &(const KeyMapItem_Params){
WM_modalkeymap_add_item( .type = LEFTMOUSE,
keymap, LEFTSHIFTKEY, KM_RELEASE, KM_ANY, 0, VIEWROT_MODAL_SWITCH_ROTATE); .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 #endif
/* assign map to operators */ /* assign map to operators */

View File

@@ -46,9 +46,30 @@ void viewrotate_modal_keymap(wmKeyConfig *keyconf)
/* disabled mode switching for now, can re-implement better, later on */ /* disabled mode switching for now, can re-implement better, later on */
#if 0 #if 0
WM_modalkeymap_add_item(keymap, LEFTMOUSE, KM_PRESS, KM_ANY, 0, VIEWROT_MODAL_SWITCH_ZOOM); WM_modalkeymap_add_item(keymap,
WM_modalkeymap_add_item(keymap, LEFTCTRLKEY, KM_PRESS, KM_ANY, 0, VIEWROT_MODAL_SWITCH_ZOOM); &(const KeyMapItem_Params){
WM_modalkeymap_add_item(keymap, LEFTSHIFTKEY, KM_PRESS, KM_ANY, 0, VIEWROT_MODAL_SWITCH_MOVE); .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 #endif
/* assign map to operators */ /* assign map to operators */

View File

@@ -50,9 +50,30 @@ void viewzoom_modal_keymap(wmKeyConfig *keyconf)
/* disabled mode switching for now, can re-implement better, later on */ /* disabled mode switching for now, can re-implement better, later on */
#if 0 #if 0
WM_modalkeymap_add_item(keymap, LEFTMOUSE, KM_RELEASE, KM_ANY, 0, VIEWROT_MODAL_SWITCH_ROTATE); WM_modalkeymap_add_item(keymap,
WM_modalkeymap_add_item(keymap, LEFTCTRLKEY, KM_RELEASE, KM_ANY, 0, VIEWROT_MODAL_SWITCH_ROTATE); &(const KeyMapItem_Params){
WM_modalkeymap_add_item(keymap, LEFTSHIFTKEY, KM_PRESS, KM_ANY, 0, VIEWROT_MODAL_SWITCH_MOVE); .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 #endif
/* assign map to operators */ /* assign map to operators */

View File

@@ -704,17 +704,78 @@ wmKeyMap *transform_modal_keymap(wmKeyConfig *keyconf)
/* Default modal map values: /* Default modal map values:
* *
* \code{.c} * \code{.c}
* WM_modalkeymap_add_item(keymap, EVT_RETKEY, KM_PRESS, KM_ANY, 0, TFM_MODAL_CONFIRM); * WM_modalkeymap_add_item(keymap,
* WM_modalkeymap_add_item(keymap, EVT_ESCKEY, KM_PRESS, KM_ANY, 0, TFM_MODAL_CANCEL); * &(const KeyMapItem_Params){
* WM_modalkeymap_add_item(keymap, EVT_PAGEUPKEY, KM_PRESS, KM_ANY, 0, TFM_MODAL_AUTOIK_LEN_INC); * .type = EVT_RETKEY,
* WM_modalkeymap_add_item( * .value = KM_PRESS,
* keymap, EVT_PAGEDOWNKEY, KM_PRESS, KM_ANY, 0, TFM_MODAL_AUTOIK_LEN_DEC); * .modifier = KM_ANY,
* WM_modalkeymap_add_item(keymap, EVT_GKEY, KM_PRESS, KM_ANY, 0, TFM_MODAL_TRANSLATE); * .direction = KM_ANY,
* 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); * TFM_MODAL_CONFIRM);
* WM_modalkeymap_add_item(keymap, MIDDLEMOUSE, KM_PRESS, KM_ANY, 0, TFM_MODAL_AUTOCONSTRAINT); * WM_modalkeymap_add_item(keymap,
* WM_modalkeymap_add_item( * &(const KeyMapItem_Params){
* keymap, MIDDLEMOUSE, KM_PRESS, KM_SHIFT, 0, TFM_MODAL_AUTOCONSTRAINTPLANE); * .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 * \endcode
*/ */

View File

@@ -276,7 +276,15 @@ static wmKeyMapItem *rna_KeyMap_item_new(wmKeyMap *km,
WM_operator_bl_idname(idname_bl, idname); WM_operator_bl_idname(idname_bl, idname);
/* create keymap item */ /* 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) { if (!repeat) {
kmi->flag |= KMI_REPEAT_IGNORE; 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); const int modifier = keymap_item_modifier_flag_from_args(any, shift, ctrl, alt, oskey);
int propvalue = 0; int propvalue = 0;
KeyMapItem_Params params = {
.type = type,
.value = value,
.modifier = modifier,
.keymodifier = keymodifier,
.direction = direction,
};
/* not initialized yet, do delayed lookup */ /* not initialized yet, do delayed lookup */
if (!km->modal_items) { if (!km->modal_items) {
kmi = WM_modalkeymap_add_item_str( kmi = WM_modalkeymap_add_item_str(km, &params, propvalue_str);
km, type, value, modifier, keymodifier, direction, propvalue_str);
} }
else { else {
if (RNA_enum_value_from_id(km->modal_items, propvalue_str, &propvalue) == 0) { if (RNA_enum_value_from_id(km->modal_items, propvalue_str, &propvalue) == 0) {
BKE_report(reports, RPT_WARNING, "Property value not in enumeration"); 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, &params, propvalue);
} }
if (!repeat) { if (!repeat) {

View File

@@ -37,6 +37,20 @@ void WM_keyconfig_update_operatortype(void);
/* Keymap */ /* 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); 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, wmKeyMapItem *WM_keymap_add_item(struct wmKeyMap *keymap,
const char *idname, const char *idname,
int type, const KeyMapItem_Params *params);
int val,
int modifier,
int keymodifier,
int direction);
wmKeyMapItem *WM_keymap_add_item_copy(struct wmKeyMap *keymap, wmKeyMapItem *kmi_src); wmKeyMapItem *WM_keymap_add_item_copy(struct wmKeyMap *keymap, wmKeyMapItem *kmi_src);
bool WM_keymap_remove_item(struct wmKeyMap *keymap, struct wmKeyMapItem *kmi); 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, wmKeyMapItem *WM_keymap_add_menu(struct wmKeyMap *keymap,
const char *idname, const char *idname,
int type, const KeyMapItem_Params *params);
int val,
int modifier,
int keymodifier,
int direction);
/** /**
* Pie-menu wrapper for #WM_keymap_add_item. * Pie-menu wrapper for #WM_keymap_add_item.
*/ */
wmKeyMapItem *WM_keymap_add_menu_pie(struct wmKeyMap *keymap, wmKeyMapItem *WM_keymap_add_menu_pie(struct wmKeyMap *keymap,
const char *idname, const char *idname,
int type, const KeyMapItem_Params *params);
int val,
int modifier,
int keymodifier,
int direction);
/** /**
* Panel (popover) wrapper for #WM_keymap_add_item. * Panel (popover) wrapper for #WM_keymap_add_item.
*/ */
wmKeyMapItem *WM_keymap_add_panel(struct wmKeyMap *keymap, wmKeyMapItem *WM_keymap_add_panel(struct wmKeyMap *keymap,
const char *idname, const char *idname,
int type, const KeyMapItem_Params *params);
int val,
int modifier,
int keymodifier,
int direction);
/** /**
* Tool wrapper for #WM_keymap_add_item. * Tool wrapper for #WM_keymap_add_item.
*/ */
wmKeyMapItem *WM_keymap_add_tool(struct wmKeyMap *keymap, wmKeyMapItem *WM_keymap_add_tool(struct wmKeyMap *keymap,
const char *idname, const char *idname,
int type, const KeyMapItem_Params *params);
int val,
int modifier,
int keymodifier,
int direction);
wmKeyMap *WM_keymap_guess_from_context(const struct bContext *C); 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); const struct EnumPropertyItem *items);
wmKeyMap *WM_modalkeymap_find(struct wmKeyConfig *keyconf, const char *idname); wmKeyMap *WM_modalkeymap_find(struct wmKeyConfig *keyconf, const char *idname);
wmKeyMapItem *WM_modalkeymap_add_item(struct wmKeyMap *km, wmKeyMapItem *WM_modalkeymap_add_item(struct wmKeyMap *km,
int type, const KeyMapItem_Params *params,
int val,
int modifier,
int keymodifier,
int direction,
int value); int value);
wmKeyMapItem *WM_modalkeymap_add_item_str(struct wmKeyMap *km, wmKeyMapItem *WM_modalkeymap_add_item_str(struct wmKeyMap *km,
int type, const KeyMapItem_Params *params,
int val,
int modifier,
int keymodifier,
int direction,
const char *value); const char *value);
const wmKeyMapItem *WM_modalkeymap_find_propvalue(const wmKeyMap *km, int propvalue); const wmKeyMapItem *WM_modalkeymap_find_propvalue(const wmKeyMap *km, int propvalue);
void WM_modalkeymap_assign(struct wmKeyMap *km, const char *opname); void WM_modalkeymap_assign(struct wmKeyMap *km, const char *opname);

View File

@@ -640,29 +640,105 @@ wmKeyMap *wm_gizmogroup_tweak_modal_keymap(wmKeyConfig *keyconf)
keymap = WM_modalkeymap_ensure(keyconf, name, modal_items); keymap = WM_modalkeymap_ensure(keyconf, name, modal_items);
/* items for modal map */ /* 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,
WM_modalkeymap_add_item(keymap, RIGHTMOUSE, KM_PRESS, KM_ANY, 0, KM_ANY, TWEAK_MODAL_CANCEL); &(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, EVT_RETKEY, KM_PRESS, KM_ANY, 0, KM_ANY, TWEAK_MODAL_CONFIRM); WM_modalkeymap_add_item(keymap,
WM_modalkeymap_add_item(keymap, EVT_PADENTER, KM_PRESS, KM_ANY, 0, KM_ANY, TWEAK_MODAL_CONFIRM); &(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( WM_modalkeymap_add_item(keymap,
keymap, EVT_RIGHTSHIFTKEY, KM_PRESS, KM_ANY, 0, KM_ANY, TWEAK_MODAL_PRECISION_ON); &(const KeyMapItem_Params){
WM_modalkeymap_add_item( .type = EVT_RIGHTSHIFTKEY,
keymap, EVT_RIGHTSHIFTKEY, KM_RELEASE, KM_ANY, 0, KM_ANY, TWEAK_MODAL_PRECISION_OFF); .value = KM_PRESS,
WM_modalkeymap_add_item( .modifier = KM_ANY,
keymap, EVT_LEFTSHIFTKEY, KM_PRESS, KM_ANY, 0, KM_ANY, TWEAK_MODAL_PRECISION_ON); .direction = KM_ANY,
WM_modalkeymap_add_item( },
keymap, EVT_LEFTSHIFTKEY, KM_RELEASE, KM_ANY, 0, KM_ANY, TWEAK_MODAL_PRECISION_OFF); 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( WM_modalkeymap_add_item(keymap,
keymap, EVT_RIGHTCTRLKEY, KM_PRESS, KM_ANY, 0, KM_ANY, TWEAK_MODAL_SNAP_ON); &(const KeyMapItem_Params){
WM_modalkeymap_add_item( .type = EVT_RIGHTCTRLKEY,
keymap, EVT_RIGHTCTRLKEY, KM_RELEASE, KM_ANY, 0, KM_ANY, TWEAK_MODAL_SNAP_OFF); .value = KM_PRESS,
WM_modalkeymap_add_item( .modifier = KM_ANY,
keymap, EVT_LEFTCTRLKEY, KM_PRESS, KM_ANY, 0, KM_ANY, TWEAK_MODAL_SNAP_ON); .direction = KM_ANY,
WM_modalkeymap_add_item( },
keymap, EVT_LEFTCTRLKEY, KM_RELEASE, KM_ANY, 0, KM_ANY, TWEAK_MODAL_SNAP_OFF); 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"); WM_modalkeymap_assign(keymap, "GIZMOGROUP_OT_gizmo_tweak");
@@ -720,20 +796,44 @@ static wmKeyMap *WM_gizmogroup_keymap_template_select_ex(
#endif #endif
if (do_init) { if (do_init) {
WM_keymap_add_item( WM_keymap_add_item(km,
km, "GIZMOGROUP_OT_gizmo_tweak", action_mouse, action_mouse_val, KM_ANY, 0, KM_ANY); "GIZMOGROUP_OT_gizmo_tweak",
WM_keymap_add_item( &(const KeyMapItem_Params){
km, "GIZMOGROUP_OT_gizmo_tweak", select_tweak, select_tweak_val, 0, 0, KM_ANY); .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) { if (do_init) {
wmKeyMapItem *kmi = WM_keymap_add_item( wmKeyMapItem *kmi = WM_keymap_add_item(km,
km, "GIZMOGROUP_OT_gizmo_select", select_mouse, select_mouse_val, 0, 0, KM_ANY); "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, "extend", false);
RNA_boolean_set(kmi->ptr, "deselect", false); RNA_boolean_set(kmi->ptr, "deselect", false);
RNA_boolean_set(kmi->ptr, "toggle", false); RNA_boolean_set(kmi->ptr, "toggle", false);
kmi = WM_keymap_add_item( kmi = WM_keymap_add_item(km,
km, "GIZMOGROUP_OT_gizmo_select", select_mouse, select_mouse_val, KM_SHIFT, 0, KM_ANY); "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, "extend", false);
RNA_boolean_set(kmi->ptr, "deselect", false); RNA_boolean_set(kmi->ptr, "deselect", false);
RNA_boolean_set(kmi->ptr, "toggle", true); RNA_boolean_set(kmi->ptr, "toggle", true);

View File

@@ -456,32 +456,35 @@ bool WM_keymap_poll(bContext *C, wmKeyMap *keymap)
return true; return true;
} }
static void keymap_event_set( static void keymap_event_set(wmKeyMapItem *kmi, const KeyMapItem_Params *params)
wmKeyMapItem *kmi, short type, short val, int modifier, short keymodifier, int direction)
{ {
kmi->type = type; kmi->type = params->type;
kmi->val = val; kmi->val = params->value;
kmi->keymodifier = keymodifier; kmi->keymodifier = params->keymodifier;
kmi->direction = direction; kmi->direction = params->direction;
if (modifier == KM_ANY) { if (params->modifier == KM_ANY) {
kmi->shift = kmi->ctrl = kmi->alt = kmi->oskey = KM_ANY; kmi->shift = kmi->ctrl = kmi->alt = kmi->oskey = KM_ANY;
} }
else { else {
/* Only one of the flags should be set. */ /* Only one of the flags should be set. */
BLI_assert(((modifier & (KM_SHIFT | KM_SHIFT_ANY)) != (KM_SHIFT | KM_SHIFT_ANY)) && BLI_assert(((params->modifier & (KM_SHIFT | KM_SHIFT_ANY)) != (KM_SHIFT | KM_SHIFT_ANY)) &&
((modifier & (KM_CTRL | KM_CTRL_ANY)) != (KM_CTRL | KM_CTRL_ANY)) && ((params->modifier & (KM_CTRL | KM_CTRL_ANY)) != (KM_CTRL | KM_CTRL_ANY)) &&
((modifier & (KM_ALT | KM_ALT_ANY)) != (KM_ALT | KM_ALT_ANY)) && ((params->modifier & (KM_ALT | KM_ALT_ANY)) != (KM_ALT | KM_ALT_ANY)) &&
((modifier & (KM_OSKEY | KM_OSKEY_ANY)) != (KM_OSKEY | KM_OSKEY_ANY))); ((params->modifier & (KM_OSKEY | KM_OSKEY_ANY)) != (KM_OSKEY | KM_OSKEY_ANY)));
kmi->shift = ((modifier & KM_SHIFT) ? KM_MOD_HELD : kmi->shift = ((params->modifier & KM_SHIFT) ?
((modifier & KM_SHIFT_ANY) ? KM_ANY : KM_NOTHING)); KM_MOD_HELD :
kmi->ctrl = ((modifier & KM_CTRL) ? KM_MOD_HELD : ((params->modifier & KM_SHIFT_ANY) ? KM_ANY : KM_NOTHING));
((modifier & KM_CTRL_ANY) ? KM_ANY : KM_NOTHING)); kmi->ctrl = ((params->modifier & KM_CTRL) ?
kmi->alt = ((modifier & KM_ALT) ? KM_MOD_HELD : KM_MOD_HELD :
((modifier & KM_ALT_ANY) ? KM_ANY : KM_NOTHING)); ((params->modifier & KM_CTRL_ANY) ? KM_ANY : KM_NOTHING));
kmi->oskey = ((modifier & KM_OSKEY) ? KM_MOD_HELD : kmi->alt = ((params->modifier & KM_ALT) ?
((modifier & KM_OSKEY_ANY) ? KM_ANY : KM_NOTHING)); 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, wmKeyMapItem *WM_keymap_add_item(wmKeyMap *keymap,
const char *idname, const char *idname,
int type, const KeyMapItem_Params *params)
int val,
int modifier,
int keymodifier,
int direction)
{ {
wmKeyMapItem *kmi = MEM_callocN(sizeof(wmKeyMapItem), "keymap entry"); wmKeyMapItem *kmi = MEM_callocN(sizeof(wmKeyMapItem), "keymap entry");
BLI_addtail(&keymap->items, kmi); BLI_addtail(&keymap->items, kmi);
BLI_strncpy(kmi->idname, idname, OP_MAX_TYPENAME); 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); wm_keymap_item_properties_set(kmi);
keymap_item_set_id(keymap, kmi); keymap_item_set_id(keymap, kmi);
@@ -922,15 +921,14 @@ wmKeyMap *WM_modalkeymap_find(wmKeyConfig *keyconf, const char *idname)
return NULL; return NULL;
} }
wmKeyMapItem *WM_modalkeymap_add_item( wmKeyMapItem *WM_modalkeymap_add_item(wmKeyMap *km, const KeyMapItem_Params *params, int value)
wmKeyMap *km, int type, int val, int modifier, int keymodifier, int direction, int value)
{ {
wmKeyMapItem *kmi = MEM_callocN(sizeof(wmKeyMapItem), "keymap entry"); wmKeyMapItem *kmi = MEM_callocN(sizeof(wmKeyMapItem), "keymap entry");
BLI_addtail(&km->items, kmi); BLI_addtail(&km->items, kmi);
kmi->propvalue = value; kmi->propvalue = value;
keymap_event_set(kmi, type, val, modifier, keymodifier, direction); keymap_event_set(kmi, params);
keymap_item_set_id(km, kmi); keymap_item_set_id(km, kmi);
@@ -940,11 +938,7 @@ wmKeyMapItem *WM_modalkeymap_add_item(
} }
wmKeyMapItem *WM_modalkeymap_add_item_str(wmKeyMap *km, wmKeyMapItem *WM_modalkeymap_add_item_str(wmKeyMap *km,
int type, const KeyMapItem_Params *params,
int val,
int modifier,
int keymodifier,
int direction,
const char *value) const char *value)
{ {
wmKeyMapItem *kmi = MEM_callocN(sizeof(wmKeyMapItem), "keymap entry"); 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_addtail(&km->items, kmi);
BLI_strncpy(kmi->propvalue_str, value, sizeof(kmi->propvalue_str)); 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); keymap_item_set_id(km, kmi);

View File

@@ -31,42 +31,27 @@
wmKeyMapItem *WM_keymap_add_menu(wmKeyMap *keymap, wmKeyMapItem *WM_keymap_add_menu(wmKeyMap *keymap,
const char *idname, const char *idname,
int type, const KeyMapItem_Params *params)
int val,
int modifier,
int keymodifier,
int direction)
{ {
wmKeyMapItem *kmi = WM_keymap_add_item( wmKeyMapItem *kmi = WM_keymap_add_item(keymap, "WM_OT_call_menu", params);
keymap, "WM_OT_call_menu", type, val, modifier, keymodifier, direction);
RNA_string_set(kmi->ptr, "name", idname); RNA_string_set(kmi->ptr, "name", idname);
return kmi; return kmi;
} }
wmKeyMapItem *WM_keymap_add_menu_pie(wmKeyMap *keymap, wmKeyMapItem *WM_keymap_add_menu_pie(wmKeyMap *keymap,
const char *idname, const char *idname,
int type, const KeyMapItem_Params *params)
int val,
int modifier,
int keymodifier,
int direction)
{ {
wmKeyMapItem *kmi = WM_keymap_add_item( wmKeyMapItem *kmi = WM_keymap_add_item(keymap, "WM_OT_call_menu_pie", params);
keymap, "WM_OT_call_menu_pie", type, val, modifier, keymodifier, direction);
RNA_string_set(kmi->ptr, "name", idname); RNA_string_set(kmi->ptr, "name", idname);
return kmi; return kmi;
} }
wmKeyMapItem *WM_keymap_add_panel(wmKeyMap *keymap, wmKeyMapItem *WM_keymap_add_panel(wmKeyMap *keymap,
const char *idname, const char *idname,
int type, const KeyMapItem_Params *params)
int val,
int modifier,
int keymodifier,
int direction)
{ {
wmKeyMapItem *kmi = WM_keymap_add_item( wmKeyMapItem *kmi = WM_keymap_add_item(keymap, "WM_OT_call_panel", params);
keymap, "WM_OT_call_panel", type, val, modifier, keymodifier, direction);
RNA_string_set(kmi->ptr, "name", idname); RNA_string_set(kmi->ptr, "name", idname);
/* TODO: we might want to disable this. */ /* TODO: we might want to disable this. */
RNA_boolean_set(kmi->ptr, "keep_open", false); 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, wmKeyMapItem *WM_keymap_add_tool(wmKeyMap *keymap,
const char *idname, const char *idname,
int type, const KeyMapItem_Params *params)
int val,
int modifier,
int keymodifier,
int direction)
{ {
wmKeyMapItem *kmi = WM_keymap_add_item( wmKeyMapItem *kmi = WM_keymap_add_item(keymap, "WM_OT_tool_set_by_id", params);
keymap, "WM_OT_tool_set_by_id", type, val, modifier, keymodifier, direction);
RNA_string_set(kmi->ptr, "name", idname); RNA_string_set(kmi->ptr, "name", idname);
return kmi; return kmi;
} }