[Bf-blender-cvs] [fc10a5cf9e0] master: Fix T66229: gizmos overlap when switching modes

Campbell Barton noreply at git.blender.org
Mon Jul 1 05:54:58 CEST 2019


Commit: fc10a5cf9e008343ecb925fdb87a4faa18918359
Author: Campbell Barton
Date:   Mon Jul 1 13:51:13 2019 +1000
Branches: master
https://developer.blender.org/rBfc10a5cf9e008343ecb925fdb87a4faa18918359

Fix T66229: gizmos overlap when switching modes

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

M	source/blender/windowmanager/gizmo/intern/wm_gizmo_group.c
M	source/blender/windowmanager/gizmo/intern/wm_gizmo_map.c

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

diff --git a/source/blender/windowmanager/gizmo/intern/wm_gizmo_group.c b/source/blender/windowmanager/gizmo/intern/wm_gizmo_group.c
index 40d99ce8ba6..50c98630a16 100644
--- a/source/blender/windowmanager/gizmo/intern/wm_gizmo_group.c
+++ b/source/blender/windowmanager/gizmo/intern/wm_gizmo_group.c
@@ -927,6 +927,15 @@ wmGizmoGroup *WM_gizmomaptype_group_init_runtime_with_region(wmGizmoMapType *gzm
 
   wmGizmoGroup *gzgroup = wm_gizmogroup_new_from_type(gzmap, gzgt);
 
+  /* Don't allow duplicates when switching modes for e.g. see: T66229. */
+  LISTBASE_FOREACH (wmGizmoGroup *, gzgroup_iter, &gzmap->groups) {
+    if (gzgroup_iter->type == gzgt) {
+      if (gzgroup_iter != gzgroup) {
+        WM_gizmo_group_tag_remove(gzgroup_iter);
+      }
+    }
+  }
+
   wm_gizmomap_highlight_set(gzmap, NULL, NULL, 0);
 
   ED_region_tag_redraw(ar);
diff --git a/source/blender/windowmanager/gizmo/intern/wm_gizmo_map.c b/source/blender/windowmanager/gizmo/intern/wm_gizmo_map.c
index be123bee5df..6ec908bcf29 100644
--- a/source/blender/windowmanager/gizmo/intern/wm_gizmo_map.c
+++ b/source/blender/windowmanager/gizmo/intern/wm_gizmo_map.c
@@ -1283,32 +1283,6 @@ void WM_gizmoconfig_update(struct Main *bmain)
     return;
   }
 
-  if (wm_gzmap_type_update_flag & WM_GIZMOTYPE_GLOBAL_UPDATE_REMOVE) {
-    for (bScreen *screen = bmain->screens.first; screen; screen = screen->id.next) {
-      for (ScrArea *sa = screen->areabase.first; sa; sa = sa->next) {
-        for (SpaceLink *sl = sa->spacedata.first; sl; sl = sl->next) {
-          ListBase *regionbase = (sl == sa->spacedata.first) ? &sa->regionbase : &sl->regionbase;
-          for (ARegion *ar = regionbase->first; ar; ar = ar->next) {
-            wmGizmoMap *gzmap = ar->gizmo_map;
-            if (gzmap != NULL && gzmap->tag_remove_group) {
-              gzmap->tag_remove_group = false;
-
-              for (wmGizmoGroup *gzgroup = gzmap->groups.first, *gzgroup_next; gzgroup;
-                   gzgroup = gzgroup_next) {
-                gzgroup_next = gzgroup->next;
-                if (gzgroup->tag_remove) {
-                  wm_gizmogroup_free(NULL, gzgroup);
-                  ED_region_tag_redraw(ar);
-                }
-              }
-            }
-          }
-        }
-      }
-    }
-    wm_gzmap_type_update_flag &= ~WM_GIZMOTYPE_GLOBAL_UPDATE_REMOVE;
-  }
-
   if (wm_gzmap_type_update_flag & WM_GIZMOMAPTYPE_GLOBAL_UPDATE_REMOVE) {
     for (wmGizmoMapType *gzmap_type = gizmomaptypes.first; gzmap_type;
          gzmap_type = gzmap_type->next) {
@@ -1352,6 +1326,32 @@ void WM_gizmoconfig_update(struct Main *bmain)
 
     wm_gzmap_type_update_flag &= ~WM_GIZMOMAPTYPE_GLOBAL_UPDATE_INIT;
   }
+
+  if (wm_gzmap_type_update_flag & WM_GIZMOTYPE_GLOBAL_UPDATE_REMOVE) {
+    for (bScreen *screen = bmain->screens.first; screen; screen = screen->id.next) {
+      for (ScrArea *sa = screen->areabase.first; sa; sa = sa->next) {
+        for (SpaceLink *sl = sa->spacedata.first; sl; sl = sl->next) {
+          ListBase *regionbase = (sl == sa->spacedata.first) ? &sa->regionbase : &sl->regionbase;
+          for (ARegion *ar = regionbase->first; ar; ar = ar->next) {
+            wmGizmoMap *gzmap = ar->gizmo_map;
+            if (gzmap != NULL && gzmap->tag_remove_group) {
+              gzmap->tag_remove_group = false;
+
+              for (wmGizmoGroup *gzgroup = gzmap->groups.first, *gzgroup_next; gzgroup;
+                   gzgroup = gzgroup_next) {
+                gzgroup_next = gzgroup->next;
+                if (gzgroup->tag_remove) {
+                  wm_gizmogroup_free(NULL, gzgroup);
+                  ED_region_tag_redraw(ar);
+                }
+              }
+            }
+          }
+        }
+      }
+    }
+    wm_gzmap_type_update_flag &= ~WM_GIZMOTYPE_GLOBAL_UPDATE_REMOVE;
+  }
 }
 
 /** \} */



More information about the Bf-blender-cvs mailing list