Keymap: use a generic gizmo keymap by default
While support for gizmo specific keymaps remains, this should only be used if a gizmo-group is doing something that requires one. There was also a hidden limitation that meant only the last registered tweak keymap would ever be used. For now leave this using the generic keymap since all tweak modal keymaps were using the same template anyway.
This commit is contained in:
@@ -682,37 +682,53 @@ static wmKeyMap *gizmogroup_tweak_modal_keymap(wmKeyConfig *keyconf, const char
|
||||
/**
|
||||
* Common default keymap for gizmo groups.
|
||||
*
|
||||
* \param name: Typically #wmGizmoGroupType.name.
|
||||
* \param name: Typically #wmGizmoGroupType.name
|
||||
* \param params: Typically #wmGizmoGroupType.gzmap_params
|
||||
*/
|
||||
wmKeyMap *WM_gizmogroup_keymap_common_with_name(const wmGizmoGroupType *gzgt,
|
||||
wmKeyConfig *config,
|
||||
const char *name)
|
||||
wmKeyMap *WM_gizmogroup_keymap_template_ex(wmKeyConfig *config,
|
||||
const char *name,
|
||||
const struct wmGizmoMapType_Params *params)
|
||||
{
|
||||
/* Use area and region id since we might have multiple gizmos
|
||||
* with the same name in different areas/regions. */
|
||||
wmKeyMap *km = WM_keymap_ensure(
|
||||
config, name, gzgt->gzmap_params.spaceid, gzgt->gzmap_params.regionid);
|
||||
|
||||
WM_keymap_add_item(km, "GIZMOGROUP_OT_gizmo_tweak", LEFTMOUSE, KM_PRESS, KM_ANY, 0);
|
||||
wmKeyMap *km = WM_keymap_ensure(config, name, params->spaceid, params->regionid);
|
||||
if (BLI_listbase_is_empty(&km->items)) {
|
||||
WM_keymap_add_item(km, "GIZMOGROUP_OT_gizmo_tweak", LEFTMOUSE, KM_PRESS, KM_ANY, 0);
|
||||
}
|
||||
gizmogroup_tweak_modal_keymap(config, name);
|
||||
|
||||
return km;
|
||||
}
|
||||
|
||||
wmKeyMap *WM_gizmogroup_keymap_common(const wmGizmoGroupType *gzgt, wmKeyConfig *config)
|
||||
wmKeyMap *WM_gizmogroup_keymap_template(const wmGizmoGroupType *gzgt, wmKeyConfig *config)
|
||||
{
|
||||
return WM_gizmogroup_keymap_common_with_name(gzgt, config, gzgt->name);
|
||||
return WM_gizmogroup_keymap_template_ex(config, gzgt->name, &gzgt->gzmap_params);
|
||||
}
|
||||
|
||||
wmKeyMap *WM_gizmogroup_keymap_generic(const wmGizmoGroupType *UNUSED(gzgt), wmKeyConfig *config)
|
||||
{
|
||||
struct wmGizmoMapType_Params params = {
|
||||
.spaceid = SPACE_EMPTY,
|
||||
.regionid = RGN_TYPE_WINDOW,
|
||||
};
|
||||
return WM_gizmogroup_keymap_template_ex(config, "Generic Gizmos", ¶ms);
|
||||
}
|
||||
|
||||
/**
|
||||
* Variation of #WM_gizmogroup_keymap_common but with keymap items for selection
|
||||
*
|
||||
* \param name: Typically #wmGizmoGroupType.name
|
||||
* \param params: Typically #wmGizmoGroupType.gzmap_params
|
||||
*/
|
||||
wmKeyMap *WM_gizmogroup_keymap_common_select(const wmGizmoGroupType *gzgt, wmKeyConfig *config)
|
||||
wmKeyMap *WM_gizmogroup_keymap_template_select_ex(wmKeyConfig *config,
|
||||
const char *name,
|
||||
const struct wmGizmoMapType_Params *params)
|
||||
{
|
||||
/* Use area and region id since we might have multiple gizmos
|
||||
* with the same name in different areas/regions. */
|
||||
wmKeyMap *km = WM_keymap_ensure(
|
||||
config, gzgt->name, gzgt->gzmap_params.spaceid, gzgt->gzmap_params.regionid);
|
||||
wmKeyMap *km = WM_keymap_ensure(config, name, params->spaceid, params->regionid);
|
||||
const bool do_init = BLI_listbase_is_empty(&km->items);
|
||||
|
||||
/* FIXME(campbell) */
|
||||
#if 0
|
||||
const int select_mouse = (U.flag & USER_LMOUSESELECT) ? LEFTMOUSE : RIGHTMOUSE;
|
||||
@@ -724,23 +740,43 @@ wmKeyMap *WM_gizmogroup_keymap_common_select(const wmGizmoGroupType *gzgt, wmKey
|
||||
const int action_mouse = LEFTMOUSE;
|
||||
#endif
|
||||
|
||||
WM_keymap_add_item(km, "GIZMOGROUP_OT_gizmo_tweak", action_mouse, KM_PRESS, KM_ANY, 0);
|
||||
WM_keymap_add_item(km, "GIZMOGROUP_OT_gizmo_tweak", select_tweak, KM_ANY, 0, 0);
|
||||
gizmogroup_tweak_modal_keymap(config, gzgt->name);
|
||||
if (do_init) {
|
||||
WM_keymap_add_item(km, "GIZMOGROUP_OT_gizmo_tweak", action_mouse, KM_PRESS, KM_ANY, 0);
|
||||
WM_keymap_add_item(km, "GIZMOGROUP_OT_gizmo_tweak", select_tweak, KM_ANY, 0, 0);
|
||||
}
|
||||
gizmogroup_tweak_modal_keymap(config, name);
|
||||
|
||||
wmKeyMapItem *kmi = WM_keymap_add_item(
|
||||
km, "GIZMOGROUP_OT_gizmo_select", select_mouse, KM_PRESS, 0, 0);
|
||||
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, KM_PRESS, KM_SHIFT, 0);
|
||||
RNA_boolean_set(kmi->ptr, "extend", false);
|
||||
RNA_boolean_set(kmi->ptr, "deselect", false);
|
||||
RNA_boolean_set(kmi->ptr, "toggle", true);
|
||||
if (do_init) {
|
||||
wmKeyMapItem *kmi = WM_keymap_add_item(
|
||||
km, "GIZMOGROUP_OT_gizmo_select", select_mouse, KM_PRESS, 0, 0);
|
||||
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, KM_PRESS, KM_SHIFT, 0);
|
||||
RNA_boolean_set(kmi->ptr, "extend", false);
|
||||
RNA_boolean_set(kmi->ptr, "deselect", false);
|
||||
RNA_boolean_set(kmi->ptr, "toggle", true);
|
||||
}
|
||||
|
||||
return km;
|
||||
}
|
||||
|
||||
wmKeyMap *WM_gizmogroup_keymap_template_select(const wmGizmoGroupType *gzgt, wmKeyConfig *config)
|
||||
{
|
||||
return WM_gizmogroup_keymap_template_select_ex(config, gzgt->name, &gzgt->gzmap_params);
|
||||
}
|
||||
|
||||
wmKeyMap *WM_gizmogroup_keymap_generic_select(const wmGizmoGroupType *UNUSED(gzgt),
|
||||
wmKeyConfig *config)
|
||||
{
|
||||
struct wmGizmoMapType_Params params = {
|
||||
.spaceid = SPACE_EMPTY,
|
||||
.regionid = RGN_TYPE_WINDOW,
|
||||
};
|
||||
return WM_gizmogroup_keymap_template_select_ex(config, "Generic Gizmos Select", ¶ms);
|
||||
}
|
||||
|
||||
/** \} */ /* wmGizmoGroup */
|
||||
|
||||
/* -------------------------------------------------------------------- */
|
||||
|
||||
@@ -97,10 +97,10 @@ static void wm_gizmogrouptype_append__end(wmGizmoGroupType *gzgt)
|
||||
/* if not set, use default */
|
||||
if (gzgt->setup_keymap == NULL) {
|
||||
if (gzgt->flag & WM_GIZMOGROUPTYPE_SELECT) {
|
||||
gzgt->setup_keymap = WM_gizmogroup_keymap_common_select;
|
||||
gzgt->setup_keymap = WM_gizmogroup_keymap_generic_select;
|
||||
}
|
||||
else {
|
||||
gzgt->setup_keymap = WM_gizmogroup_keymap_common;
|
||||
gzgt->setup_keymap = WM_gizmogroup_keymap_generic;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user