[Bf-blender-cvs] [43baf38758d] blender-v2.93-release: Snap Gizmo: Minor optimization in detecting toggle inversion

Germano Cavalcante noreply at git.blender.org
Fri Apr 16 04:14:08 CEST 2021


Commit: 43baf38758d2f1cba5c9d551da2321bb99ac3161
Author: Germano Cavalcante
Date:   Thu Apr 15 22:51:38 2021 -0300
Branches: blender-v2.93-release
https://developer.blender.org/rB43baf38758d2f1cba5c9d551da2321bb99ac3161

Snap Gizmo: Minor optimization in detecting toggle inversion

Do not compare the x and y values of the mouse to check inversion.

Also remove "Lazy Initialization".

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

M	source/blender/editors/gizmo_library/gizmo_types/snap3d_gizmo.c

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

diff --git a/source/blender/editors/gizmo_library/gizmo_types/snap3d_gizmo.c b/source/blender/editors/gizmo_library/gizmo_types/snap3d_gizmo.c
index f13b7d832bd..cd7d0f5fb4c 100644
--- a/source/blender/editors/gizmo_library/gizmo_types/snap3d_gizmo.c
+++ b/source/blender/editors/gizmo_library/gizmo_types/snap3d_gizmo.c
@@ -93,24 +93,19 @@ typedef struct SnapGizmo3D {
   bool is_enabled;
 } SnapGizmo3D;
 
-static bool eventstate_cmp(SnapGizmo3D *snap_gizmo, const wmEvent *event)
-{
-  if ((event->x == snap_gizmo->last_eventstate.x) && (event->y == snap_gizmo->last_eventstate.y) &&
-      (event->ctrl == snap_gizmo->last_eventstate.ctrl) &&
-      (event->shift == snap_gizmo->last_eventstate.shift) &&
-      (event->alt == snap_gizmo->last_eventstate.alt) &&
-      (event->oskey == snap_gizmo->last_eventstate.oskey)) {
-    return true;
-  }
-  return false;
-}
-
 /* Checks if the current event is different from the one captured in the last update. */
 static bool eventstate_has_changed(SnapGizmo3D *snap_gizmo, const wmWindowManager *wm)
 {
   if (wm && wm->winactive) {
     const wmEvent *event = wm->winactive->eventstate;
-    return eventstate_cmp(snap_gizmo, event) == false;
+    if ((event->x != snap_gizmo->last_eventstate.x) ||
+        (event->y != snap_gizmo->last_eventstate.y) ||
+        (event->ctrl != snap_gizmo->last_eventstate.ctrl) ||
+        (event->shift != snap_gizmo->last_eventstate.shift) ||
+        (event->alt != snap_gizmo->last_eventstate.alt) ||
+        (event->oskey != snap_gizmo->last_eventstate.oskey)) {
+      return true;
+    }
   }
   return false;
 }
@@ -137,16 +132,14 @@ static bool invert_snap(SnapGizmo3D *snap_gizmo, const wmWindowManager *wm)
   }
 
   const wmEvent *event = wm->winactive->eventstate;
-  if (eventstate_cmp(snap_gizmo, event)) {
+  if ((event->ctrl == snap_gizmo->last_eventstate.ctrl) &&
+      (event->shift == snap_gizmo->last_eventstate.shift) &&
+      (event->alt == snap_gizmo->last_eventstate.alt) &&
+      (event->oskey == snap_gizmo->last_eventstate.oskey)) {
     /* Nothing has changed. */
     return snap_gizmo->invert_snap;
   }
 
-  if (snap_gizmo->keymap == NULL) {
-    /* Lazy initialization. */
-    snap_gizmo->keymap = WM_modalkeymap_find(wm->defaultconf, "Generic Gizmo Tweak Modal Map");
-    RNA_enum_value_from_id(snap_gizmo->keymap->modal_items, "SNAP_ON", &snap_gizmo->snap_on);
-  }
   const int snap_on = snap_gizmo->snap_on;
 
   wmKeyMap *keymap = WM_keymap_active(wm, snap_gizmo->keymap);
@@ -336,15 +329,21 @@ short ED_gizmotypes_snap_3d_update(wmGizmo *gz,
 
 #ifdef USE_SNAP_DETECT_FROM_KEYMAP_HACK
   if ((snap_gizmo->flag & ED_SNAPGIZMO_TOGGLE_ALWAYS_TRUE) == 0) {
-    snap_gizmo->invert_snap = invert_snap(snap_gizmo, wm);
+    bool invert_snap_toggle = invert_snap(snap_gizmo, wm);
+    if (invert_snap_toggle != snap_gizmo->invert_snap) {
+      snap_gizmo->invert_snap = invert_snap_toggle;
+
+      /* Status has changed, be sure to save before early return. */
+      eventstate_save(snap_gizmo, wm);
+    }
+
     const ToolSettings *ts = scene->toolsettings;
-    if (snap_gizmo->invert_snap != !(ts->snap_flag & SCE_SNAP)) {
+    if (invert_snap_toggle != !(ts->snap_flag & SCE_SNAP)) {
       snap_gizmo->snap_elem = 0;
       return 0;
     }
   }
 #endif
-
   eventstate_save(snap_gizmo, wm);
 
   snap_gizmo->is_enabled = true;
@@ -555,8 +554,14 @@ static void gizmo_snap_rna_snap_elem_index_get_fn(struct PointerRNA *ptr,
 
 static void snap_gizmo_setup(wmGizmo *gz)
 {
-  /* Flags. */
   gz->flag |= WM_GIZMO_NO_TOOLTIP;
+
+#ifdef USE_SNAP_DETECT_FROM_KEYMAP_HACK
+  SnapGizmo3D *snap_gizmo = (SnapGizmo3D *)gz;
+  snap_gizmo->keymap = WM_modalkeymap_find(gz->parent_gzgroup->type->keyconf,
+                                           "Generic Gizmo Tweak Modal Map");
+  RNA_enum_value_from_id(snap_gizmo->keymap->modal_items, "SNAP_ON", &snap_gizmo->snap_on);
+#endif
 }
 
 static void snap_gizmo_draw(const bContext *C, wmGizmo *gz)



More information about the Bf-blender-cvs mailing list