Commit Graph

268 Commits

Author SHA1 Message Date
filtered
8e414ab133 [Refactor] Abstract legacy link colour properties (#972)
Replaces colour context interface with a simple abstraction object /
interface.
2025-04-26 20:31:43 +00:00
filtered
5c41e4e09c Add virtual slots to Reroutes (#970)
### Virtual helper "slots"

Adds a virtual input and output slot to native reroutes, allowing links
to be dragged from them to other reroutes or nodes.


https://github.com/user-attachments/assets/67d308c4-4732-4b04-a2b9-0a2b0c79b413

### Notes

- Reroute slots automatically show an outline as the pointer gets close
- When the slot is clickable, it will highlight in the same colour as
the reroute
- Enables opposite direction connecting: from reroute to node outputs
- Floating reroutes only show one slot - to whichever side is not
connected
2025-04-27 03:00:01 +10:00
filtered
38dd58ae23 Fix new link follows pointer until context menu closed (#968)
- Resolves https://github.com/Comfy-Org/ComfyUI_frontend/issues/3618
2025-04-26 02:33:28 +10:00
filtered
63407abf3c Reduce input socket hitbox for widgets (#966)
Restores the full left-arrow button click area for widgets. Previously
lost ~5 canvas pixels to clicks intercepted by input sockets.

Supporting refactors:
- Maps concrete node slot impls. to private array, once per frame
- Converts slot boundingRect to use absolute canvas pos (same as other
elements)
- Stores parent node ref in concrete slot classes
2025-04-25 14:12:09 +00:00
filtered
080a8da8f4 Overhaul node computeSize - use actual text width (#962)
### Node resize overhaul

- Precisely calculates node minimum size
- Prevents input & output overlap
- Prevents (normal*) widgets from rendering text over the edge of nodes
- Performance impact was sub-millisecond for normal usage in a 500-node
graph


![image](https://github.com/user-attachments/assets/5b6a6cc7-a752-4d7e-bcdf-b4bc8df26c51)

_Minimum size for a few example node configurations_

### Widgets

- Converts hard-coded draw render values to class static properties
- Adds widget button draw function for left/right arrow widgets

_*_ Exception: `control_after_generate`, as it is not a true input /
widget. A check may be added later to handle this special case.
2025-04-25 00:31:34 +10:00
filtered
d70260615b [Refactor] Split NodeSlot out to separate files (#960)
Split files only; no code changes.  New files moved to `/node`.
2025-04-23 14:43:55 +00:00
filtered
21a3f56187 [API] Allow new node to be created without links (#947)
When using the Add Node context menus, allows consumers to prevent new
nodes from being linked.

- Related: #946
2025-04-20 10:55:52 +00:00
filtered
a76c50252b Fix part of snapped link follows pointer (#945)
Removes the green circle that always follows the pointer, even when a
link is snapped elsewhere.
2025-04-20 08:52:01 +00:00
filtered
c607c53543 [API] Return ContextMenu created for connecting link (#944)
Allows further customisation / hooks of the created ContextMenu.
2025-04-20 18:50:42 +10:00
filtered
b988238155 [Cleanup] Assorted minor code clean-up (#943)
Adds one warning log for an extreme edge case.
2025-04-20 08:35:45 +00:00
filtered
ce46f19de9 Fix LinkConnector methods cannot be cancelled via API (#934)
- Checks if `e.preventDefault()` has been called for all cancellable
LinkConnector callbacks
- Sets `cancelable: true` on dispatched events
- Dedupes canvas pointer calls
2025-04-18 20:50:33 +10:00
filtered
297b557b94 [Refactor] Rename layout method to arrange/measure (#911)
Prefer verb function names.
2025-04-09 07:49:41 +00:00
Chenlei Hu
d77100c401 [Refactor] Add LGraphNode.layout (#907)
Moves layout of LGraphNode slot and widget to `LGraphNode.layout`.
Codesearch shows that there is currently no usage on posY arg, so we can
just pass null to it instead.
https://cs.comfy.org/search?q=context:global+drawNodeWidgets&patternType=keyword&sm=0
2025-04-07 15:40:58 -04:00
filtered
079a18a391 Reland "Support associated socket for widgets" (#904)
- Reverts Comfy-Org/litegraph.js#896
- Relands #891
2025-04-06 11:35:42 -04:00
filtered
3815296ab5 Add Disconnect Links option to input slot menu (#901) 2025-04-06 15:22:19 +00:00
filtered
3b5cc8cd19 Add alt-right-click to delete reroutes (#899)
Alt-right-click to remove, regular right-click to show context menu.
2025-04-06 14:55:17 +00:00
filtered
6cafeeff19 Fix corruption of selected link highlights (#897)
Occurred when deselecting one side of a link when both sides were
selected.
2025-04-06 14:30:22 +00:00
filtered
7360e09172 Standardise right-click behaviour (#894)
- Uses CanvasPointer click to open context menu (formerly occurred on
`pointerdown`)
- Frees up right-click & drag to be used by future features
- Right-clicking a reroute now selects the reroute, using the same
selection logic used for right-clicking nodes
2025-04-06 13:31:09 +00:00
filtered
ee625b4112 Revert "Support associated socket for widgets" (#896)
Reverts Comfy-Org/litegraph.js#891

Temporary revert to unblock other PRs (causing test failures; frontend
PR for this has not yet been merged).
2025-04-06 12:38:18 +00:00
Chenlei Hu
1ef4921c0a Support associated socket for widgets (#891)
This PR is the litegraph side change necessary for widget sockets
feature in ComfyUI_frontend. Changes include

- Add readonly `Widget.computedDisabled` property for getting the
computed disabled state. When the associated socket is connected, the
widget is disabled
- Dynamically show the associated socket when
      - the mouse is over the widget
      - the slot is valid during link drop
      - the slot is connected
- Removes the legacy widget drop behavior

Ref: https://github.com/Comfy-Org/rfcs/pull/9
2025-04-05 16:29:37 -04:00
Chenlei Hu
30a7f19a64 Upstream progressbar rendering (#871)
Upstreams progress bar rendering from ComfyUI_frontend.
2025-03-30 17:14:09 -04:00
Chenlei Hu
854ac4350f Add LGraphNode.strokeStyles API (#868)
This should allow frontend drop the stroke logic in hijack of
`drawNodeShape`. Example usage:

```ts
node.strokeStyles["executionError"] = (this: LGraphNode) => 
  app.lastNodeErrors?.[this.id] ? { colour: 'red', thickness: 2 } : undefined
```
2025-03-30 11:29:37 -04:00
Chenlei Hu
27a2b785ac [Cleanup] Remove use_legacy_node_error_indicator (#867)
The fallback option was added in
https://github.com/Comfy-Org/litegraph.js/pull/358. So far no code is
using this legacy fallback option. Removing it now.
2025-03-30 10:30:39 -04:00
Chenlei Hu
808d78169b Early return in LGraphCanvas.deselectAll (#856)
Avoid trigger `onSelectionChange` when nothing is selected.
2025-03-25 10:22:40 -04:00
filtered
b1462a6274 [API] Add customisation of reroute bezier controls (#846)
Allows globally setting the bezier control point offset from the reroute
centre point. This can be increased to allow larger curves on longer
links, or set to 0 to completely disable the spline on inter-reroute
link segments.
2025-03-24 06:10:57 +00:00
filtered
642317f6bd Reroute link styles (#845)
Improves linear & straight link styles to work with native reroutes
2025-03-24 13:31:43 +11:00
filtered
05587d8a19 Fix moving existing links can result in loopback (#838)
Prevents nodes connecting links to themselves when moving existing
links.

If moving multiple links with reroutes, this will instead _reconnect_
any links that would become loopbacks, only without any rereoutes.
2025-03-23 19:00:55 +00:00
filtered
b254bae5c5 Allow floating reroutes to be chained when creating new (#828)
- Resolves #827
2025-03-23 07:38:11 +11:00
filtered
2e95ac9a71 Fix minor render issues with links / reroutes (#825)
- Fixes link centre marker highlight drawn over dragged items
- Fixes arrow-style link centre marker drawn twice
- Adds missing centre markers for output floating links
- Adds render sort order for reroutes (more links rendered on top)
2025-03-23 06:36:14 +11:00
filtered
16eddaac5f Render floating links as faded out (#826)
- Resolves #806
- Renders floating links with a faded-out effect
2025-03-23 06:35:58 +11:00
filtered
2dbd5f4cf0 Allow creating floating reroutes from new link menu (#818)
Adds an `Add Reroute` option to the new link menu. Creates a new
floating reroute connected to the source slot.
2025-03-22 09:23:20 +11:00
filtered
850d1b9652 [API] Finalise LinkConnector design, adding reroute logic (#817)
- Splits link connect logic out of `LinkConnector` to individual
`RenderLink` classes
- Add support for connecting / reconnecting reroutes in various
configurations
- Adds support for moving existing floating links from outputs / inputs
- Fixes numerous corruption issues when reconnecting reroutes / moving
links
- Tests in separate PR #816
2025-03-21 19:41:20 +00:00
filtered
87aeab16a0 [API] Fix several floating links issues & add Reroute.totalLinks (#815)
Resolves several issues with floating links.  Highlights:

- Caches floating links on slots, removing some loop checks (inefficient
/ does not scale)
- Simpler APIs
- Adds `Reroute.totalLinks` (regular and floating
2025-03-21 19:17:54 +00:00
filtered
38bbf2fead 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.
2025-03-21 19:05:09 +00:00
filtered
cdbc0fa5e5 Cancel link connection by pressing Esc (#811)
Cancels connecting links if the escape key is pressed.
2025-03-21 18:53:13 +00:00
filtered
4078e3ad8b Improve reroutes - prep for LinkConnector overhaul (#810)
- Fixes TS types
- Various bug fixes for reroute / link (re)connect
- Adds reroute snap circle when connecting links
- Validates reroutes on drop (part of larger work)
- Prevent nodes linking to themselves
2025-03-21 18:47:36 +00:00
filtered
3447ea1981 Remove unused code (#789)
'start' and 'finish' do not exist on canvas 2d context.
2025-03-16 04:37:34 +00:00
filtered
9b16144390 [CodeHealth] Standardise & remove deprecated code (#787)
- Removes event.keyCode use (i18n-safe)
- Prefer strict equality for readability
2025-03-15 03:15:38 +00:00
filtered
cd65c4bfea Fix regression in #782 undo fails via context menu (#785)
Only breaks when adding reroute via context menu.
2025-03-14 03:09:17 +00:00
filtered
bd17247b4f Centre reroutes spawned via link context menu (#782)
- Centre reroutes spawned via link context menu
- Fix changeTracker history for reroute context menu
2025-03-14 12:46:40 +11:00
filtered
b80e1744be Snap to reroute when connecting links (#778)
Add basic snap to reroute on hover; reuses existing slot visual.
2025-03-14 00:18:17 +00:00
filtered
034692120e [Refactor] Replace deprecated getConnectionPos (#776)
Uses `getInputPos` or `getOutputPos` where appropriate.
2025-03-13 22:19:28 +00:00
filtered
e6a914117b Add floating reroutes (#773)
### Floating reroutes

Native reroutes can now be kept in a disconnected state.

Link chains may be kept provided they are connected to _either_ an input
or an output. By design, reroutes will be automatically removed if both
sides are disconnected.
2025-03-13 19:56:57 +00:00
filtered
18811f50fc Add serialisation support for floating links (#771)
Adds the serialisation code to support the new floating links impl.
2025-03-13 15:20:14 +00:00
filtered
486c5ad6c0 [Refactor] Split link render code to private method (#765)
- Enables floating reroutes
- Allows rendering logic for a chain of reroutes to be called without a
real `LLink` connected to an input
- Deprecates unused `visible_links` array
2025-03-13 00:00:52 +00:00
filtered
6805643204 Snap to widget - fast widget conversion (#758)
- Initial basic impl.
- Tracking issue for proper impl. #757
2025-03-11 19:28:15 +00:00
filtered
27873d0351 [Cleanup] Remove duplicate code (#754)
- Removes null widget skip - this _should_ throw
- Removes widget locator that was on LGraphCanvas - canvas should not
functions that find things in graph space.
2025-03-11 16:41:37 +00:00
filtered
a7f2ff16a9 [TS] Remove optional from widget y and type (#752)
- Fixes widget `type` marked as optional - it is required
- Fixes widget `y` marked as optional - now initialised to 0
2025-03-11 15:46:10 +00:00
filtered
f6c605434b Fix fast widget connect indicator (#751)
Remains as visual artifact when pointer leaves widget.
2025-03-11 14:49:19 +00:00
filtered
314095a3c1 Enable reroutes globally (#747)
Removes the opt-in to enable flag for reroutes, which are now a
permanent feature.
2025-03-11 12:43:59 +00:00