[Bf-blender-cvs] [8a8424021c6] master: Cleanup: move Event.is_repeat & is_direction_inverted to flags

Campbell Barton noreply at git.blender.org
Tue Mar 1 02:22:56 CET 2022


Commit: 8a8424021c6bd7666375b5d93804c2693fab4a0d
Author: Campbell Barton
Date:   Tue Mar 1 11:59:21 2022 +1100
Branches: master
https://developer.blender.org/rB8a8424021c6bd7666375b5d93804c2693fab4a0d

Cleanup: move Event.is_repeat & is_direction_inverted to flags

Use a flag for events to avoid adding struct members every time a new
kind of tag is needed - so events remain small.

This also simplifies copying settings as flags can be copied at once
with a mask.

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

M	source/blender/editors/interface/interface.c
M	source/blender/editors/interface/interface_handlers.c
M	source/blender/editors/screen/screen_ops.c
M	source/blender/editors/space_view3d/view3d_navigate_rotate.c
M	source/blender/editors/transform/transform.c
M	source/blender/makesrna/intern/rna_wm.c
M	source/blender/makesrna/intern/rna_wm_api.c
M	source/blender/windowmanager/WM_types.h
M	source/blender/windowmanager/intern/wm_event_query.c
M	source/blender/windowmanager/intern/wm_event_system.c
M	source/blender/windowmanager/intern/wm_gesture_ops.c
M	source/blender/windowmanager/intern/wm_window.c

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

diff --git a/source/blender/editors/interface/interface.c b/source/blender/editors/interface/interface.c
index bbd2a64bab4..3619a7ce317 100644
--- a/source/blender/editors/interface/interface.c
+++ b/source/blender/editors/interface/interface.c
@@ -6529,7 +6529,7 @@ void UI_but_focus_on_enter_event(wmWindow *win, uiBut *but)
 
   event.type = EVT_BUT_OPEN;
   event.val = KM_PRESS;
-  event.is_repeat = false;
+  event.flag = 0;
   event.customdata = but;
   event.customdata_free = false;
 
diff --git a/source/blender/editors/interface/interface_handlers.c b/source/blender/editors/interface/interface_handlers.c
index 3d92cd6c397..c277ca2e36b 100644
--- a/source/blender/editors/interface/interface_handlers.c
+++ b/source/blender/editors/interface/interface_handlers.c
@@ -8974,7 +8974,7 @@ void ui_but_activate_event(bContext *C, ARegion *region, uiBut *but)
   wm_event_init_from_window(win, &event);
   event.type = EVT_BUT_OPEN;
   event.val = KM_PRESS;
-  event.is_repeat = false;
+  event.flag = 0;
   event.customdata = but;
   event.customdata_free = false;
 
