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
diff options
context:
space:
mode:
authorCampbell Barton <campbell@blender.org>2022-03-08 05:48:34 +0300
committerCampbell Barton <campbell@blender.org>2022-03-08 05:48:34 +0300
commitf052fb564605a788378d361e161a3447d30814a6 (patch)
tree7da1e1fe181e35f571261328a72976c72734e29a
parent08d8eee006f7e2a7ac05ef691bbaee230cbfbe5a (diff)
Event System: add ISKEYBOARD_OR_BUTTON macro
This simplifies checking for event types that support press & release.
-rw-r--r--source/blender/windowmanager/WM_types.h2
-rw-r--r--source/blender/windowmanager/intern/wm_event_system.c12
-rw-r--r--source/blender/windowmanager/wm_event_types.h10
3 files changed, 16 insertions, 8 deletions
diff --git a/source/blender/windowmanager/WM_types.h b/source/blender/windowmanager/WM_types.h
index d7fe34a3b4c..b2296ced923 100644
--- a/source/blender/windowmanager/WM_types.h
+++ b/source/blender/windowmanager/WM_types.h
@@ -635,7 +635,7 @@ typedef struct wmTabletData {
* Notes:
*
* - The previous values are only set for mouse button and keyboard events.
- * See: #ISMOUSE_BUTTON & #ISKEYBOARD macros.
+ * See: #ISKEYBOARD_OR_BUTTON macro.
*
* - Previous x/y are exceptions: #wmEvent.prev
* these are set on mouse motion, see #MOUSEMOVE & track-pad events.
diff --git a/source/blender/windowmanager/intern/wm_event_system.c b/source/blender/windowmanager/intern/wm_event_system.c
index 27a7042fd62..6cf7a33e06e 100644
--- a/source/blender/windowmanager/intern/wm_event_system.c
+++ b/source/blender/windowmanager/intern/wm_event_system.c
@@ -145,7 +145,7 @@ wmEvent *WM_event_add_simulate(wmWindow *win, const wmEvent *event_to_add)
copy_v2_v2_int(win->eventstate->prev_xy, win->eventstate->xy);
copy_v2_v2_int(event->prev_xy, win->eventstate->xy);
}
- else if (ISMOUSE_BUTTON(event->type) || ISKEYBOARD(event->type)) {
+ else if (ISKEYBOARD_OR_BUTTON(event->type)) {
win->eventstate->prev_val = event->prev_val = win->eventstate->val;
win->eventstate->prev_type = event->prev_type = win->eventstate->type;
@@ -3205,7 +3205,7 @@ static int wm_handlers_do(bContext *C, wmEvent *event, ListBase *handlers)
win->event_queue_check_drag = false;
}
}
- else if (ISMOUSE_BUTTON(event->type) || ISKEYBOARD(event->type)) {
+ else if (ISKEYBOARD_OR_BUTTON(event->type)) {
/* All events that don't set #wmEvent.prev_type must be ignored. */
/* Test for CLICK events. */
@@ -4770,7 +4770,7 @@ static wmEvent *wm_event_add_trackpad(wmWindow *win, const wmEvent *event, int d
*/
static void wm_event_state_update_and_click_set(wmEvent *event, wmEvent *event_state)
{
- BLI_assert(ISMOUSE_BUTTON(event->type) || ISKEYBOARD(event->type));
+ BLI_assert(ISKEYBOARD_OR_BUTTON(event->type));
BLI_assert(ELEM(event->val, KM_PRESS, KM_RELEASE));
/* Only copy these flags into the `event_state`. */
@@ -4839,15 +4839,13 @@ void wm_event_add_ghostevent(wmWindowManager *wm, wmWindow *win, int type, void
* while not common, avoid a false alarm. */
#ifndef NDEBUG
if ((event_state->type || event_state->val) && /* Ignore cleared event state. */
- !(ISMOUSE_BUTTON(event_state->type) || ISKEYBOARD(event_state->type) ||
- (event_state->type == EVENT_NONE))) {
+ !(ISKEYBOARD_OR_BUTTON(event_state->type) || (event_state->type == EVENT_NONE))) {
CLOG_WARN(WM_LOG_HANDLERS,
"Non-keyboard/mouse button found in 'win->eventstate->type = %d'",
event_state->type);
}
if ((event_state->prev_type || event_state->prev_val) && /* Ignore cleared event state. */
- !(ISMOUSE_BUTTON(event_state->prev_type) || ISKEYBOARD(event_state->prev_type) ||
- (event_state->type == EVENT_NONE))) {
+ !(ISKEYBOARD_OR_BUTTON(event_state->prev_type) || (event_state->type == EVENT_NONE))) {
CLOG_WARN(WM_LOG_HANDLERS,
"Non-keyboard/mouse button found in 'win->eventstate->prev_type = %d'",
event_state->prev_type);
diff --git a/source/blender/windowmanager/wm_event_types.h b/source/blender/windowmanager/wm_event_types.h
index 578663b6fe8..fd0760d1d1c 100644
--- a/source/blender/windowmanager/wm_event_types.h
+++ b/source/blender/windowmanager/wm_event_types.h
@@ -363,6 +363,16 @@ enum {
(((event_type) >= _EVT_KEYBOARD_MIN && (event_type) <= _EVT_KEYBOARD_MAX) || \
((event_type) >= EVT_F1KEY && (event_type) <= EVT_F24KEY))
+/**
+ * Test whether the event is a key on the keyboard
+ * or any other kind of button that supports press & release
+ * (use for click & click-drag detection).
+ *
+ * \note Mouse wheel events are excluded from this macro, while they do generate press events it
+ * doesn't make sense to have click & click-drag events for a mouse-wheel as it can't be held down.
+ */
+#define ISKEYBOARD_OR_BUTTON(event_type) (ISMOUSE_BUTTON(event_type) || ISKEYBOARD(event_type))
+
/** Test whether the event is a modifier key. */
#define ISKEYMODIFIER(event_type) \
(((event_type) >= EVT_LEFTCTRLKEY && (event_type) <= EVT_LEFTSHIFTKEY) || \