[Bf-blender-cvs] [ddba5e0be37] master: Outliner: Draw hierarchy lines dashed for object children

Nathan Craddock noreply at git.blender.org
Mon Sep 28 15:58:20 CEST 2020


Commit: ddba5e0be37a7b13de309e543fcb3658edb2d60d
Author: Nathan Craddock
Date:   Mon Sep 28 07:54:32 2020 -0600
Branches: master
https://developer.blender.org/rBddba5e0be37a7b13de309e543fcb3658edb2d60d

Outliner: Draw hierarchy lines dashed for object children

Draw dashed lines for object child hierarchies in the outliner. This
makes the difference between collection and object hierarchies more
clear. Dashes are also consistent with viewport relationship lines.

Differential Revision: https://developer.blender.org/D8997

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

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 1160a5b926c..eb6b5c7d295 100644
--- a/source/blender/editors/space_outliner/outliner_draw.c
+++ b/source/blender/editors/space_outliner/outliner_draw.c
@@ -3194,6 +3194,23 @@ static bool subtree_contains_object(ListBase *lb)
   return false;
 }
 
+static void outliner_draw_hierarchy_line(
+    const uint pos, const int x, const int y1, const int y2, const bool draw_dashed)
+{
+  /* Small vertical padding. */
+  const short line_padding = UI_UNIT_Y / 4.0f;
+
+  /* >= is 1.0 for undashed lines. */
+  immUniform1f("dash_factor", draw_dashed ? 0.5f : 1.0f);
+
+  immBegin(GPU_PRIM_LINES, 2);
+  /* Intentionally draw from top to bottom, so collapsing a child item doesn't make the dashes
+   * appear to move. */
+  immVertex2f(pos, x, y2 + line_padding);
+  immVertex2f(pos, x, y1 - line_padding);
+  immEnd();
+}
+
 static void outliner_draw_hierarchy_lines_recursive(uint pos,
                                                     SpaceOutliner *space_outliner,
                                                     ListBase *lb,
@@ -3205,14 +3222,13 @@ static void outliner_draw_hierarchy_lines_recursive(uint pos,
   bTheme *btheme = UI_GetTheme();
   int y = *starty;
 
-  /* Small vertical padding */
-  const short line_padding = UI_UNIT_Y / 4.0f;
-
   /* Draw vertical lines between collections */
   bool draw_hierarchy_line;
+  bool is_object_line;
   LISTBASE_FOREACH (TreeElement *, te, lb) {
     TreeStoreElem *tselem = TREESTORE(te);
     draw_hierarchy_line = false;
+    is_object_line = false;
     *starty -= UI_UNIT_Y;
     short color_tag = COLLECTION_COLOR_NONE;
 
@@ -3229,6 +3245,7 @@ static void outliner_draw_hierarchy_lines_recursive(uint pos,
       else if (tselem->type == 0 && te->idcode == ID_OB) {
         if (subtree_contains_object(&te->subtree)) {
           draw_hierarchy_line = true;
+          is_object_line = true;
           y = *starty;
         }
       }
@@ -3245,7 +3262,7 @@ static void outliner_draw_hierarchy_lines_recursive(uint pos,
         immUniformColor4ubv(col);
       }
 
-      immRecti(pos, startx, y - line_padding, startx + (U.pixelsize * 1), *starty + line_padding);
+      outliner_draw_hierarchy_line(pos, startx, y, *starty, is_object_line);
     }
   }
 }
@@ -3256,10 +3273,16 @@ static void outliner_draw_hierarchy_lines(SpaceOutliner *space_outliner,
                                           int *starty)
 {
   GPUVertFormat *format = immVertexFormat();
-  uint pos = GPU_vertformat_attr_add(format, "pos", GPU_COMP_I32, 2, GPU_FETCH_INT_TO_FLOAT);
+  uint pos = GPU_vertformat_attr_add(format, "pos", GPU_COMP_F32, 2, GPU_FETCH_FLOAT);
   uchar col[4];
 
-  immBindBuiltinProgram(GPU_SHADER_2D_UNIFORM_COLOR);
+  immBindBuiltinProgram(GPU_SHADER_2D_LINE_DASHED_UNIFORM_COLOR);
+
+  float viewport_size[4];
+  GPU_viewport_size_get_f(viewport_size);
+  immUniform2f("viewport_size", viewport_size[2] / UI_DPI_FAC, viewport_size[3] / UI_DPI_FAC);
+  immUniform1i("colors_len", 0); /* "simple"  mode */
+  immUniform1f("dash_width", 8.0f);
   UI_GetThemeColorBlend3ubv(TH_BACK, TH_TEXT, 0.4f, col);
   col[3] = 255;



More information about the Bf-blender-cvs mailing list