mirror of
https://github.com/Comfy-Org/ComfyUI_frontend.git
synced 2026-04-28 18:22:40 +00:00
Implement drop-on-canvas + linkconnectoradapter consolidation (#5898)
Implements droponcanvas functionality and a linkconnectoradapter refactor. - Drop on canvas (Shift and default) integrated via LinkConnector ‘dropped-on-canvas’ with proper CanvasPointerEvent. - LinkConnector adapter: now wraps the live canvas linkConnector (no duplicate state); added dropOnCanvas() helper. - Tests: Playwright scenarios for Shift-drop context menu/searchbox, pinned endpoint, type prefilter, and post-selection auto-connect (browser_tests/tests/vueNodes/interactions/links/linkInteraction.spec.ts). There are some followup PRs that will fix/refactor some more noncritical things, like the terrible slotid, the number/string nodeid confusion, etc. https://github.com/Comfy-Org/ComfyUI_frontend/pull/5780 (snapping) <-- https://github.com/Comfy-Org/ComfyUI_frontend/pull/5898 (drop on canvas + linkconnectoradapter refactor) <-- https://github.com/Comfy-Org/ComfyUI_frontend/pull/5903 (fix reroute snapping) --------- Co-authored-by: github-actions <github-actions@github.com> Co-authored-by: Christian Byrne <cbyrne@comfy.org> Co-authored-by: GitHub Action <action@github.com>
This commit is contained in:
@@ -3319,7 +3319,15 @@ export class LGraphCanvas
|
||||
|
||||
if (slot && linkConnector.isInputValidDrop(node, slot)) {
|
||||
highlightInput = slot
|
||||
highlightPos = node.getInputSlotPos(slot)
|
||||
if (LiteGraph.vueNodesMode) {
|
||||
const idx = node.inputs.indexOf(slot)
|
||||
highlightPos =
|
||||
idx !== -1
|
||||
? getSlotPosition(node, idx, true)
|
||||
: node.getInputSlotPos(slot)
|
||||
} else {
|
||||
highlightPos = node.getInputSlotPos(slot)
|
||||
}
|
||||
linkConnector.overWidget = overWidget
|
||||
}
|
||||
}
|
||||
@@ -3331,7 +3339,9 @@ export class LGraphCanvas
|
||||
const result = node.findInputByType(firstLink.fromSlot.type)
|
||||
if (result) {
|
||||
highlightInput = result.slot
|
||||
highlightPos = node.getInputSlotPos(result.slot)
|
||||
highlightPos = LiteGraph.vueNodesMode
|
||||
? getSlotPosition(node, result.index, true)
|
||||
: node.getInputSlotPos(result.slot)
|
||||
}
|
||||
} else if (
|
||||
inputId != -1 &&
|
||||
@@ -3356,7 +3366,9 @@ export class LGraphCanvas
|
||||
if (inputId === -1 && outputId === -1) {
|
||||
const result = node.findOutputByType(firstLink.fromSlot.type)
|
||||
if (result) {
|
||||
highlightPos = node.getOutputPos(result.index)
|
||||
highlightPos = LiteGraph.vueNodesMode
|
||||
? getSlotPosition(node, result.index, false)
|
||||
: node.getOutputPos(result.index)
|
||||
}
|
||||
} else {
|
||||
// check if I have a slot below de mouse
|
||||
@@ -5730,7 +5742,9 @@ export class LGraphCanvas
|
||||
if (!node) continue
|
||||
|
||||
const startPos = firstReroute.pos
|
||||
const endPos = node.getInputPos(link.target_slot)
|
||||
const endPos: Point = LiteGraph.vueNodesMode
|
||||
? getSlotPosition(node, link.target_slot, true)
|
||||
: node.getInputPos(link.target_slot)
|
||||
const endDirection = node.inputs[link.target_slot]?.dir
|
||||
|
||||
firstReroute._dragging = true
|
||||
@@ -5749,7 +5763,9 @@ export class LGraphCanvas
|
||||
const node = graph.getNodeById(link.origin_id)
|
||||
if (!node) continue
|
||||
|
||||
const startPos = node.getOutputPos(link.origin_slot)
|
||||
const startPos: Point = LiteGraph.vueNodesMode
|
||||
? getSlotPosition(node, link.origin_slot, false)
|
||||
: node.getOutputPos(link.origin_slot)
|
||||
const endPos = reroute.pos
|
||||
const startDirection = node.outputs[link.origin_slot]?.dir
|
||||
|
||||
|
||||
Reference in New Issue
Block a user