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 <ideasman42@gmail.com>2021-09-15 10:44:35 +0300
committerCampbell Barton <ideasman42@gmail.com>2021-09-15 10:54:24 +0300
commitfb27a9bb983ce74b8d8f5f871cf0706dd1e25051 (patch)
tree7dae76c89fe1f466e25e8837b9c48849efaa185f /source/blender/windowmanager/gizmo
parent785e7ddf10540584ddc2403af40545366f32a770 (diff)
Gizmo: show groups flagged with SHOW_MODAL_ALL during interaction
Follow up to fix for T73684, which allowed some modal gizmos to hide all others. Also resolve an issue from 917a972b56af103aee406dfffe1f42745b5ad360 where shear the shear gizmo would be visible during interaction. Internally there are some changes to gizmo behavior - The gizmo with modal interaction wont draw if it's poll function fails. - The WM_GIZMOGROUPTYPE_DRAW_MODAL_ALL flag now causes these gizmo groups to draw when another group is being interacted with.
Diffstat (limited to 'source/blender/windowmanager/gizmo')
-rw-r--r--source/blender/windowmanager/gizmo/WM_gizmo_types.h5
-rw-r--r--source/blender/windowmanager/gizmo/intern/wm_gizmo_map.c21
2 files changed, 11 insertions, 15 deletions
diff --git a/source/blender/windowmanager/gizmo/WM_gizmo_types.h b/source/blender/windowmanager/gizmo/WM_gizmo_types.h
index eab62ffce4c..b0dd7be4572 100644
--- a/source/blender/windowmanager/gizmo/WM_gizmo_types.h
+++ b/source/blender/windowmanager/gizmo/WM_gizmo_types.h
@@ -115,7 +115,10 @@ typedef enum eWM_GizmoFlagGroupTypeFlag {
WM_GIZMOGROUPTYPE_SELECT = (1 << 3),
/** The gizmo group is to be kept (not removed on loading a new file for eg). */
WM_GIZMOGROUPTYPE_PERSISTENT = (1 << 4),
- /** Show all other gizmos when interacting. */
+ /**
+ * Show all other gizmos when interacting.
+ * Also show this group when another group is being interacted with.
+ */
WM_GIZMOGROUPTYPE_DRAW_MODAL_ALL = (1 << 5),
/**
* When used with tool, only run when activating the tool,
diff --git a/source/blender/windowmanager/gizmo/intern/wm_gizmo_map.c b/source/blender/windowmanager/gizmo/intern/wm_gizmo_map.c
index 6f6a2402d89..1144cd072e0 100644
--- a/source/blender/windowmanager/gizmo/intern/wm_gizmo_map.c
+++ b/source/blender/windowmanager/gizmo/intern/wm_gizmo_map.c
@@ -381,20 +381,6 @@ static void gizmomap_prepare_drawing(wmGizmoMap *gzmap,
wmGizmo *gz_modal = gzmap->gzmap_context.modal;
- /* only active gizmo needs updating */
- if (gz_modal) {
- if ((gz_modal->parent_gzgroup->type->flag & WM_GIZMOGROUPTYPE_DRAW_MODAL_ALL) == 0) {
- if ((gz_modal->parent_gzgroup->hide.any == 0) &&
- wm_gizmogroup_is_visible_in_drawstep(gz_modal->parent_gzgroup, drawstep)) {
- if (gizmo_prepare_drawing(gzmap, gz_modal, C, draw_gizmos, drawstep)) {
- gzmap->update_flag[drawstep] &= ~GIZMOMAP_IS_PREPARE_DRAW;
- }
- }
- /* don't draw any other gizmos */
- return;
- }
- }
-
/* Allow refresh functions to ask to be refreshed again, clear before the loop below. */
const bool do_refresh = gzmap->update_flag[drawstep] & GIZMOMAP_IS_REFRESH_CALLBACK;
gzmap->update_flag[drawstep] &= ~GIZMOMAP_IS_REFRESH_CALLBACK;
@@ -406,6 +392,13 @@ static void gizmomap_prepare_drawing(wmGizmoMap *gzmap,
continue;
}
+ /* When modal only show other gizmo groups tagged with #WM_GIZMOGROUPTYPE_DRAW_MODAL_ALL. */
+ if (gz_modal && (gzgroup != gz_modal->parent_gzgroup)) {
+ if ((gzgroup->type->flag & WM_GIZMOGROUPTYPE_DRAW_MODAL_ALL) == 0) {
+ continue;
+ }
+ }
+
/* Needs to be initialized on first draw. */
/* XXX weak: Gizmo-group may skip refreshing if it's invisible
* (map gets untagged nevertheless). */