Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
path: root/source
diff options
context:
space:
mode:
authorCampbell Barton <ideasman42@gmail.com>2019-05-24 10:42:00 +0300
committerCampbell Barton <ideasman42@gmail.com>2019-05-24 10:53:24 +0300
commit5adfc51a0fc7f5ecf89661b8765f43e7f684650f (patch)
tree3bd9157298aa528217bd29c92970c50eb72aeef8 /source
parent7dd888c0cf4039d3224863a7f2d235674d321614 (diff)
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.
Diffstat (limited to 'source')
-rw-r--r--source/blender/editors/transform/transform_gizmo_3d.c8
-rw-r--r--source/blender/windowmanager/gizmo/WM_gizmo_api.h23
-rw-r--r--source/blender/windowmanager/gizmo/intern/wm_gizmo_group.c86
-rw-r--r--source/blender/windowmanager/gizmo/intern/wm_gizmo_group_type.c4
4 files changed, 78 insertions, 43 deletions
diff --git a/source/blender/editors/transform/transform_gizmo_3d.c b/source/blender/editors/transform/transform_gizmo_3d.c
index ead90b6a67a..ef3abe96f46 100644
--- a/source/blender/editors/transform/transform_gizmo_3d.c
+++ b/source/blender/editors/transform/transform_gizmo_3d.c
@@ -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;
}
/** \} */
diff --git a/source/blender/windowmanager/gizmo/WM_gizmo_api.h b/source/blender/windowmanager/gizmo/WM_gizmo_api.h
index 4c24762416e..bef3cd51aea 100644
--- a/source/blender/windowmanager/gizmo/WM_gizmo_api.h
+++ b/source/blender/windowmanager/gizmo/WM_gizmo_api.h
@@ -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_common_select(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_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);
diff --git a/source/blender/windowmanager/gizmo/intern/wm_gizmo_group.c b/source/blender/windowmanager/gizmo/intern/wm_gizmo_group.c
index 68020c736d8..d4e1dbfac73 100644
--- a/source/blender/windowmanager/gizmo/intern/wm_gizmo_group.c
+++ b/source/blender/windowmanager/gizmo/intern/wm_gizmo_group.c
@@ -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 */
/* -------------------------------------------------------------------- */
diff --git a/source/blender/windowmanager/gizmo/intern/wm_gizmo_group_type.c b/source/blender/windowmanager/gizmo/intern/wm_gizmo_group_type.c
index 7c8db18c0ca..d09e088af7f 100644
--- a/source/blender/windowmanager/gizmo/intern/wm_gizmo_group_type.c
+++ b/source/blender/windowmanager/gizmo/intern/wm_gizmo_group_type.c
@@ -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;
}
}