[Bf-blender-cvs] [f052fb56460] master: Event System: add ISKEYBOARD_OR_BUTTON macro

Campbell Barton noreply at git.blender.org
Tue Mar 8 04:02:00 CET 2022


Commit: f052fb564605a788378d361e161a3447d30814a6
Author: Campbell Barton
Date:   Tue Mar 8 13:48:34 2022 +1100
Branches: master
https://developer.blender.org/rBf052fb564605a788378d361e161a3447d30814a6

Event System: add ISKEYBOARD_OR_BUTTON macro

This simplifies checking for event types that support press & release.

===================================================================

M	source/blender/windowmanager/WM_types.h
M	source/blender/windowmanager/intern/wm_event_system.c
M	source/blender/windowmanager/wm_event_types.h

===================================================================

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) || \



More information about the Bf-blender-cvs mailing list