diff --git a/Scripts/Editor/NodeEditorAction.cs b/Scripts/Editor/NodeEditorAction.cs
index cdfdc4f..e2b80d5 100644
--- a/Scripts/Editor/NodeEditorAction.cs
+++ b/Scripts/Editor/NodeEditorAction.cs
@@ -470,11 +470,7 @@ namespace XNodeEditor {
/// Draw a connection as we are dragging it
public void DrawDraggedConnection() {
if (IsDraggingPort) {
- Color col = NodeEditorPreferences.GetTypeColor(draggedOutput.ValueType);
- col.a = draggedOutputTarget != null ? 1.0f : 0.6f;
-
- Gradient gradient = new Gradient();
- gradient.SetKeys(new GradientColorKey[] { new GradientColorKey(col, 0f) }, new GradientAlphaKey[] { new GradientAlphaKey(1f, 0f) });
+ Gradient gradient = graphEditor.GetNoodleGradient(draggedOutput, null);
Rect fromRect;
if (!_portConnectionPoints.TryGetValue(draggedOutput, out fromRect)) return;
@@ -489,7 +485,7 @@ namespace XNodeEditor {
DrawNoodle(gradient, gridPoints);
Color bgcol = Color.black;
- Color frcol = col;
+ Color frcol = gradient.colorKeys[0].color;
bgcol.a = 0.6f;
frcol.a = 0.6f;
diff --git a/Scripts/Editor/NodeGraphEditor.cs b/Scripts/Editor/NodeGraphEditor.cs
index 91fba43..93c915f 100644
--- a/Scripts/Editor/NodeGraphEditor.cs
+++ b/Scripts/Editor/NodeGraphEditor.cs
@@ -64,18 +64,33 @@ namespace XNodeEditor {
}
/// Returned color is used to color noodles
+ /// The output this noodle comes from. Never null.
+ /// The output this noodle comes from. Can be null if we are dragging the noodle.
public virtual Gradient GetNoodleGradient(XNode.NodePort output, XNode.NodePort input) {
- Color a = GetTypeColor(output.ValueType);
- Color b = GetTypeColor(input.ValueType);
- if (window.hoveredPort == output || window.hoveredPort == input) {
- a = Color.Lerp(a, Color.white, 0.8f);
- b = Color.Lerp(b, Color.white, 0.8f);
- }
Gradient grad = new Gradient();
- grad.SetKeys(
- new GradientColorKey[] { new GradientColorKey(a, 0f), new GradientColorKey(b, 1f) },
- new GradientAlphaKey[] { new GradientAlphaKey(1f, 0f), new GradientAlphaKey(1f, 1f) }
- );
+
+ // If dragging the noodle, draw solid, slightly transparent
+ if (input == null) {
+ Color a = GetTypeColor(output.ValueType);
+ grad.SetKeys(
+ new GradientColorKey[] { new GradientColorKey(a, 0f) },
+ new GradientAlphaKey[] { new GradientAlphaKey(0.6f, 0f) }
+ );
+ }
+ // If normal, draw gradient fading from one input color to the other
+ else {
+ Color a = GetTypeColor(output.ValueType);
+ Color b = GetTypeColor(input.ValueType);
+ // If any port is hovered, tint white
+ if (window.hoveredPort == output || window.hoveredPort == input) {
+ a = Color.Lerp(a, Color.white, 0.8f);
+ b = Color.Lerp(b, Color.white, 0.8f);
+ }
+ grad.SetKeys(
+ new GradientColorKey[] { new GradientColorKey(a, 0f), new GradientColorKey(b, 1f) },
+ new GradientAlphaKey[] { new GradientAlphaKey(1f, 0f), new GradientAlphaKey(1f, 1f) }
+ );
+ }
return grad;
}