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:
Campbell Barton 2019-05-24 17:42:00 +10:00
parent 7dd888c0cf
commit 5adfc51a0f
6 changed files with 137 additions and 380 deletions

View File

@ -4348,295 +4348,6 @@ def km_transform_modal_map(_params):
return keymap
def km_3d_view_transform_gizmo(_params):
keymap = (
"3D View: Transform Gizmo",
{"space_type": 'VIEW_3D', "region_type": 'WINDOW'},
{"items": _template_items_gizmo_tweak_value()},
)
return keymap
def km_backdrop_transform_widget_tweak_modal_map(_params):
keymap = (
"Backdrop Transform Widget Tweak Modal Map",
{"space_type": 'EMPTY', "region_type": 'WINDOW', "modal": True},
{"items": _template_items_gizmo_tweak_modal()},
)
return keymap
def km_backdrop_crop_widget(_params):
keymap = (
"Backdrop Crop Widget",
{"space_type": 'NODE_EDITOR', "region_type": 'WINDOW'},
{"items": _template_items_gizmo_tweak_value()},
)
return keymap
def km_backdrop_crop_widget_tweak_modal_map(_params):
keymap = (
"Backdrop Crop Widget Tweak Modal Map",
{"space_type": 'EMPTY', "region_type": 'WINDOW', "modal": True},
{"items": _template_items_gizmo_tweak_modal()},
)
return keymap
def km_sun_beams_widget(_params):
keymap = (
"Sun Beams Widget",
{"space_type": 'NODE_EDITOR', "region_type": 'WINDOW'},
{"items": _template_items_gizmo_tweak_value()},
)
return keymap
def km_sun_beams_widget_tweak_modal_map(_params):
keymap = (
"Sun Beams Widget Tweak Modal Map",
{"space_type": 'EMPTY', "region_type": 'WINDOW', "modal": True},
{"items": _template_items_gizmo_tweak_modal()},
)
return keymap
def km_corner_pin_widget(_params):
items = []
keymap = (
"Corner Pin Widget",
{"space_type": 'NODE_EDITOR', "region_type": 'WINDOW'},
{"items": items},
)
items.extend([
("gizmogroup.gizmo_tweak", {"type": 'LEFTMOUSE', "value": 'PRESS', "any": True}, None),
])
return keymap
def km_corner_pin_widget_tweak_modal_map(_params):
keymap = (
"Corner Pin Widget Tweak Modal Map",
{"space_type": 'EMPTY', "region_type": 'WINDOW', "modal": True},
{"items": _template_items_gizmo_tweak_modal()},
)
return keymap
def km_uv_transform_gizmo(_params):
keymap = (
"UV Transform Gizmo",
{"space_type": 'IMAGE_EDITOR', "region_type": 'WINDOW'},
{"items": _template_items_gizmo_tweak_value()},
)
return keymap
def km_uv_transform_gizmo_tweak_modal_map(_params):
keymap = (
"UV Transform Gizmo Tweak Modal Map",
{"space_type": 'EMPTY', "region_type": 'WINDOW', "modal": True},
{"items": _template_items_gizmo_tweak_modal()},
)
return keymap
def km_spot_light_widgets(_params):
items = []
keymap = (
"Spot Light Widgets",
{"space_type": 'VIEW_3D', "region_type": 'WINDOW'},
{"items": items},
)
items.extend([
("gizmogroup.gizmo_tweak", {"type": 'LEFTMOUSE', "value": 'PRESS', "any": True}, None),
])
return keymap
def km_spot_light_widgets_tweak_modal_map(_params):
keymap = (
"Spot Light Widgets Tweak Modal Map",
{"space_type": 'EMPTY', "region_type": 'WINDOW', "modal": True},
{"items": _template_items_gizmo_tweak_modal()},
)
return keymap
def km_area_light_widgets(_params):
items = []
keymap = (
"Area Light Widgets",
{"space_type": 'VIEW_3D', "region_type": 'WINDOW'},
{"items": items},
)
items.extend([
("gizmogroup.gizmo_tweak", {"type": 'LEFTMOUSE', "value": 'PRESS', "any": True}, None),
("gizmogroup.gizmo_tweak", {"type": 'LEFTMOUSE', "value": 'PRESS', "any": True}, None),
])
return keymap
def km_area_light_widgets_tweak_modal_map(_params):
keymap = (
"Area Light Widgets Tweak Modal Map",
{"space_type": 'EMPTY', "region_type": 'WINDOW', "modal": True},
{"items": _template_items_gizmo_tweak_modal()},
)
return keymap
def km_target_light_widgets(_params):
items = []
keymap = (
"Target Light Widgets",
{"space_type": 'VIEW_3D', "region_type": 'WINDOW'},
{"items": items},
)
items.extend([
("gizmogroup.gizmo_tweak", {"type": 'LEFTMOUSE', "value": 'PRESS', "any": True}, None),
])
return keymap
def km_target_light_widgets_tweak_modal_map(_params):
keymap = (
"Target Light Widgets Tweak Modal Map",
{"space_type": 'EMPTY', "region_type": 'WINDOW', "modal": True},
{"items": _template_items_gizmo_tweak_modal()},
)
return keymap
def km_force_field_widgets(_params):
items = []
keymap = (
"Force Field Widgets",
{"space_type": 'VIEW_3D', "region_type": 'WINDOW'},
{"items": items},
)
items.extend([
("gizmogroup.gizmo_tweak", {"type": 'LEFTMOUSE', "value": 'PRESS', "any": True}, None),
])
return keymap
def km_force_field_widgets_tweak_modal_map(_params):
keymap = (
"Force Field Widgets Tweak Modal Map",
{"space_type": 'EMPTY', "region_type": 'WINDOW', "modal": True},
{"items": _template_items_gizmo_tweak_modal()},
)
return keymap
def km_camera_widgets(_params):
items = []
keymap = (
"Camera Widgets",
{"space_type": 'VIEW_3D', "region_type": 'WINDOW'},
{"items": items},
)
items.extend([
("gizmogroup.gizmo_tweak", {"type": 'LEFTMOUSE', "value": 'PRESS', "any": True}, None),
])
return keymap
def km_camera_widgets_tweak_modal_map(_params):
keymap = (
"Camera Widgets Tweak Modal Map",
{"space_type": 'EMPTY', "region_type": 'WINDOW', "modal": True},
{"items": _template_items_gizmo_tweak_modal()},
)
return keymap
def km_camera_view_widgets(_params):
items = []
keymap = (
"Camera View Widgets",
{"space_type": 'VIEW_3D', "region_type": 'WINDOW'},
{"items": items},
)
items.extend([
("gizmogroup.gizmo_tweak", {"type": 'LEFTMOUSE', "value": 'PRESS', "any": True}, None),
])
return keymap
def km_camera_view_widgets_tweak_modal_map(_params):
keymap = (
"Camera View Widgets Tweak Modal Map",
{"space_type": 'EMPTY', "region_type": 'WINDOW', "modal": True},
{"items": _template_items_gizmo_tweak_modal()},
)
return keymap
def km_armature_spline_widgets(_params):
items = []
keymap = (
"Armature Spline Widgets",
{"space_type": 'VIEW_3D', "region_type": 'WINDOW'},
{"items": items},
)
items.extend([
("gizmogroup.gizmo_tweak", {"type": 'LEFTMOUSE', "value": 'PRESS', "any": True}, None),
])
return keymap
def km_armature_spline_widgets_tweak_modal_map(_params):
keymap = (
"Armature Spline Widgets Tweak Modal Map",
{"space_type": 'EMPTY', "region_type": 'WINDOW', "modal": True},
{"items": _template_items_gizmo_tweak_modal()},
)
return keymap
def km_view3d_navigate(_params):
items = []
keymap = (
"View3D Navigate",
{"space_type": 'VIEW_3D', "region_type": 'WINDOW'},
{"items": items},
)
items.extend([
("gizmogroup.gizmo_tweak", {"type": 'LEFTMOUSE', "value": 'PRESS', "any": True}, None),
])
return keymap
def km_view3d_navigate_tweak_modal_map(_params):
keymap = (
"View3D Navigate Tweak Modal Map",
{"space_type": 'EMPTY', "region_type": 'WINDOW', "modal": True},
{"items": _template_items_gizmo_tweak_modal()},
)
return keymap
def km_view3d_gesture_circle(_params):
items = []
keymap = (
@ -5024,29 +4735,43 @@ def km_paint_stroke_modal(_params):
return keymap
def km_gizmos(_params):
items = []
# Fallback for gizmos that don't have custom a custom key-map.
def km_generic_gizmos(_params):
keymap = (
"Gizmos",
"Generic Gizmos",
{"space_type": 'EMPTY', "region_type": 'WINDOW'},
{"items": items},
{"items": _template_items_gizmo_tweak_value()},
)
return keymap
def km_backdrop_transform_widget(_params):
items = []
def km_generic_gizmos_tweak_modal_map(_params):
keymap = (
"Backdrop Transform Widget",
{"space_type": 'NODE_EDITOR', "region_type": 'WINDOW'},
{"items": items},
"Generic Gizmos Tweak Modal Map",
{"space_type": 'EMPTY', "region_type": 'WINDOW', "modal": True},
{"items": _template_items_gizmo_tweak_modal()},
)
return keymap
def km_generic_gizmos_select(_params):
keymap = (
"Generic Gizmos Select",
{"space_type": 'EMPTY', "region_type": 'WINDOW'},
# TODO, currently in C code.
{"items": _template_items_gizmo_tweak_value()},
)
items.extend([
("gizmogroup.gizmo_tweak", {"type": 'LEFTMOUSE', "value": 'PRESS', "any": True}, None),
])
return keymap
def km_generic_gizmos_select_tweak_modal_map(_params):
keymap = (
"Generic Gizmos Select Tweak Modal Map",
{"space_type": 'EMPTY', "region_type": 'WINDOW', "modal": True},
{"items": _template_items_gizmo_tweak_modal()},
)
return keymap
@ -6117,8 +5842,6 @@ def generate_keymaps(params=None):
km_eyedropper_modal_map(params),
km_eyedropper_colorramp_pointsampling_map(params),
km_transform_modal_map(params),
km_view3d_navigate(params),
km_view3d_navigate_tweak_modal_map(params),
km_view3d_gesture_circle(params),
km_gesture_border(params),
km_gesture_zoom_border(params),
@ -6136,32 +5859,10 @@ def generate_keymaps(params=None):
km_paint_stroke_modal(params),
# Gizmos.
km_gizmos(params),
km_3d_view_transform_gizmo(params),
km_backdrop_transform_widget_tweak_modal_map(params),
km_backdrop_crop_widget(params),
km_backdrop_crop_widget_tweak_modal_map(params),
km_sun_beams_widget(params),
km_sun_beams_widget_tweak_modal_map(params),
km_corner_pin_widget(params),
km_corner_pin_widget_tweak_modal_map(params),
km_uv_transform_gizmo(params),
km_uv_transform_gizmo_tweak_modal_map(params),
km_spot_light_widgets(params),
km_spot_light_widgets_tweak_modal_map(params),
km_area_light_widgets(params),
km_area_light_widgets_tweak_modal_map(params),
km_target_light_widgets(params),
km_target_light_widgets_tweak_modal_map(params),
km_force_field_widgets(params),
km_force_field_widgets_tweak_modal_map(params),
km_camera_widgets(params),
km_camera_widgets_tweak_modal_map(params),
km_camera_view_widgets(params),
km_camera_view_widgets_tweak_modal_map(params),
km_armature_spline_widgets(params),
km_armature_spline_widgets_tweak_modal_map(params),
km_backdrop_transform_widget(params),
km_generic_gizmos(params),
km_generic_gizmos_tweak_modal_map(params),
km_generic_gizmos_select(params),
km_generic_gizmos_select_tweak_modal_map(params),
# Pop-Up Keymaps.
km_popup_toolbar(params),

View File

@ -3534,27 +3534,46 @@ def km_transform_modal_map(_params):
# ------------------------------------------------------------------------------
# Gizmo System Keymaps
def km_gizmos(_params):
items = []
# Fallback for gizmos that don't have custom a custom key-map.
def km_generic_gizmos(_params):
keymap = (
"Gizmos",
"Generic Gizmos",
{"space_type": 'EMPTY', "region_type": 'WINDOW'},
{"items": items},
{"items": _template_items_gizmo_tweak_value()},
)
return keymap
def km_3d_view_transform_gizmo(_params):
def km_generic_gizmos_tweak_modal_map(_params):
keymap = (
"3D View: Transform Gizmo",
{"space_type": 'VIEW_3D', "region_type": 'WINDOW'},
"Generic Gizmos Tweak Modal Map",
{"space_type": 'EMPTY', "region_type": 'WINDOW', "modal": True},
{"items": _template_items_gizmo_tweak_modal()},
)
return keymap
def km_generic_gizmos_select(_params):
keymap = (
"Generic Gizmos Select",
{"space_type": 'EMPTY', "region_type": 'WINDOW'},
# TODO, currently in C code.
{"items": _template_items_gizmo_tweak_value()},
)
return keymap
def km_generic_gizmos_select_tweak_modal_map(_params):
keymap = (
"Generic Gizmos Select Tweak Modal Map",
{"space_type": 'EMPTY', "region_type": 'WINDOW', "modal": True},
{"items": _template_items_gizmo_tweak_modal()},
)
return keymap
# ------------------------------------------------------------------------------
# Tool System Keymaps
@ -3743,8 +3762,10 @@ def generate_keymaps(params=None):
km_transform_modal_map(params),
# Gizmos.
km_gizmos(params),
km_3d_view_transform_gizmo(params),
km_generic_gizmos(params),
km_generic_gizmos_tweak_modal_map(params),
km_generic_gizmos_select(params),
km_generic_gizmos_select_tweak_modal_map(params),
# Tool System.
km_3d_view_tool_move(params),

View File

@ -1976,12 +1976,6 @@ static bool WIDGETGROUP_gizmo_poll_tool(const struct bContext *C, struct wmGizmo
return true;
}
static wmKeyMap *WIDGETGROUP_gizmo_setup_keymap(const struct wmGizmoGroupType *gzgt,
struct wmKeyConfig *config)
{
return WM_gizmogroup_keymap_common_with_name(gzgt, config, "3D View: Transform Gizmo");
}
/* Expose as multiple gizmos so tools use one, persistent context another.
* Needed because they use different options which isn't so simple to dynamically update. */
@ -2001,7 +1995,6 @@ void VIEW3D_GGT_xform_gizmo(wmGizmoGroupType *gzgt)
gzgt->message_subscribe = WIDGETGROUP_gizmo_message_subscribe;
gzgt->draw_prepare = WIDGETGROUP_gizmo_draw_prepare;
gzgt->invoke_prepare = WIDGETGROUP_gizmo_invoke_prepare;
gzgt->setup_keymap = WIDGETGROUP_gizmo_setup_keymap;
static const EnumPropertyItem rna_enum_gizmo_items[] = {
{V3D_GIZMO_SHOW_OBJECT_TRANSLATE, "TRANSLATE", 0, "Move", ""},
@ -2032,7 +2025,6 @@ void VIEW3D_GGT_xform_gizmo_context(wmGizmoGroupType *gzgt)
gzgt->message_subscribe = WIDGETGROUP_gizmo_message_subscribe;
gzgt->draw_prepare = WIDGETGROUP_gizmo_draw_prepare;
gzgt->invoke_prepare = WIDGETGROUP_gizmo_invoke_prepare;
gzgt->setup_keymap = WIDGETGROUP_gizmo_setup_keymap;
}
/** \} */

View File

@ -235,14 +235,21 @@ void WM_gizmo_target_property_subscribe_all(struct wmGizmo *gz,
/* wmGizmoGroup */
/* Callbacks for 'wmGizmoGroupType.setup_keymap' */
struct wmKeyMap *WM_gizmogroup_keymap_common_with_name(const struct wmGizmoGroupType *gzgt,
struct wmKeyConfig *config,
const char *idname);
struct wmKeyMap *WM_gizmogroup_keymap_common(const struct wmGizmoGroupType *gzgt,
struct wmKeyConfig *config);
struct wmKeyMap *WM_gizmogroup_keymap_template_ex(struct wmKeyConfig *config,
const char *idname,
const struct wmGizmoMapType_Params *params);
struct wmKeyMap *WM_gizmogroup_keymap_template(const struct wmGizmoGroupType *gzgt,
struct wmKeyConfig *config);
struct wmKeyMap *WM_gizmogroup_keymap_common_select(const struct wmGizmoGroupType *gzgt,
struct wmKeyConfig *config);
struct wmKeyMap *WM_gizmogroup_keymap_template_select_ex(
struct wmKeyConfig *config, const char *idname, const struct wmGizmoMapType_Params *params);
struct wmKeyMap *WM_gizmogroup_keymap_template_select(const struct wmGizmoGroupType *gzgt,
struct wmKeyConfig *config);
struct wmKeyMap *WM_gizmogroup_keymap_generic(const struct wmGizmoGroupType *gzgt,
struct wmKeyConfig *config);
struct wmKeyMap *WM_gizmogroup_keymap_generic_select(const struct wmGizmoGroupType *gzgt,
struct wmKeyConfig *config);
void WM_gizmogroup_ensure_init(const struct bContext *C, struct wmGizmoGroup *gzgroup);

View File

@ -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", &params);
}
/**
* 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", &params);
}
/** \} */ /* wmGizmoGroup */
/* -------------------------------------------------------------------- */

View File

@ -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;
}
}