forked from bartvdbraak/blender
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
This commit is contained in:
parent
c6b904e972
commit
ddba5e0be3
@ -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;
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user