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:
authorLeon Schittek <lone_noel>2022-02-28 23:52:00 +0300
committerHans Goudey <h.goudey@me.com>2022-02-28 23:52:00 +0300
commit75bb99fa40dd09e4ae0e92cca9398b929f855a2c (patch)
treeebbb8fd315e9b9e6e7d94cfd2b64fb49dd1c0a31 /source/blender/editors/space_node
parenteeb0279e890e7b021e0ac9dd48d2bcf6bef8300b (diff)
Nodes: Improve readability of selected node links
This commit improves the drawing of selected node links: - Highlight the entire link to make it easier to spot where the link is going/coming from. - Always draw selected links on top, so they are always clearly visible. - Don't fade selected node links when the sockets they are connected to are out out view. - Dragged node links still get a partial highlight when they are only attached to one socket. Differential Revision: https://developer.blender.org/D11930
Diffstat (limited to 'source/blender/editors/space_node')
-rw-r--r--source/blender/editors/space_node/drawnode.cc18
-rw-r--r--source/blender/editors/space_node/node_draw.cc16
-rw-r--r--source/blender/editors/space_node/node_intern.hh6
3 files changed, 25 insertions, 15 deletions
diff --git a/source/blender/editors/space_node/drawnode.cc b/source/blender/editors/space_node/drawnode.cc
index b2c361ecaba..afb205f9f9e 100644
--- a/source/blender/editors/space_node/drawnode.cc
+++ b/source/blender/editors/space_node/drawnode.cc
@@ -1967,9 +1967,10 @@ void node_draw_link_bezier(const bContext &C,
const bNodeLink &link,
const int th_col1,
const int th_col2,
- const int th_col3)
+ const int th_col3,
+ const bool selected)
{
- const float dim_factor = node_link_dim_factor(v2d, link);
+ const float dim_factor = selected ? 1.0f : node_link_dim_factor(v2d, link);
float thickness = 1.5f;
float dash_factor = 1.0f;
@@ -2025,19 +2026,17 @@ void node_draw_link_bezier(const bContext &C,
}
/* Highlight links connected to selected nodes. */
- const bool is_fromnode_selected = link.fromnode && link.fromnode->flag & SELECT;
- const bool is_tonode_selected = link.tonode && link.tonode->flag & SELECT;
- if (is_fromnode_selected || is_tonode_selected) {
+ if (selected) {
float color_selected[4];
UI_GetThemeColor4fv(TH_EDGE_SELECT, color_selected);
const float alpha = color_selected[3];
/* Interpolate color if highlight color is not fully transparent. */
if (alpha != 0.0) {
- if (is_fromnode_selected) {
+ if (link.fromsock) {
interp_v3_v3v3(colors[1], colors[1], color_selected, alpha);
}
- if (is_tonode_selected) {
+ if (link.tosock) {
interp_v3_v3v3(colors[2], colors[2], color_selected, alpha);
}
}
@@ -2102,7 +2101,8 @@ void node_draw_link_bezier(const bContext &C,
void node_draw_link(const bContext &C,
const View2D &v2d,
const SpaceNode &snode,
- const bNodeLink &link)
+ const bNodeLink &link,
+ const bool selected)
{
int th_col1 = TH_WIRE_INNER, th_col2 = TH_WIRE_INNER, th_col3 = TH_WIRE;
@@ -2146,7 +2146,7 @@ void node_draw_link(const bContext &C,
}
}
- node_draw_link_bezier(C, v2d, snode, link, th_col1, th_col2, th_col3);
+ node_draw_link_bezier(C, v2d, snode, link, th_col1, th_col2, th_col3, selected);
}
} // namespace blender::ed::space_node
diff --git a/source/blender/editors/space_node/node_draw.cc b/source/blender/editors/space_node/node_draw.cc
index 7f3bc8ccb13..7b4578e6c05 100644
--- a/source/blender/editors/space_node/node_draw.cc
+++ b/source/blender/editors/space_node/node_draw.cc
@@ -660,7 +660,7 @@ static void node_draw_mute_line(const bContext &C,
GPU_blend(GPU_BLEND_ALPHA);
LISTBASE_FOREACH (const bNodeLink *, link, &node.internal_links) {
- node_draw_link_bezier(C, v2d, snode, *link, TH_WIRE_INNER, TH_WIRE_INNER, TH_WIRE);
+ node_draw_link_bezier(C, v2d, snode, *link, TH_WIRE_INNER, TH_WIRE_INNER, TH_WIRE, false);
}
GPU_blend(GPU_BLEND_NONE);
@@ -2650,10 +2650,18 @@ static void node_draw_nodetree(const bContext &C,
nodelink_batch_start(snode);
LISTBASE_FOREACH (bNodeLink *, link, &ntree.links) {
- if (!nodeLinkIsHidden(link)) {
- node_draw_link(C, region.v2d, snode, *link);
+ if (!nodeLinkIsHidden(link) && !nodeLinkIsSelected(link)) {
+ node_draw_link(C, region.v2d, snode, *link, false);
}
}
+
+ /* Draw selected node links after the unselected ones, so they are shown on top. */
+ LISTBASE_FOREACH (bNodeLink *, link, &ntree.links) {
+ if (!nodeLinkIsHidden(link) && nodeLinkIsSelected(link)) {
+ node_draw_link(C, region.v2d, snode, *link, true);
+ }
+ }
+
nodelink_batch_end(snode);
GPU_blend(GPU_BLEND_NONE);
@@ -2838,7 +2846,7 @@ void node_draw_space(const bContext &C, ARegion &region)
GPU_line_smooth(true);
if (snode.runtime->linkdrag) {
for (const bNodeLink *link : snode.runtime->linkdrag->links) {
- node_draw_link(C, v2d, snode, *link);
+ node_draw_link(C, v2d, snode, *link, true);
}
}
GPU_line_smooth(false);
diff --git a/source/blender/editors/space_node/node_intern.hh b/source/blender/editors/space_node/node_intern.hh
index 592db3f7877..6b5beb6c0d6 100644
--- a/source/blender/editors/space_node/node_intern.hh
+++ b/source/blender/editors/space_node/node_intern.hh
@@ -196,7 +196,8 @@ void nodelink_batch_end(SpaceNode &snode);
void node_draw_link(const bContext &C,
const View2D &v2d,
const SpaceNode &snode,
- const bNodeLink &link);
+ const bNodeLink &link,
+ bool selected);
/**
* Don't do shadows if th_col3 is -1.
*/
@@ -206,7 +207,8 @@ void node_draw_link_bezier(const bContext &C,
const bNodeLink &link,
int th_col1,
int th_col2,
- int th_col3);
+ int th_col3,
+ bool selected);
/** If v2d not nullptr, it clips and returns 0 if not visible. */
bool node_link_bezier_points(const View2D *v2d,
const SpaceNode *snode,