From 38bbf2fead48cbeb097f6d2dd320f66fca13ece5 Mon Sep 17 00:00:00 2001 From: filtered <176114999+webfiltered@users.noreply.github.com> Date: Sat, 22 Mar 2025 06:05:09 +1100 Subject: [PATCH] Add reroute snap highlight (#813) ### Reroute snap highlight When connecting links, a simple border now helps to indicate that a connecting link can be dropped on a reroute below the pointer. ### Reroute ID badges Optionally, intended for debugging purposes, drawing of ID badges can also be manually enabled via console. --- src/LGraphCanvas.ts | 11 ++++++++++- src/Reroute.ts | 27 +++++++++++++++++++++++++++ src/canvas/LinkConnector.ts | 3 +++ 3 files changed, 40 insertions(+), 1 deletion(-) diff --git a/src/LGraphCanvas.ts b/src/LGraphCanvas.ts index efed02908..d71b1ac80 100644 --- a/src/LGraphCanvas.ts +++ b/src/LGraphCanvas.ts @@ -2671,12 +2671,14 @@ export class LGraphCanvas implements ConnectionColorContext { const reroute = graph.getRerouteOnPos(e.canvasX, e.canvasY) if (reroute) { underPointer |= CanvasItem.Reroute + linkConnector.overReroute = reroute if (linkConnector.isConnecting && linkConnector.isRerouteValidDrop(reroute)) { this._highlight_pos = reroute.pos } } else { this._highlight_pos &&= undefined + linkConnector.overReroute &&= undefined } // Not over a node @@ -3947,7 +3949,14 @@ export class LGraphCanvas implements ConnectionColorContext { if (!LiteGraph.snap_highlights_node) return const { linkConnector } = this - const { overWidget } = linkConnector + const { overReroute, overWidget } = linkConnector + // Reroute highlight + if (overReroute) { + const { globalAlpha } = ctx + ctx.globalAlpha = 1 + overReroute.drawHighlight(ctx, "#ffcc00aa") + ctx.globalAlpha = globalAlpha + } // Ensure we're mousing over a node and connecting a link const node = this.node_over diff --git a/src/Reroute.ts b/src/Reroute.ts index 152ac08a9..6a3b20874 100644 --- a/src/Reroute.ts +++ b/src/Reroute.ts @@ -11,6 +11,7 @@ import type { import type { LGraphNode, NodeId } from "./LGraphNode" import type { Serialisable, SerialisableReroute } from "./types/serialisation" +import { LGraphBadge } from "./LGraphBadge" import { type LinkId, LLink } from "./LLink" import { distance } from "./measure" @@ -31,6 +32,7 @@ export interface FloatingRerouteSlot { */ export class Reroute implements Positionable, LinkSegment, Serialisable { static radius: number = 10 + static drawIdBadge: boolean = false #malloc = new Float32Array(8) @@ -413,6 +415,31 @@ export class Reroute implements Positionable, LinkSegment, Serialisable void constructor(setConnectingLinks: (value: ConnectingLink[]) => void) {