Commit: 9904d73d9a653a54d055f708bbd881417377f349
Author: Julian Eisel
Date:   Sat Oct 15 01:38:44 2016 +0200
Branches: blender2.8
https://developer.blender.org/rB9904d73d9a653a54d055f708bbd881417377f349

Outliner: Draw highlights over entire row

Previously, highlights (mouse hover, selection, search-match) didn't affect 
background of restriction icons, now the entire line gets highlighted.

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

M       source/blender/editors/space_outliner/outliner_draw.c

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

diff --git a/source/blender/editors/space_outliner/outliner_draw.c 
b/source/blender/editors/space_outliner/outliner_draw.c
index 7f45784..840339a 100644
--- a/source/blender/editors/space_outliner/outliner_draw.c
+++ b/source/blender/editors/space_outliner/outliner_draw.c
@@ -1748,8 +1748,10 @@ static void outliner_draw_highlights(ARegion *ar, 
SpaceOops *soops, int startx,
        glDisable(GL_BLEND);
 }
 
-static void outliner_draw_tree(bContext *C, uiBlock *block, Scene *scene, 
ARegion *ar,
-                               SpaceOops *soops, TreeElement **te_edit)
+static void outliner_draw_tree(
+        bContext *C, uiBlock *block, Scene *scene, ARegion *ar,
+        SpaceOops *soops, const bool has_restrict_icons,
+        TreeElement **te_edit)
 {
        const uiFontStyle *fstyle = UI_FSTYLE_WIDGET;
        int starty, startx;
@@ -1768,7 +1770,17 @@ static void outliner_draw_tree(bContext *C, uiBlock 
*block, Scene *scene, ARegio
        starty = (int)ar->v2d.tot.ymax - UI_UNIT_Y - OL_Y_OFFSET;
        startx = 0;
        outliner_draw_highlights(ar, soops, startx, &starty);
-       
+
+       /* set scissor so tree elements or lines can't overlap restriction 
icons */
+       GLfloat scissor[4] = {0};
+       if (has_restrict_icons) {
+               int mask_x = BLI_rcti_size_x(&ar->v2d.mask) - (int)OL_TOGW + 1;
+               CLAMP_MIN(mask_x, 0);
+
+               glGetFloatv(GL_SCISSOR_BOX, scissor);
+               glScissor(ar->winrct.xmin, ar->winrct.ymin, mask_x, ar->winy);
+       }
+
        // gray hierarchy lines
        UI_ThemeColorBlend(TH_BACK, TH_TEXT, 0.4f);
        starty = (int)ar->v2d.tot.ymax - UI_UNIT_Y / 2 - OL_Y_OFFSET;
@@ -1781,6 +1793,11 @@ static void outliner_draw_tree(bContext *C, uiBlock 
*block, Scene *scene, ARegio
        for (TreeElement *te = soops->tree.first; te; te = te->next) {
                outliner_draw_tree_element(C, block, fstyle, scene, ar, soops, 
te, startx, &starty, te_edit);
        }
+
+       if (has_restrict_icons) {
+               /* reset scissor */
+               glScissor(UNPACK4(scissor));
+       }
 }
 
 
@@ -1800,22 +1817,6 @@ static void outliner_back(ARegion *ar)
 
 static void outliner_draw_restrictcols(ARegion *ar)
 {
-       int ystart;
-       
-       /* background underneath */
-       UI_ThemeColor(TH_BACK);
-       glRecti((int)(ar->v2d.cur.xmax - OL_TOGW),
-               (int)(ar->v2d.cur.ymin - 1), (int)ar->v2d.cur.xmax, 
(int)ar->v2d.cur.ymax);
-       
-       UI_ThemeColorShade(TH_BACK, 6);
-       ystart = (int)ar->v2d.tot.ymax;
-       ystart = UI_UNIT_Y * (ystart / (UI_UNIT_Y)) - OL_Y_OFFSET;
-       
-       while (ystart + 2 * UI_UNIT_Y > ar->v2d.cur.ymin) {
-               glRecti((int)ar->v2d.cur.xmax - OL_TOGW, ystart, 
(int)ar->v2d.cur.xmax, ystart + UI_UNIT_Y);
-               ystart -= 2 * UI_UNIT_Y;
-       }
-       
        UI_ThemeColorShadeAlpha(TH_BACK, -15, -200);
 
        /* view */
@@ -1850,6 +1851,7 @@ void draw_outliner(const bContext *C)
        uiBlock *block;
        int sizey = 0, sizex = 0, sizex_rna = 0;
        TreeElement *te_edit = NULL;
+       bool has_restrict_icons;
 
        outliner_build_tree(mainvar, scene, soops); // always
        
@@ -1871,6 +1873,7 @@ void draw_outliner(const bContext *C)
                
                /* get width of data (for setting 'tot' rect, this is column 1 
+ column 2 + a bit extra) */
                sizex = sizex_rna + OL_RNA_COL_SIZEX + 50;
+               has_restrict_icons = false;
        }
        else {
                /* width must take into account restriction columns (if 
visible) so that entries will still be visible */
@@ -1882,7 +1885,8 @@ void draw_outliner(const bContext *C)
                // XXX this isn't that great yet...
                if ((soops->flag & SO_HIDE_RESTRICTCOLS) == 0)
                        sizex += OL_TOGW * 3;
-               
+
+               has_restrict_icons = !(soops->flag & SO_HIDE_RESTRICTCOLS);
        }
        
        /* adds vertical offset */
@@ -1899,19 +1903,19 @@ void draw_outliner(const bContext *C)
        /* draw outliner stuff (background, hierarchy lines and names) */
        outliner_back(ar);
        block = UI_block_begin(C, ar, __func__, UI_EMBOSS);
-       outliner_draw_tree((bContext *)C, block, scene, ar, soops, &te_edit);
+       outliner_draw_tree((bContext *)C, block, scene, ar, soops, 
has_restrict_icons, &te_edit);
        
        if (ELEM(soops->outlinevis, SO_DATABLOCKS, SO_USERDEF)) {
                /* draw rna buttons */
                outliner_draw_rnacols(ar, sizex_rna);
                outliner_draw_rnabuts(block, scene, ar, soops, sizex_rna, 
&soops->tree);
        }
-       else if ((soops->outlinevis == SO_ID_ORPHANS) && !(soops->flag & 
SO_HIDE_RESTRICTCOLS)) {
+       else if ((soops->outlinevis == SO_ID_ORPHANS) && has_restrict_icons) {
                /* draw user toggle columns */
                outliner_draw_restrictcols(ar);
                outliner_draw_userbuts(block, ar, soops, &soops->tree);
        }
-       else if (!(soops->flag & SO_HIDE_RESTRICTCOLS)) {
+       else if (has_restrict_icons) {
                /* draw restriction columns */
                outliner_draw_restrictcols(ar);
                outliner_draw_restrictbuts(block, scene, ar, soops, 
&soops->tree);

_______________________________________________
Bf-blender-cvs mailing list
Bf-blender-cvs@blender.org
https://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to