From e3fe8ce00b74b64f099ca28ca76fadba1dd9985e Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Fri, 8 Jun 2018 08:46:31 +0200 Subject: WM: backport event/keymap type util from 2.8 --- source/blender/windowmanager/WM_api.h | 1 + .../blender/windowmanager/intern/wm_event_system.c | 30 ++++++++++++++++++++++ 2 files changed, 31 insertions(+) (limited to 'source/blender/windowmanager') diff --git a/source/blender/windowmanager/WM_api.h b/source/blender/windowmanager/WM_api.h index 75b2cfffd03..3324fec4cac 100644 --- a/source/blender/windowmanager/WM_api.h +++ b/source/blender/windowmanager/WM_api.h @@ -143,6 +143,7 @@ float WM_cursor_pressure (const struct wmWindow *win); /* event map */ int WM_userdef_event_map(int kmitype); +int WM_userdef_event_type_from_keymap_type(int kmitype); /* handlers */ diff --git a/source/blender/windowmanager/intern/wm_event_system.c b/source/blender/windowmanager/intern/wm_event_system.c index 5974d4fddee..b9feb4cba09 100644 --- a/source/blender/windowmanager/intern/wm_event_system.c +++ b/source/blender/windowmanager/intern/wm_event_system.c @@ -1610,6 +1610,36 @@ int WM_userdef_event_map(int kmitype) return kmitype; } +/** + * Use so we can check if 'wmEvent.type' is released in modal operators. + * + * An alternative would be to add a 'wmEvent.type_nokeymap'... or similar. + */ +int WM_userdef_event_type_from_keymap_type(int kmitype) +{ + switch (kmitype) { + case SELECTMOUSE: + return (U.flag & USER_LMOUSESELECT) ? LEFTMOUSE : RIGHTMOUSE; + case ACTIONMOUSE: + return (U.flag & USER_LMOUSESELECT) ? RIGHTMOUSE : LEFTMOUSE; + case EVT_TWEAK_S: + return (U.flag & USER_LMOUSESELECT) ? LEFTMOUSE : RIGHTMOUSE; + case EVT_TWEAK_A: + return (U.flag & USER_LMOUSESELECT) ? RIGHTMOUSE : LEFTMOUSE; + case EVT_TWEAK_L: + return LEFTMOUSE; + case EVT_TWEAK_M: + return MIDDLEMOUSE; + case EVT_TWEAK_R: + return RIGHTMOUSE; + case WHEELOUTMOUSE: + return (U.uiflag & USER_WHEELZOOMDIR) ? WHEELUPMOUSE : WHEELDOWNMOUSE; + case WHEELINMOUSE: + return (U.uiflag & USER_WHEELZOOMDIR) ? WHEELDOWNMOUSE : WHEELUPMOUSE; + } + + return kmitype; +} static int wm_eventmatch(const wmEvent *winevent, wmKeyMapItem *kmi) { -- cgit v1.2.3