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:
Diffstat (limited to 'source/blender/editors/space_outliner/outliner_draw.c')
-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;