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:
authorNathan Craddock <nzcraddock@gmail.com>2020-09-28 16:54:32 +0300
committerNathan Craddock <nzcraddock@gmail.com>2020-09-28 16:54:32 +0300
commitddba5e0be37a7b13de309e543fcb3658edb2d60d (patch)
tree2e35e9bc35fb1a1048f2fdc1ee247489999f7327
parentc6b904e972226c29cafb4ab0fc5841757d318e82 (diff)
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
-rw-r--r--source/blender/editors/space_outliner/outliner_draw.c35
1 files changed, 29 insertions, 6 deletions
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;