From 4357fb63db77d8bee9b1a3d10fdf6abd55e4c798 Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Wed, 12 Dec 2018 21:39:55 +1100 Subject: Keymap: event type filter w/ finding keymap items Now its possibly to ask for only keyboard/mouse/ndof events when finding key map items. --- source/blender/windowmanager/wm_event_types.h | 39 ++++++++++++++++++++++++--- 1 file changed, 36 insertions(+), 3 deletions(-) (limited to 'source/blender/windowmanager/wm_event_types.h') diff --git a/source/blender/windowmanager/wm_event_types.h b/source/blender/windowmanager/wm_event_types.h index b2c4c0494ce..0fc4899e401 100644 --- a/source/blender/windowmanager/wm_event_types.h +++ b/source/blender/windowmanager/wm_event_types.h @@ -381,9 +381,7 @@ enum { /* test whether event type is acceptable as hotkey, excluding modifiers */ #define ISHOTKEY(event_type) \ ((ISKEYBOARD(event_type) || ISMOUSE(event_type) || ISNDOF(event_type)) && \ - ((event_type) != ESCKEY) && \ - ((event_type) >= LEFTCTRLKEY && (event_type) <= LEFTSHIFTKEY) == false && \ - ((event_type) >= UNKNOWNKEY && (event_type) <= GRLESSKEY) == false) + (ISKEYMODIFIER(event_type) == false)) /* internal helpers*/ #define _VA_IS_EVENT_MOD2(v, a) (CHECK_TYPE_INLINE(v, wmEvent *), \ @@ -398,6 +396,41 @@ enum { /* reusable IS_EVENT_MOD(event, shift, ctrl, alt, oskey), macro */ #define IS_EVENT_MOD(...) VA_NARGS_CALL_OVERLOAD(_VA_IS_EVENT_MOD, __VA_ARGS__) +enum eEventType_Mask { + /* ISKEYMODIFIER */ + EVT_TYPE_MASK_KEYBOARD_MODIFIER = (1 << 0), + /* ISKEYBOARD */ + EVT_TYPE_MASK_KEYBOARD = (1 << 1) | EVT_TYPE_MASK_KEYBOARD_MODIFIER, + /* ISMOUSE_WHEEL */ + EVT_TYPE_MASK_MOUSE_WHEEL = (1 << 2), + /* ISMOUSE_BUTTON */ + EVT_TYPE_MASK_MOUSE_GESTURE = (1 << 3), + /* ISMOUSE_GESTURE */ + EVT_TYPE_MASK_MOUSE_BUTTON = (1 << 4), + /* ISMOUSE */ + EVT_TYPE_MASK_MOUSE = (1 << 5) | EVT_TYPE_MASK_MOUSE_WHEEL | EVT_TYPE_MASK_MOUSE_GESTURE | EVT_TYPE_MASK_MOUSE_BUTTON, + /* ISNDOF */ + EVT_TYPE_MASK_NDOF = (1 << 6), + /* ISTWEAK */ + EVT_TYPE_MASK_TWEAK = (1 << 7), + /* IS_EVENT_ACTIONZONE */ + EVT_TYPE_MASK_ACTIONZONE = (1 << 8), +}; +#define EVT_TYPE_MASK_ALL \ + (EVT_TYPE_MASK_KEYBOARD | \ + EVT_TYPE_MASK_MOUSE | \ + EVT_TYPE_MASK_NDOF | \ + EVT_TYPE_MASK_TWEAK | \ + EVT_TYPE_MASK_ACTIONZONE) + +#define EVT_TYPE_MASK_HOTKEY_INCLUDE \ + (EVT_TYPE_MASK_KEYBOARD | EVT_TYPE_MASK_MOUSE | EVT_TYPE_MASK_NDOF) +#define EVT_TYPE_MASK_HOTKEY_EXCLUDE \ + EVT_TYPE_MASK_KEYBOARD_MODIFIER + +bool WM_event_type_mask_test(const int event_type, const enum eEventType_Mask mask); + + /* ********** wmEvent.val ********** */ /* Gestures */ -- cgit v1.2.3