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.
This commit is contained in:
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
@@ -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);
|
||||
|
||||
|
||||
@@ -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.
|
||||
/** \} */ /* wmGizmoGroup */
|
||||
|
||||
/* -------------------------------------------------------------------- */
|
||||
/** \name wmGizmoGroup (Key-map callbacks)
|
||||
*
|
||||
* \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;
|
||||
}
|
||||
|
||||
wmKeyMap *WM_gizmogroup_keymap_template(const wmGizmoGroupType *gzgt, wmKeyConfig *config)
|
||||
wmKeyMap *WM_gizmogroup_keymap_generic(const wmGizmoGroupType *UNUSED(gzgt), wmKeyConfig *kc)
|
||||
{
|
||||
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 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
|
||||
|
||||
Reference in New Issue
Block a user