fix(links): remove drag-end offset in straight/linear modes by honoring CENTER/NONE as no-offset (#5520)

- Add 'none' direction to path renderer
- Map CENTER/NONE to 'none' in adapter
- Keep start-end offset intentional; end follows cursor exactly
- Preserve spline behavior and arrow rendering

Verified with typecheck; no visual changes outside dragging behavior.
This commit is contained in:
Benjamin Lu
2025-09-12 14:01:52 -07:00
committed by GitHub
parent 9aeeab9a9f
commit 29ad47d20f
2 changed files with 22 additions and 1 deletions

View File

@@ -208,6 +208,9 @@ export class LitegraphLinkAdapter {
return 'up'
case LinkDirection.DOWN:
return 'down'
case LinkDirection.CENTER:
case LinkDirection.NONE:
return 'none'
default:
return 'right'
}

View File

@@ -12,7 +12,7 @@ export interface Point {
y: number
}
export type Direction = 'left' | 'right' | 'up' | 'down'
export type Direction = 'left' | 'right' | 'up' | 'down' | 'none'
export type RenderMode = 'spline' | 'straight' | 'linear'
export type ArrowShape = 'triangle' | 'circle' | 'square'
@@ -255,6 +255,8 @@ export class CanvasPathRenderer {
case 'down':
innerA.y += l
break
case 'none':
break
}
switch (endDir) {
@@ -270,6 +272,8 @@ export class CanvasPathRenderer {
case 'down':
innerB.y += l
break
case 'none':
break
}
// Draw 4-point path: start -> innerA -> innerB -> end
@@ -306,6 +310,8 @@ export class CanvasPathRenderer {
case 'down':
innerA.y += l
break
case 'none':
break
}
switch (endDir) {
@@ -321,6 +327,8 @@ export class CanvasPathRenderer {
case 'down':
innerB.y += l
break
case 'none':
break
}
// Calculate midpoint using innerA/innerB positions (matching original)
@@ -399,6 +407,9 @@ export class CanvasPathRenderer {
return { x: 0, y: -distance }
case 'down':
return { x: 0, y: distance }
case 'none':
default:
return { x: 0, y: 0 }
}
}
@@ -473,6 +484,8 @@ export class CanvasPathRenderer {
case 'down':
pa.y += dist * factor
break
case 'none':
break
}
switch (endDirection) {
@@ -488,6 +501,8 @@ export class CanvasPathRenderer {
case 'down':
pb.y += dist * factor
break
case 'none':
break
}
// Calculate bezier point (matching original computeConnectionPoint)
@@ -608,6 +623,9 @@ export class CanvasPathRenderer {
return 'down'
case 'down':
return 'up'
case 'none':
default:
return 'none'
}
}