Fix T57139: Transform overlay shows even when disabled
authorCampbell Barton <ideasman42@gmail.com>
Wed, 19 Dec 2018 01:26:33 +0000 (12:26 +1100)
committerCampbell Barton <ideasman42@gmail.com>
Wed, 19 Dec 2018 01:30:16 +0000 (12:30 +1100)
Transform bypasses the gizmo API for drawing overlays,
so custom checks are needed.

Also don't draw the gizmo in other windows when transforming.

source/blender/editors/transform/transform.c
source/blender/editors/transform/transform_gizmo_3d.c

index 90bfaf7bc9d71110f6cd3c37f5ae00a36216972b..2aff12266a75221d3d895a0616913ddfc21ce1c5 100644 (file)
@@ -1942,22 +1942,47 @@ static void drawHelpline(bContext *UNUSED(C), int x, int y, void *customdata)
        }
 }
 
-static void drawTransformView(const struct bContext *C, ARegion *UNUSED(ar), void *arg)
+static bool transinfo_show_overlay(const struct bContext *C, TransInfo *t, ARegion *ar)
+{
+       /* Don't show overlays when not the active view and when overlay is disabled: T57139 */
+       bool ok = false;
+       if (ar == t->ar) {
+               ok = true;
+       }
+       else {
+               ScrArea *sa = CTX_wm_area(C);
+               if (sa->spacetype == SPACE_VIEW3D) {
+                       View3D *v3d = sa->spacedata.first;
+                       if ((v3d->flag2 & V3D_RENDER_OVERRIDE) == 0) {
+                               ok = true;
+                       }
+               }
+       }
+       return ok;
+}
+
+static void drawTransformView(const struct bContext *C, ARegion *ar, void *arg)
 {
        TransInfo *t = arg;
 
+       if (!transinfo_show_overlay(C, t, ar)) {
+               return;
+       }
+
        GPU_line_width(1.0f);
 
        drawConstraint(t);
        drawPropCircle(C, t);
        drawSnapping(C, t);
 
-       /* edge slide, vert slide */
-       drawEdgeSlide(t);
-       drawVertSlide(t);
+       if (ar == t->ar) {
+               /* edge slide, vert slide */
+               drawEdgeSlide(t);
+               drawVertSlide(t);
 
-       /* Rotation */
-       drawDial3d(t);
+               /* Rotation */
+               drawDial3d(t);
+       }
 }
 
 /* just draw a little warning message in the top-right corner of the viewport to warn that autokeying is enabled */
@@ -2000,23 +2025,30 @@ static void drawAutoKeyWarning(TransInfo *UNUSED(t), ARegion *ar)
        GPU_blend(false);
 }
 
-static void drawTransformPixel(const struct bContext *UNUSED(C), ARegion *ar, void *arg)
+static void drawTransformPixel(const struct bContext *C, ARegion *ar, void *arg)
 {
        TransInfo *t = arg;
-       Scene *scene = t->scene;
-       ViewLayer *view_layer = t->view_layer;
-       Object *ob = OBACT(view_layer);
 
-       /* draw autokeyframing hint in the corner
-        * - only draw if enabled (advanced users may be distracted/annoyed),
-        *   for objects that will be autokeyframed (no point otherwise),
-        *   AND only for the active region (as showing all is too overwhelming)
-        */
-       if ((U.autokey_flag & AUTOKEY_FLAG_NOWARNING) == 0) {
-               if (ar == t->ar) {
-                       if (t->flag & (T_OBJECT | T_POSE)) {
-                               if (ob && autokeyframe_cfra_can_key(scene, &ob->id)) {
-                                       drawAutoKeyWarning(t, ar);
+       if (!transinfo_show_overlay(C, t, ar)) {
+               return;
+       }
+
+       if (ar == t->ar) {
+               Scene *scene = t->scene;
+               ViewLayer *view_layer = t->view_layer;
+               Object *ob = OBACT(view_layer);
+
+               /* draw autokeyframing hint in the corner
+                * - only draw if enabled (advanced users may be distracted/annoyed),
+                *   for objects that will be autokeyframed (no point otherwise),
+                *   AND only for the active region (as showing all is too overwhelming)
+                */
+               if ((U.autokey_flag & AUTOKEY_FLAG_NOWARNING) == 0) {
+                       if (ar == t->ar) {
+                               if (t->flag & (T_OBJECT | T_POSE)) {
+                                       if (ob && autokeyframe_cfra_can_key(scene, &ob->id)) {
+                                               drawAutoKeyWarning(t, ar);
+                                       }
                                }
                        }
                }
index 1913e35c1dae7cc6f45ce39ae1cb8c4a390b65ac..5a26245c14d8f2475cb07b63681d78be774c01e0 100644 (file)
@@ -785,7 +785,7 @@ int ED_transform_calc_gizmo_stats(
                const bool use_mat_local = true;
                for (bGPDlayer *gpl = gpd->layers.first; gpl; gpl = gpl->next) {
                        /* only editable and visible layers are considered */
-                       
+
                        if (gpencil_layer_is_editable(gpl) && (gpl->actframe != NULL)) {
 
                                /* calculate difference matrix */
@@ -1822,6 +1822,9 @@ static bool WIDGETGROUP_gizmo_poll(const struct bContext *C, struct wmGizmoGroup
        if (v3d->gizmo_flag & (V3D_GIZMO_HIDE | V3D_GIZMO_HIDE_TOOL)) {
                return false;
        }
+       if (G.moving & (G_TRANSFORM_OBJ | G_TRANSFORM_EDIT)) {
+               return false;
+       }
        return true;
 }
 
@@ -1876,6 +1879,9 @@ static bool WIDGETGROUP_xform_cage_poll(const bContext *C, wmGizmoGroupType *gzg
        if (v3d->gizmo_flag & (V3D_GIZMO_HIDE | V3D_GIZMO_HIDE_TOOL)) {
                return false;
        }
+       if (G.moving & (G_TRANSFORM_OBJ | G_TRANSFORM_EDIT)) {
+               return false;
+       }
        return true;
 }