@@ -9538,7 +9538,7 @@ static int ui_handle_list_event(bContext *C, const wmEvent *event, ARegion *regi
     ui_pan_to_scroll(event, &type, &val);
 
     /* 'ui_pan_to_scroll' gives the absolute direction. */
-    if (event->is_direction_inverted) {
+    if (event->flag & WM_EVENT_SCROLL_INVERT) {
       scroll_dir = -1;
     }
 
@@ -10459,7 +10459,7 @@ static int ui_handle_menu_event(bContext *C,
 
             /* Only respond to explicit press to avoid the event that opened the menu
              * activating an item when the key is held. */
-            if (event->is_repeat) {
+            if (event->flag & WM_EVENT_IS_REPEAT) {
               break;
             }
 
@@ -10546,7 +10546,7 @@ static int ui_handle_menu_event(bContext *C,
               ((event->modifier & (KM_SHIFT | KM_CTRL | KM_OSKEY)) == 0) &&
               /* Only respond to explicit press to avoid the event that opened the menu
                * activating an item when the key is held. */
-              !event->is_repeat) {
+              (event->flag & WM_EVENT_IS_REPEAT) == 0) {
             if (ui_menu_pass_event_to_parent_if_nonactive(menu, but, level, retval)) {
               break;
             }
diff --git a/source/blender/editors/screen/screen_ops.c b/source/blender/editors/screen/screen_ops.c
index b912b02852f..ee3bc3cba76 100644
--- a/source/blender/editors/screen/screen_ops.c
+++ b/source/blender/editors/screen/screen_ops.c
@@ -1023,7 +1023,7 @@ static void actionzone_apply(bContext *C, wmOperator *op, int type)
   }
 
   event.val = KM_NOTHING;
-  event.is_repeat = false;
+  event.flag = 0;
   event.customdata = op->customdata;
   event.customdata_free = true;
   op->customdata = NULL;
diff --git a/source/blender/editors/space_view3d/view3d_navigate_rotate.c b/source/blender/editors/space_view3d/view3d_navigate_rotate.c
index 774a8983c67..11de5463cdb 100644
--- a/source/blender/editors/space_view3d/view3d_navigate_rotate.c
+++ b/source/blender/editors/space_view3d/view3d_navigate_rotate.c
@@ -383,7 +383,7 @@ static int viewrotate_invoke(bContext *C, wmOperator *op, const wmEvent *event)
     int event_xy[2];
 
     if (event->type == MOUSEPAN) {
-      if (event->is_direction_inverted) {
+      if (event->flag & WM_EVENT_SCROLL_INVERT) {
         event_xy[0] = 2 * event->xy[0] - event->prev_xy[0];
         event_xy[1] = 2 * event->xy[1] - event->prev_xy[1];
       }
diff --git a/source/blender/editors/transform/transform.c b/source/blender/editors/transform/transform.c
index 67b0d5c85ac..d7a71350934 100644
--- a/source/blender/editors/transform/transform.c
+++ b/source/blender/editors/transform/transform.c
@@ -1150,7 +1150,7 @@ int transformEvent(TransInfo *t, const wmEvent *event)
   else if (event->val == KM_PRESS) {
     switch (event->type) {
       case EVT_CKEY:
-        if (event->is_repeat) {
+        if (event->flag & WM_EVENT_IS_REPEAT) {
           break;
         }
         if (event->modifier & KM_ALT) {
@@ -1164,7 +1164,7 @@ int transformEvent(TransInfo *t, const wmEvent *event)
         }
         break;
       case EVT_OKEY:
-        if (event->is_repeat) {
+        if (event->flag & WM_EVENT_IS_REPEAT) {
           break;
         }
         if ((t->flag & T_PROP_EDIT) && (event->modifier & KM_SHIFT)) {
@@ -1202,7 +1202,7 @@ int transformEvent(TransInfo *t, const wmEvent *event)
         }
         break;
       case EVT_NKEY:
-        if (event->is_repeat) {
+        if (event->flag & WM_EVENT_IS_REPEAT) {
           break;
         }
         if (ELEM(t->mode, TFM_ROTATION)) {
diff --git a/source/blender/makesrna/intern/rna_wm.c b/source/blender/makesrna/intern/rna_wm.c
index 16d1dc0e93f..ae688846b95 100644
--- a/source/blender/makesrna/intern/rna_wm.c
+++ b/source/blender/makesrna/intern/rna_wm.c
@@ -668,7 +668,7 @@ static int rna_Event_unicode_length(PointerRNA *ptr)
 static bool rna_Event_is_repeat_get(PointerRNA *ptr)
 {
   const wmEvent *event = ptr->data;
-  return event->is_repeat;
+  return (event->flag & WM_EVENT_IS_REPEAT) != 0;
 }
 
 static float rna_Event_pressure_get(PointerRNA *ptr)
diff --git a/source/blender/makesrna/intern/rna_wm_api.c b/source/blender/makesrna/intern/rna_wm_api.c
index dc53b7a5e12..1eb51b6ec80 100644
--- a/source/blender/makesrna/intern/rna_wm_api.c
+++ b/source/blender/makesrna/intern/rna_wm_api.c
@@ -635,7 +635,7 @@ static wmEvent *rna_Window_event_add_simulate(wmWindow *win,
   wmEvent e = *win->eventstate;
   e.type = type;
   e.val = value;
-  e.is_repeat = false;
+  e.flag = 0;
   e.xy[0] = x;
   e.xy[1] = y;
 
diff --git a/source/blender/windowmanager/WM_types.h b/source/blender/windowmanager/WM_types.h
index e9f12287d29..cdbaa2739ba 100644
--- a/source/blender/windowmanager/WM_types.h
+++ b/source/blender/windowmanager/WM_types.h
@@ -560,6 +560,22 @@ typedef struct wmGesture {
 
 /* ************** wmEvent ************************ */
 
+typedef enum eWM_EventFlag {
+  /**
+   * True if the operating system inverted the delta x/y values and resulting
+   * `prev_xy` values, for natural scroll direction.
+   * For absolute scroll direction, the delta must be negated again.
+   */
+  WM_EVENT_SCROLL_INVERT = (1 << 0),
+  /**
+   * Generated by auto-repeat, note that this must only ever be set for keyboard events
+   * where `ISKEYBOARD(event->type) == true`.
+   *
+   * See #KMI_REPEAT_IGNORE for details on how key-map handling uses this.
+   */
+  WM_EVENT_IS_REPEAT = (1 << 1),
+} eWM_EventFlag;
+
 typedef struct wmTabletData {
   /** 0=EVT_TABLET_NONE, 1=EVT_TABLET_STYLUS, 2=EVT_TABLET_ERASER. */
   int active;
@@ -616,14 +632,6 @@ typedef struct wmEvent {
   /** From ghost, fallback if utf8 isn't set. */
   char ascii;
 
-  /**
-   * Generated by auto-repeat, note that this must only ever be set for keyboard events
-   * where `ISKEYBOARD(event->type) == true`.
-   *
-   * See #KMI_REPEAT_IGNORE for details on how key-map handling uses this.
-   */
-  char is_repeat;
-
   /** The previous value of `type`. */
   short prev_type;
   /** The previous value of `val`. */
@@ -656,20 +664,14 @@ typedef struct wmEvent {
   /** Tablet info, available for mouse move and button events. */
   wmTabletData tablet;
 
+  eWM_EventFlag flag;
+
   /* Custom data. */
   /** Custom data type, stylus, 6dof, see wm_event_types.h */
   short custom;
   short customdata_free;
-  int pad2;
   /** Ascii, unicode, mouse-coords, angles, vectors, NDOF data, drag-drop info. */
   void *customdata;
-
-  /**
-   * True if the operating system inverted the delta x/y values and resulting
-   * `prev_xy` values, for natural scroll direction.
-   * For absolute scroll direction, the delta must be negated again.
-   */
-  char is_direction_inverted;
 } wmEvent;
 
 /**
diff --git a/source/blender/windowmanager/intern/wm_event_query.c b/source/blender/windowmanager/intern/wm_event_query.c
index 751dcc61fa9..0d42d0a44c7 100644
--- a/source/blender/windowmanager/intern/wm_event_query.c
+++ b/source/blender/windowmanager/intern/wm_event_query.c
@@ -85,7 +85,7 @@ void WM_event_print(const wmEvent *event)
         (event->modifier & KM_ALT) != 0,
         (event->modifier & KM_OSKEY) != 0,
         event->keymodifier,
-        event->is_repeat,
+        (event->flag & WM_EVENT_IS_REPEAT) != 0,
         event->xy[0],
         event->xy[1],
         event->ascii,
@@ -440,7 +440,7 @@ int WM_event_absolute_delta_x(const struct wmEvent *event)
 {
   int dx = event->xy[0] - event->prev_xy[0];
 
-  if (!event->is_direction_inverted) {
+  if ((event->flag & WM_EVENT_SCROLL_INVERT) == 0) {
     dx = -dx;
   }
 
@@ -451,7 +451,7 @@ int WM_event_absolute_delta_y(const struct wmEvent *event)
 {
   int dy = event->xy[1] - event->prev_xy[1];
 
-  if (!event->is_direction_inverted) {
+  if ((event->flag & WM_EVENT_SCROLL_INVERT) == 0) {
     dy = -dy;
   }
 
diff --git a/source/blender/windowmanager/intern/wm_event_system.c b/source/blender/windowmanager/intern/wm_event_system.c
index 6753978eece..4e9a430b380 100644
--- a/source/blender/windowmanager/intern/wm_event_system.c
+++ b/source/blender/windowmanager/intern/wm_event_system.c
@@ -153,7 +153,7 @@ wmEvent *WM_event_add_simulate(wmWindow *win, const wmEvent *event_to_add)
     win->eventstate->type = event->type;
 
     if (event->val == KM_PRESS) {
-      if (event->is_repeat == false) {
+      if ((event->flag & WM_EVENT_IS_REPEAT) == 0) {
         copy_v2_v2_int(win->eventstate->prev_click_xy, event->xy);
       }
     }
@@ -166,7 +166,7 @@ void wm_event_free(wmEvent *event)
 #ifndef NDEBUG
   /* Don't use assert here because it's fairly harmless in most cases,
    * more an issue of correctness, something we should avoid in general. */
-  if (event->is_repeat && !ISKEYBOARD(event->type)) {
+  if ((event->flag & WM_EVENT_IS_REPEAT) && !ISKEYBOARD(event->type)) {
     printf("%s: 'is_repeat=true' for non-keyboard event, this should not happen.\n", __func__);
     WM_event_print(event);
   }
@@ -739,7 +739,7 @@ void wm_event_handler_ui_cancel_ex(bContext *C,
       wm_event_init_from_window(win, &event);
       event.type = EVT_BUT_CANCEL;
       event.val = reactivate_button ? 0 : 1;
-      event.is_repeat = false;
+      event.flag = 0;
       ha

@@ Diff output truncated at 10240 characters. @@



More information about the Bf-blender-cvs mailing list