From 2f06a0b14b74c2aa089e8732d716b4dd6acbdd99 Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Wed, 29 May 2019 13:01:38 +1000 Subject: Cleanup: move gizmo keymap access into funcitons Existing functions were written to match the setup_keymap callback. Add versions that can be called with the window manager for convenience. --- .../editors/space_view3d/view3d_gizmo_navigate.c | 3 +- source/blender/windowmanager/gizmo/WM_gizmo_api.h | 25 +++--- .../windowmanager/gizmo/intern/wm_gizmo_group.c | 99 ++++++++++++---------- 3 files changed, 68 insertions(+), 59 deletions(-) diff --git a/source/blender/editors/space_view3d/view3d_gizmo_navigate.c b/source/blender/editors/space_view3d/view3d_gizmo_navigate.c index d39be3d8e20..87a1d0950b1 100644 --- a/source/blender/editors/space_view3d/view3d_gizmo_navigate.c +++ b/source/blender/editors/space_view3d/view3d_gizmo_navigate.c @@ -228,8 +228,7 @@ static void WIDGETGROUP_navigate_setup(const bContext *C, wmGizmoGroup *gzgroup) /* When dragging an axis, use this instead. */ wmWindowManager *wm = CTX_wm_manager(C); - gz->keymap = WM_keymap_ensure( - wm->defaultconf, "Generic Gizmo Click Drag", SPACE_EMPTY, RGN_TYPE_WINDOW); + gz->keymap = WM_gizmo_keymap_generic_click_drag(wm); gz->drag_part = 0; } diff --git a/source/blender/windowmanager/gizmo/WM_gizmo_api.h b/source/blender/windowmanager/gizmo/WM_gizmo_api.h index bef3cd51aea..ea6fcee2299 100644 --- a/source/blender/windowmanager/gizmo/WM_gizmo_api.h +++ b/source/blender/windowmanager/gizmo/WM_gizmo_api.h @@ -46,6 +46,7 @@ struct wmGizmoType; struct wmKeyConfig; struct wmMsgSubscribeKey; struct wmMsgSubscribeValue; +struct wmWindowManager; #include "wm_gizmo_fn.h" @@ -235,21 +236,19 @@ void WM_gizmo_target_property_subscribe_all(struct wmGizmo *gz, /* wmGizmoGroup */ /* Callbacks for 'wmGizmoGroupType.setup_keymap' */ -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 wmKeyConfig *kc); struct wmKeyMap *WM_gizmogroup_keymap_generic_select(const struct wmGizmoGroupType *gzgt, - struct wmKeyConfig *config); + struct wmKeyConfig *kc); +/* Utility functions (not callbacks). */ +struct wmKeyMap *WM_gizmo_keymap_generic_with_keyconfig(struct wmKeyConfig *kc); +struct wmKeyMap *WM_gizmo_keymap_generic(struct wmWindowManager *wm); + +struct wmKeyMap *WM_gizmo_keymap_generic_select_with_keyconfig(struct wmKeyConfig *kc); +struct wmKeyMap *WM_gizmo_keymap_generic_select(struct wmWindowManager *wm); + +struct wmKeyMap *WM_gizmo_keymap_generic_click_drag_with_keyconfig(struct wmKeyConfig *kc); +struct wmKeyMap *WM_gizmo_keymap_generic_click_drag(struct wmWindowManager *wm); 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 f0e4c45843f..c88fb9fb228 100644 --- a/source/blender/windowmanager/gizmo/intern/wm_gizmo_group.c +++ b/source/blender/windowmanager/gizmo/intern/wm_gizmo_group.c @@ -597,7 +597,7 @@ void GIZMOGROUP_OT_gizmo_tweak(wmOperatorType *ot) /** \} */ -wmKeyMap *wm_gizmogroup_tweak_modal_keymap(wmKeyConfig *keyconf) +wmKeyMap *wm_gizmogroup_tweak_modal_keymap(wmKeyConfig *kc) { wmKeyMap *keymap; char name[KMAP_MAX_NAME]; @@ -613,14 +613,14 @@ wmKeyMap *wm_gizmogroup_tweak_modal_keymap(wmKeyConfig *keyconf) }; STRNCPY(name, "Generic Gizmo Tweak Modal Map"); - keymap = WM_modalkeymap_get(keyconf, name); + keymap = WM_modalkeymap_get(kc, name); /* this function is called for each spacetype, only needs to add map once */ if (keymap && keymap->modal_items) { return NULL; } - keymap = WM_modalkeymap_add(keyconf, name, modal_items); + keymap = WM_modalkeymap_add(kc, name, modal_items); /* items for modal map */ WM_modalkeymap_add_item(keymap, ESCKEY, KM_PRESS, KM_ANY, 0, TWEAK_MODAL_CANCEL); @@ -644,53 +644,32 @@ wmKeyMap *wm_gizmogroup_tweak_modal_keymap(wmKeyConfig *keyconf) return keymap; } -/** - * Common default keymap for gizmo groups. - * - * \param name: Typically #wmGizmoGroupType.name - * \param params: Typically #wmGizmoGroupType.gzmap_params - */ -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, 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); - } - - return km; -} +/** \} */ /* wmGizmoGroup */ -wmKeyMap *WM_gizmogroup_keymap_template(const wmGizmoGroupType *gzgt, wmKeyConfig *config) -{ - return WM_gizmogroup_keymap_template_ex(config, gzgt->name, &gzgt->gzmap_params); -} +/* -------------------------------------------------------------------- */ +/** \name wmGizmoGroup (Key-map callbacks) + * + * \{ */ -wmKeyMap *WM_gizmogroup_keymap_generic(const wmGizmoGroupType *UNUSED(gzgt), wmKeyConfig *config) +wmKeyMap *WM_gizmogroup_keymap_generic(const wmGizmoGroupType *UNUSED(gzgt), wmKeyConfig *kc) { - struct wmGizmoMapType_Params params = { - .spaceid = SPACE_EMPTY, - .regionid = RGN_TYPE_WINDOW, - }; - return WM_gizmogroup_keymap_template_ex(config, "Generic Gizmo", ¶ms); + return WM_gizmo_keymap_generic_with_keyconfig(kc); } /** * Variation of #WM_gizmogroup_keymap_common but with keymap items for selection * + * TODO(campbell): move to Python. + * * \param name: Typically #wmGizmoGroupType.name * \param params: Typically #wmGizmoGroupType.gzmap_params */ -wmKeyMap *WM_gizmogroup_keymap_template_select_ex(wmKeyConfig *config, - const char *name, - const struct wmGizmoMapType_Params *params) +static wmKeyMap *WM_gizmogroup_keymap_template_select_ex( + wmKeyConfig *kc, 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, params->spaceid, params->regionid); + wmKeyMap *km = WM_keymap_ensure(kc, name, params->spaceid, params->regionid); const bool do_init = BLI_listbase_is_empty(&km->items); /* FIXME(campbell) */ @@ -725,22 +704,54 @@ wmKeyMap *WM_gizmogroup_keymap_template_select_ex(wmKeyConfig *config, 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) + wmKeyConfig *kc) { struct wmGizmoMapType_Params params = { .spaceid = SPACE_EMPTY, .regionid = RGN_TYPE_WINDOW, }; - return WM_gizmogroup_keymap_template_select_ex(config, "Generic Gizmo Select", ¶ms); + return WM_gizmogroup_keymap_template_select_ex(kc, "Generic Gizmo Select", ¶ms); } -/** \} */ /* wmGizmoGroup */ +/* -------------------------------------------------------------------- */ +/** \name wmGizmo (Key-map access) + * + * Key config version so these can be called from #wmGizmoGroupFnSetupKeymap. + * + * \{ */ + +struct wmKeyMap *WM_gizmo_keymap_generic_with_keyconfig(wmKeyConfig *kc) +{ + const char *idname = "Generic Gizmo"; + return WM_keymap_ensure(kc, idname, SPACE_EMPTY, RGN_TYPE_WINDOW); +} +struct wmKeyMap *WM_gizmo_keymap_generic(wmWindowManager *wm) +{ + return WM_gizmo_keymap_generic_with_keyconfig(wm->defaultconf); +} + +struct wmKeyMap *WM_gizmo_keymap_generic_select_with_keyconfig(wmKeyConfig *kc) +{ + const char *idname = "Generic Gizmo Select"; + return WM_keymap_ensure(kc, idname, SPACE_EMPTY, RGN_TYPE_WINDOW); +} +struct wmKeyMap *WM_gizmo_keymap_generic_select(wmWindowManager *wm) +{ + return WM_gizmo_keymap_generic_select_with_keyconfig(wm->defaultconf); +} + +struct wmKeyMap *WM_gizmo_keymap_generic_click_drag_with_keyconfig(wmKeyConfig *kc) +{ + const char *idname = "Generic Gizmo Click Drag"; + return WM_keymap_ensure(kc, idname, SPACE_EMPTY, RGN_TYPE_WINDOW); +} +struct wmKeyMap *WM_gizmo_keymap_generic_click_drag(wmWindowManager *wm) +{ + return WM_gizmo_keymap_generic_click_drag_with_keyconfig(wm->defaultconf); +} + +/** \} */ /* -------------------------------------------------------------------- */ /** \name wmGizmoGroupType -- cgit v1.2.3