From 38dd58ae232c5d1f16052b3e41ef6b8b097e6e50 Mon Sep 17 00:00:00 2001 From: filtered <176114999+webfiltered@users.noreply.github.com> Date: Sat, 26 Apr 2025 02:33:28 +1000 Subject: [PATCH] Fix new link follows pointer until context menu closed (#968) - Resolves https://github.com/Comfy-Org/ComfyUI_frontend/issues/3618 --- src/LGraphCanvas.ts | 7 ++++--- src/canvas/LinkConnector.ts | 4 ++++ 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/src/LGraphCanvas.ts b/src/LGraphCanvas.ts index 5defb4aab..579118413 100644 --- a/src/LGraphCanvas.ts +++ b/src/LGraphCanvas.ts @@ -3951,7 +3951,7 @@ export class LGraphCanvas implements ConnectionColorContext { /** Get the target snap / highlight point in graph space */ #getHighlightPosition(): ReadOnlyPoint { return LiteGraph.snaps_for_comfy - ? this._highlight_pos ?? this.graph_mouse + ? this.linkConnector.state.snapLinksPos ?? this._highlight_pos ?? this.graph_mouse : this.graph_mouse } @@ -3964,7 +3964,8 @@ export class LGraphCanvas implements ConnectionColorContext { ctx: CanvasRenderingContext2D, highlightPos: ReadOnlyPoint, ): void { - if (!this._highlight_pos) return + const linkConnectorSnap = !!this.linkConnector.state.snapLinksPos + if (!this._highlight_pos && !linkConnectorSnap) return ctx.fillStyle = "#ffcc00" ctx.beginPath() @@ -3982,7 +3983,7 @@ export class LGraphCanvas implements ConnectionColorContext { const { linkConnector } = this const { overReroute, overWidget } = linkConnector - if (!LiteGraph.snap_highlights_node || !linkConnector.isConnecting) return + if (!LiteGraph.snap_highlights_node || !linkConnector.isConnecting || linkConnectorSnap) return // Reroute highlight if (overReroute) { diff --git a/src/canvas/LinkConnector.ts b/src/canvas/LinkConnector.ts index f7f86f7ac..b614a51d5 100644 --- a/src/canvas/LinkConnector.ts +++ b/src/canvas/LinkConnector.ts @@ -32,6 +32,8 @@ export interface LinkConnectorState { multi: boolean /** When `true`, existing links are being repositioned. Otherwise, new links are being created. */ draggingExistingLinks: boolean + /** When set, connecting links will all snap to this position. */ + snapLinksPos?: [number, number] } /** Discriminated union to simplify type narrowing. */ @@ -61,6 +63,7 @@ export class LinkConnector { connectingTo: undefined, multi: false, draggingExistingLinks: false, + snapLinksPos: undefined, } readonly events = new LinkConnectorEventTarget() @@ -639,6 +642,7 @@ export class LinkConnector { hiddenReroutes.clear() state.multi = false state.draggingExistingLinks = false + state.snapLinksPos = undefined } }