From 4b1c165d43c39a06702b04f0c4f4b2c74b6f2ef7 Mon Sep 17 00:00:00 2001 From: Alexander Brown Date: Thu, 2 Oct 2025 17:20:31 -0700 Subject: [PATCH] Cleanup/Perf: Float32Array/Float64Array removal (#5877) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ## Summary Redoing https://github.com/Comfy-Org/ComfyUI_frontend/pull/5567, without the link rendering changes. ## Changes - **What**: Standardizing the Point/Size/Rect logic around numeric tuples instead of typed arrays. ## Review Focus Cutting here and going to continue in a second PR. Do the simpler types make sense? Do we want to keep the behavior of Rectangle as it is now? ┆Issue is synchronized with this [Notion page](https://www.notion.so/PR-5877-WIP-Float32Array-Float64Array-removal-27f6d73d36508169a39eff1e4a87a61c) by [Unito](https://www.unito.io) --------- Co-authored-by: filtered <176114999+webfiltered@users.noreply.github.com> Co-authored-by: github-actions --- .../fixtures/utils/litegraphUtils.ts | 3 +- ...vue-groups-create-group-chromium-linux.png | Bin 96934 -> 96876 bytes ...node-reroute-input-drag-chromium-linux.png | Bin 51637 -> 51561 bytes src/lib/litegraph/src/LGraphCanvas.ts | 73 +++++++++--------- src/lib/litegraph/src/LGraphGroup.ts | 13 +--- src/lib/litegraph/src/LGraphNode.ts | 21 +++-- src/lib/litegraph/src/LLink.ts | 5 +- src/lib/litegraph/src/Reroute.ts | 8 +- src/lib/litegraph/src/draw.ts | 4 +- .../src/infrastructure/ConstrainedSize.ts | 10 +-- .../litegraph/src/infrastructure/Rectangle.ts | 22 +++--- src/lib/litegraph/src/interfaces.ts | 49 +++--------- src/lib/litegraph/src/measure.ts | 30 +++---- src/lib/litegraph/src/node/NodeInputSlot.ts | 4 +- src/lib/litegraph/src/node/NodeOutputSlot.ts | 4 +- src/lib/litegraph/src/node/NodeSlot.ts | 7 +- .../src/subgraph/SubgraphSlotBase.ts | 6 +- src/lib/litegraph/test/LGraphNode.test.ts | 22 +++--- .../canvas/links/slotLinkPreviewRenderer.ts | 6 +- .../canvas/litegraph/litegraphLinkAdapter.ts | 33 ++++---- .../core/layout/sync/useLinkLayoutSync.ts | 6 +- .../vueNodes/components/NodeSlots.test.ts | 16 ++-- .../tests/litegraph/core/LGraphNode.test.ts | 18 ++--- .../core/__snapshots__/LGraph.test.ts.snap | 24 +++--- 24 files changed, 166 insertions(+), 218 deletions(-) diff --git a/browser_tests/fixtures/utils/litegraphUtils.ts b/browser_tests/fixtures/utils/litegraphUtils.ts index 4becc999c..0449d05e4 100644 --- a/browser_tests/fixtures/utils/litegraphUtils.ts +++ b/browser_tests/fixtures/utils/litegraphUtils.ts @@ -151,7 +151,8 @@ class NodeSlotReference { const convertedPos = window['app'].canvas.ds.convertOffsetToCanvas(rawPos) - // Debug logging - convert Float32Arrays to regular arrays for visibility + // Debug logging - convert Float64Arrays to regular arrays for visibility + // eslint-disable-next-line no-console console.log( `NodeSlotReference debug for ${type} slot ${index} on node ${id}:`, { diff --git a/browser_tests/tests/vueNodes/groups/groups.spec.ts-snapshots/vue-groups-create-group-chromium-linux.png b/browser_tests/tests/vueNodes/groups/groups.spec.ts-snapshots/vue-groups-create-group-chromium-linux.png index 8b65e56c3d02ac8213e2b22a642932c0d7f31d0e..db69117858d1eb3b7d7a9cb7aa969b2326bd65d2 100644 GIT binary patch delta 39773 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 z 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 literal 51637 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 diff --git a/src/lib/litegraph/src/LGraphCanvas.ts b/src/lib/litegraph/src/LGraphCanvas.ts index eb2ec3dd5..2ec731ff0 100644 --- a/src/lib/litegraph/src/LGraphCanvas.ts +++ b/src/lib/litegraph/src/LGraphCanvas.ts @@ -1,7 +1,6 @@ import { toString } from 'es-toolkit/compat' import { PREFIX, SEPARATOR } from '@/constants/groupNodeConstants' -import { LinkConnector } from '@/lib/litegraph/src/canvas/LinkConnector' import { type LinkRenderContext, LitegraphLinkAdapter @@ -17,6 +16,7 @@ import { LGraphGroup } from './LGraphGroup' import { LGraphNode, type NodeId, type NodeProperty } from './LGraphNode' import { LLink, type LinkId } from './LLink' import { Reroute, type RerouteId } from './Reroute' +import { LinkConnector } from './canvas/LinkConnector' import { isOverNodeInput, isOverNodeOutput } from './canvas/measureSlots' import { strokeShape } from './draw' import type { @@ -25,6 +25,7 @@ import type { } from './infrastructure/CustomEventTarget' import type { LGraphCanvasEventMap } from './infrastructure/LGraphCanvasEventMap' import { NullGraphError } from './infrastructure/NullGraphError' +import { Rectangle } from './infrastructure/Rectangle' import type { CanvasColour, ColorOption, @@ -47,12 +48,11 @@ import type { NullableProperties, Point, Positionable, - ReadOnlyPoint, ReadOnlyRect, Rect, Size } from './interfaces' -import { LiteGraph, Rectangle, SubgraphNode, createUuidv4 } from './litegraph' +import { LiteGraph } from './litegraph' import { containsRect, createBounds, @@ -67,6 +67,7 @@ import { NodeInputSlot } from './node/NodeInputSlot' import type { Subgraph } from './subgraph/Subgraph' import { SubgraphIONodeBase } from './subgraph/SubgraphIONodeBase' import type { SubgraphInputNode } from './subgraph/SubgraphInputNode' +import { SubgraphNode } from './subgraph/SubgraphNode' import type { SubgraphOutputNode } from './subgraph/SubgraphOutputNode' import type { CanvasPointerEvent, @@ -88,6 +89,7 @@ import type { IBaseWidget } from './types/widgets' import { alignNodes, distributeNodes, getBoundaryNodes } from './utils/arrange' import { findFirstNode, getAllNestedItems } from './utils/collections' import { resolveConnectingLinkColor } from './utils/linkColors' +import { createUuidv4 } from './utils/uuid' import type { UUID } from './utils/uuid' import { BaseWidget } from './widgets/BaseWidget' import { toConcreteWidget } from './widgets/widgetMap' @@ -228,6 +230,12 @@ const cursors = { NW: 'nwse-resize' } as const +// Optimised buffers used during rendering +const temp = new Rectangle() +const temp_vec2: Point = [0, 0] +const tmp_area = new Rectangle() +const margin_area = new Rectangle() +const link_bounding = new Rectangle() /** * This class is in charge of rendering one graph inside a canvas. And provides all the interaction required. * Valid callbacks are: onNodeSelected, onNodeDeselected, onShowNodePanel, onNodeDblClicked @@ -235,13 +243,6 @@ const cursors = { export class LGraphCanvas implements CustomEventDispatcher { - // Optimised buffers used during rendering - static #temp = new Float32Array(4) - static #temp_vec2 = new Float32Array(2) - static #tmp_area = new Float32Array(4) - static #margin_area = new Float32Array(4) - static #link_bounding = new Float32Array(4) - static DEFAULT_BACKGROUND_IMAGE = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGQAAABkCAIAAAD/gAIDAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAQBJREFUeNrs1rEKwjAUhlETUkj3vP9rdmr1Ysammk2w5wdxuLgcMHyptfawuZX4pJSWZTnfnu/lnIe/jNNxHHGNn//HNbbv+4dr6V+11uF527arU7+u63qfa/bnmh8sWLBgwYJlqRf8MEptXPBXJXa37BSl3ixYsGDBMliwFLyCV/DeLIMFCxYsWLBMwSt4Be/NggXLYMGCBUvBK3iNruC9WbBgwYJlsGApeAWv4L1ZBgsWLFiwYJmCV/AK3psFC5bBggULloJX8BpdwXuzYMGCBctgwVLwCl7Be7MMFixYsGDBsu8FH1FaSmExVfAxBa/gvVmwYMGCZbBg/W4vAQYA5tRF9QYlv/QAAAAASUVORK5CYII=' @@ -628,7 +629,7 @@ export class LGraphCanvas dirty_area?: Rect | null /** @deprecated Unused */ node_in_panel?: LGraphNode | null - last_mouse: ReadOnlyPoint = [0, 0] + last_mouse: Readonly = [0, 0] last_mouseclick: number = 0 graph: LGraph | Subgraph | null get _graph(): LGraph | Subgraph { @@ -2634,7 +2635,7 @@ export class LGraphCanvas pointer: CanvasPointer, node?: LGraphNode | undefined ): void { - const dragRect = new Float32Array(4) + const dragRect: Rect = [0, 0, 0, 0] dragRect[0] = e.canvasX dragRect[1] = e.canvasY @@ -3174,7 +3175,7 @@ export class LGraphCanvas LGraphCanvas.active_canvas = this this.adjustMouseEvent(e) - const mouse: ReadOnlyPoint = [e.clientX, e.clientY] + const mouse: Readonly = [e.clientX, e.clientY] this.mouse[0] = mouse[0] this.mouse[1] = mouse[1] const delta = [mouse[0] - this.last_mouse[0], mouse[1] - this.last_mouse[1]] @@ -4077,7 +4078,7 @@ export class LGraphCanvas this.setDirty(true) } - #handleMultiSelect(e: CanvasPointerEvent, dragRect: Float32Array) { + #handleMultiSelect(e: CanvasPointerEvent, dragRect: Rect) { // Process drag // Convert Point pair (pos, offset) to Rect const { graph, selectedItems, subgraph } = this @@ -4848,7 +4849,7 @@ export class LGraphCanvas } /** Get the target snap / highlight point in graph space */ - #getHighlightPosition(): ReadOnlyPoint { + #getHighlightPosition(): Readonly { return LiteGraph.snaps_for_comfy ? this.linkConnector.state.snapLinksPos ?? this._highlight_pos ?? @@ -4863,7 +4864,7 @@ export class LGraphCanvas */ #renderSnapHighlight( ctx: CanvasRenderingContext2D, - highlightPos: ReadOnlyPoint + highlightPos: Readonly ): void { const linkConnectorSnap = !!this.linkConnector.state.snapLinksPos if (!this._highlight_pos && !linkConnectorSnap) return @@ -5204,8 +5205,9 @@ export class LGraphCanvas // clip if required (mask) const shape = node._shape || RenderShape.BOX - const size = LGraphCanvas.#temp_vec2 - size.set(node.renderingSize) + const size = temp_vec2 + size[0] = node.renderingSize[0] + size[1] = node.renderingSize[1] if (node.collapsed) { ctx.font = this.inner_text_font @@ -5399,7 +5401,7 @@ export class LGraphCanvas : true // Normalised node dimensions - const area = LGraphCanvas.#tmp_area + const area = tmp_area area.set(node.boundingRect) area[0] -= node.pos[0] area[1] -= node.pos[1] @@ -5501,7 +5503,7 @@ export class LGraphCanvas item: Positionable, shape = RenderShape.ROUND ) { - const snapGuide = LGraphCanvas.#temp + const snapGuide = temp snapGuide.set(item.boundingRect) // Not all items have pos equal to top-left of bounds @@ -5548,10 +5550,10 @@ export class LGraphCanvas const now = LiteGraph.getTime() const { visible_area } = this - LGraphCanvas.#margin_area[0] = visible_area[0] - 20 - LGraphCanvas.#margin_area[1] = visible_area[1] - 20 - LGraphCanvas.#margin_area[2] = visible_area[2] + 40 - LGraphCanvas.#margin_area[3] = visible_area[3] + 40 + margin_area[0] = visible_area[0] - 20 + margin_area[1] = visible_area[1] - 20 + margin_area[2] = visible_area[2] + 40 + margin_area[3] = visible_area[3] + 40 // draw connections ctx.lineWidth = this.connections_width @@ -5772,18 +5774,13 @@ export class LGraphCanvas // Bounding box of all points (bezier overshoot on long links will be cut) const pointsX = points.map((x) => x[0]) const pointsY = points.map((x) => x[1]) - LGraphCanvas.#link_bounding[0] = Math.min(...pointsX) - LGraphCanvas.#link_bounding[1] = Math.min(...pointsY) - LGraphCanvas.#link_bounding[2] = - Math.max(...pointsX) - LGraphCanvas.#link_bounding[0] - LGraphCanvas.#link_bounding[3] = - Math.max(...pointsY) - LGraphCanvas.#link_bounding[1] + link_bounding[0] = Math.min(...pointsX) + link_bounding[1] = Math.min(...pointsY) + link_bounding[2] = Math.max(...pointsX) - link_bounding[0] + link_bounding[3] = Math.max(...pointsY) - link_bounding[1] // skip links outside of the visible area of the canvas - if ( - !overlapBounding(LGraphCanvas.#link_bounding, LGraphCanvas.#margin_area) - ) - return + if (!overlapBounding(link_bounding, margin_area)) return const start_dir = startDirection || LinkDirection.RIGHT const end_dir = endDirection || LinkDirection.LEFT @@ -5942,8 +5939,8 @@ export class LGraphCanvas */ renderLink( ctx: CanvasRenderingContext2D, - a: ReadOnlyPoint, - b: ReadOnlyPoint, + a: Readonly, + b: Readonly, link: LLink | null, skip_border: boolean, flow: number | null, @@ -5960,9 +5957,9 @@ export class LGraphCanvas /** When defined, render data will be saved to this reroute instead of the {@link link}. */ reroute?: Reroute /** Offset of the bezier curve control point from {@link a point a} (output side) */ - startControl?: ReadOnlyPoint + startControl?: Readonly /** Offset of the bezier curve control point from {@link b point b} (input side) */ - endControl?: ReadOnlyPoint + endControl?: Readonly /** Number of sublines (useful to represent vec3 or rgb) @todo If implemented, refactor calculations out of the loop */ num_sublines?: number /** Whether this is a floating link segment */ diff --git a/src/lib/litegraph/src/LGraphGroup.ts b/src/lib/litegraph/src/LGraphGroup.ts index f00f302e6..5d922dcf5 100644 --- a/src/lib/litegraph/src/LGraphGroup.ts +++ b/src/lib/litegraph/src/LGraphGroup.ts @@ -13,7 +13,7 @@ import type { Positionable, Size } from './interfaces' -import { LiteGraph } from './litegraph' +import { LiteGraph, Rectangle } from './litegraph' import { containsCentre, containsRect, @@ -40,15 +40,10 @@ export class LGraphGroup implements Positionable, IPinnable, IColorable { title: string font?: string font_size: number = LiteGraph.DEFAULT_GROUP_FONT || 24 - _bounding: Float32Array = new Float32Array([ - 10, - 10, - LGraphGroup.minWidth, - LGraphGroup.minHeight - ]) + _bounding = new Rectangle(10, 10, LGraphGroup.minWidth, LGraphGroup.minHeight) - _pos: Point = this._bounding.subarray(0, 2) - _size: Size = this._bounding.subarray(2, 4) + _pos: Point = this._bounding.pos + _size: Size = this._bounding.size /** @deprecated See {@link _children} */ _nodes: LGraphNode[] = [] _children: Set = new Set() diff --git a/src/lib/litegraph/src/LGraphNode.ts b/src/lib/litegraph/src/LGraphNode.ts index 25991f849..2de06cd91 100644 --- a/src/lib/litegraph/src/LGraphNode.ts +++ b/src/lib/litegraph/src/LGraphNode.ts @@ -37,7 +37,6 @@ import type { ISlotType, Point, Positionable, - ReadOnlyPoint, ReadOnlyRect, Rect, Size @@ -413,7 +412,7 @@ export class LGraphNode } /** @inheritdoc {@link renderArea} */ - #renderArea: Float32Array = new Float32Array(4) + #renderArea = new Rectangle() /** * Rect describing the node area, including shadows and any protrusions. * Determines if the node is visible. Calculated once at the start of every frame. @@ -434,7 +433,7 @@ export class LGraphNode } /** The offset from {@link pos} to the top-left of {@link boundingRect}. */ - get boundingOffset(): ReadOnlyPoint { + get boundingOffset(): Readonly { const { pos: [posX, posY], boundingRect: [bX, bY] @@ -442,10 +441,10 @@ export class LGraphNode return [posX - bX, posY - bY] } - /** {@link pos} and {@link size} values are backed by this {@link Rect}. */ - _posSize: Float32Array = new Float32Array(4) - _pos: Point = this._posSize.subarray(0, 2) - _size: Size = this._posSize.subarray(2, 4) + /** {@link pos} and {@link size} values are backed by this {@link Rectangle}. */ + _posSize = new Rectangle() + _pos: Point = this._posSize.pos + _size: Size = this._posSize.size public get pos() { return this._pos @@ -1653,7 +1652,7 @@ export class LGraphNode inputs ? inputs.filter((input) => !isWidgetInputSlot(input)).length : 1, outputs ? outputs.length : 1 ) - const size = out || new Float32Array([0, 0]) + const size = out ?? [0, 0] rows = Math.max(rows, 1) // although it should be graphcanvas.inner_text_font size const font_size = LiteGraph.NODE_TEXT_SIZE @@ -2004,13 +2003,13 @@ export class LGraphNode /** * returns the bounding of the object, used for rendering purposes - * @param out {Float32Array[4]?} [optional] a place to store the output, to free garbage + * @param out {Rect?} [optional] a place to store the output, to free garbage * @param includeExternal {boolean?} [optional] set to true to * include the shadow and connection points in the bounding calculation * @returns the bounding box in format of [topleft_cornerx, topleft_cornery, width, height] */ getBounding(out?: Rect, includeExternal?: boolean): Rect { - out ||= new Float32Array(4) + out ||= [0, 0, 0, 0] const rect = includeExternal ? this.renderArea : this.boundingRect out[0] = rect[0] @@ -3169,7 +3168,7 @@ export class LGraphNode * @returns the position */ getConnectionPos(is_input: boolean, slot_number: number, out?: Point): Point { - out ||= new Float32Array(2) + out ||= [0, 0] const { pos: [nodeX, nodeY], diff --git a/src/lib/litegraph/src/LLink.ts b/src/lib/litegraph/src/LLink.ts index 71b41f23d..2d7d5122f 100644 --- a/src/lib/litegraph/src/LLink.ts +++ b/src/lib/litegraph/src/LLink.ts @@ -14,6 +14,7 @@ import type { ISlotType, LinkNetwork, LinkSegment, + Point, ReadonlyLinkNetwork } from './interfaces' import type { @@ -109,7 +110,7 @@ export class LLink implements LinkSegment, Serialisable { data?: number | string | boolean | { toToolTip?(): string } _data?: unknown /** Centre point of the link, calculated during render only - can be inaccurate */ - _pos: Float32Array + _pos: Point /** @todo Clean up - never implemented in comfy. */ _last_time?: number /** The last canvas 2D path that was used to render this link */ @@ -171,7 +172,7 @@ export class LLink implements LinkSegment, Serialisable { this._data = null // center - this._pos = new Float32Array(2) + this._pos = [0, 0] } /** @deprecated Use {@link LLink.create} */ diff --git a/src/lib/litegraph/src/Reroute.ts b/src/lib/litegraph/src/Reroute.ts index 4ac682599..f1fb4a8a6 100644 --- a/src/lib/litegraph/src/Reroute.ts +++ b/src/lib/litegraph/src/Reroute.ts @@ -49,8 +49,6 @@ export class Reroute return Reroute.radius + gap + Reroute.slotRadius } - #malloc = new Float32Array(8) - /** The network this reroute belongs to. Contains all valid links and reroutes. */ #network: WeakRef @@ -73,7 +71,7 @@ export class Reroute /** This property is only defined on the last reroute of a floating reroute chain (closest to input end). */ floating?: FloatingRerouteSlot - #pos = this.#malloc.subarray(0, 2) + #pos: Point = [0, 0] /** @inheritdoc */ get pos(): Point { return this.#pos @@ -126,14 +124,14 @@ export class Reroute sin: number = 0 /** Bezier curve control point for the "target" (input) side of the link */ - controlPoint: Point = this.#malloc.subarray(4, 6) + controlPoint: Point = [0, 0] /** @inheritdoc */ path?: Path2D /** @inheritdoc */ _centreAngle?: number /** @inheritdoc */ - _pos: Float32Array = this.#malloc.subarray(6, 8) + _pos: Point = [0, 0] /** @inheritdoc */ _dragging?: boolean diff --git a/src/lib/litegraph/src/draw.ts b/src/lib/litegraph/src/draw.ts index 2b8987ef8..70c2e1d71 100644 --- a/src/lib/litegraph/src/draw.ts +++ b/src/lib/litegraph/src/draw.ts @@ -1,5 +1,5 @@ import type { Rectangle } from './infrastructure/Rectangle' -import type { CanvasColour, Rect } from './interfaces' +import type { CanvasColour } from './interfaces' import { LiteGraph } from './litegraph' import { RenderShape, TitleMode } from './types/globalEnums' @@ -67,7 +67,7 @@ interface IDrawTextInAreaOptions { */ export function strokeShape( ctx: CanvasRenderingContext2D, - area: Rect, + area: Rectangle, { shape = RenderShape.BOX, round_radius, diff --git a/src/lib/litegraph/src/infrastructure/ConstrainedSize.ts b/src/lib/litegraph/src/infrastructure/ConstrainedSize.ts index 3238e4d29..f0890fab9 100644 --- a/src/lib/litegraph/src/infrastructure/ConstrainedSize.ts +++ b/src/lib/litegraph/src/infrastructure/ConstrainedSize.ts @@ -1,10 +1,6 @@ import { clamp } from 'es-toolkit/compat' -import type { - ReadOnlyRect, - ReadOnlySize, - Size -} from '@/lib/litegraph/src/interfaces' +import type { ReadOnlyRect, Size } from '@/lib/litegraph/src/interfaces' /** * Basic width and height, with min/max constraints. @@ -55,7 +51,7 @@ export class ConstrainedSize { this.desiredHeight = height } - static fromSize(size: ReadOnlySize): ConstrainedSize { + static fromSize(size: Readonly): ConstrainedSize { return new ConstrainedSize(size[0], size[1]) } @@ -63,7 +59,7 @@ export class ConstrainedSize { return new ConstrainedSize(rect[2], rect[3]) } - setSize(size: ReadOnlySize): void { + setSize(size: Readonly): void { this.desiredWidth = size[0] this.desiredHeight = size[1] } diff --git a/src/lib/litegraph/src/infrastructure/Rectangle.ts b/src/lib/litegraph/src/infrastructure/Rectangle.ts index 65e0802d5..3c70369f1 100644 --- a/src/lib/litegraph/src/infrastructure/Rectangle.ts +++ b/src/lib/litegraph/src/infrastructure/Rectangle.ts @@ -1,9 +1,7 @@ import type { CompassCorners, Point, - ReadOnlyPoint, ReadOnlyRect, - ReadOnlySize, ReadOnlyTypedArray, Size } from '@/lib/litegraph/src/interfaces' @@ -21,8 +19,8 @@ import { isInRectangle } from '@/lib/litegraph/src/measure' * - {@link size}: The size of the rectangle. */ export class Rectangle extends Float64Array { - #pos: Point | undefined - #size: Size | undefined + #pos: Float64Array | undefined + #size: Float64Array | undefined constructor( x: number = 0, @@ -50,7 +48,7 @@ export class Rectangle extends Float64Array { * @returns A new rectangle whose centre is at {@link x} */ static fromCentre( - [x, y]: ReadOnlyPoint, + [x, y]: Readonly, width: number, height = width ): Rectangle { @@ -81,10 +79,10 @@ export class Rectangle extends Float64Array { */ get pos(): Point { this.#pos ??= this.subarray(0, 2) - return this.#pos! + return this.#pos! as unknown as Point } - set pos(value: ReadOnlyPoint) { + set pos(value: Readonly) { this[0] = value[0] this[1] = value[1] } @@ -96,10 +94,10 @@ export class Rectangle extends Float64Array { */ get size(): Size { this.#size ??= this.subarray(2, 4) - return this.#size! + return this.#size! as unknown as Size } - set size(value: ReadOnlySize) { + set size(value: Readonly) { this[2] = value[0] this[3] = value[1] } @@ -215,7 +213,7 @@ export class Rectangle extends Float64Array { * @param point The point to check * @returns `true` if {@link point} is inside this rectangle, otherwise `false`. */ - containsPoint([x, y]: ReadOnlyPoint): boolean { + containsPoint([x, y]: Readonly): boolean { const [left, top, width, height] = this return x >= left && x < left + width && y >= top && y < top + height } @@ -384,12 +382,12 @@ export class Rectangle extends Float64Array { } /** @returns The offset from the top-left of this rectangle to the point [{@link x}, {@link y}], as a new {@link Point}. */ - getOffsetTo([x, y]: ReadOnlyPoint): Point { + getOffsetTo([x, y]: Readonly): Point { return [x - this[0], y - this[1]] } /** @returns The offset from the point [{@link x}, {@link y}] to the top-left of this rectangle, as a new {@link Point}. */ - getOffsetFrom([x, y]: ReadOnlyPoint): Point { + getOffsetFrom([x, y]: Readonly): Point { return [this[0] - x, this[1] - y] } diff --git a/src/lib/litegraph/src/interfaces.ts b/src/lib/litegraph/src/interfaces.ts index d8f623712..f4b4888b9 100644 --- a/src/lib/litegraph/src/interfaces.ts +++ b/src/lib/litegraph/src/interfaces.ts @@ -194,7 +194,7 @@ export interface LinkSegment { /** The last canvas 2D path that was used to render this segment */ path?: Path2D /** Centre point of the {@link path}. Calculated during render only - can be inaccurate */ - readonly _pos: Float32Array + readonly _pos: Point /** * Y-forward along the {@link path} from its centre point, in radians. * `undefined` if using circles for link centres. @@ -226,52 +226,25 @@ export interface IFoundSlot extends IInputOrOutput { } /** A point represented as `[x, y]` co-ordinates */ -export type Point = [x: number, y: number] | Float32Array | Float64Array +export type Point = [x: number, y: number] /** A size represented as `[width, height]` */ -export type Size = [width: number, height: number] | Float32Array | Float64Array - -/** A very firm array */ -type ArRect = [x: number, y: number, width: number, height: number] +export type Size = [width: number, height: number] /** A rectangle starting at top-left coordinates `[x, y, width, height]` */ -export type Rect = ArRect | Float32Array | Float64Array - -/** A point represented as `[x, y]` co-ordinates that will not be modified */ -export type ReadOnlyPoint = - | readonly [x: number, y: number] - | ReadOnlyTypedArray - | ReadOnlyTypedArray - -/** A size represented as `[width, height]` that will not be modified */ -export type ReadOnlySize = - | readonly [width: number, height: number] - | ReadOnlyTypedArray - | ReadOnlyTypedArray +export type Rect = + | [x: number, y: number, width: number, height: number] + | Float64Array /** A rectangle starting at top-left coordinates `[x, y, width, height]` that will not be modified */ export type ReadOnlyRect = | readonly [x: number, y: number, width: number, height: number] - | ReadOnlyTypedArray | ReadOnlyTypedArray -type TypedArrays = - | Int8Array - | Uint8Array - | Uint8ClampedArray - | Int16Array - | Uint16Array - | Int32Array - | Uint32Array - | Float32Array - | Float64Array - -type TypedBigIntArrays = BigInt64Array | BigUint64Array -export type ReadOnlyTypedArray = - Omit< - Readonly, - 'fill' | 'copyWithin' | 'reverse' | 'set' | 'sort' | 'subarray' - > +export type ReadOnlyTypedArray = Omit< + Readonly, + 'fill' | 'copyWithin' | 'reverse' | 'set' | 'sort' | 'subarray' +> /** Union of property names that are of type Match */ type KeysOfType = Exclude< @@ -330,7 +303,7 @@ export interface INodeSlot extends HasBoundingRect { nameLocked?: boolean pos?: Point /** @remarks Automatically calculated; not included in serialisation. */ - boundingRect: Rect + boundingRect: ReadOnlyRect /** * A list of floating link IDs that are connected to this slot. * This is calculated at runtime; it is **not** serialized. diff --git a/src/lib/litegraph/src/measure.ts b/src/lib/litegraph/src/measure.ts index 1b44f325f..d6d81c83a 100644 --- a/src/lib/litegraph/src/measure.ts +++ b/src/lib/litegraph/src/measure.ts @@ -1,10 +1,4 @@ -import type { - HasBoundingRect, - Point, - ReadOnlyPoint, - ReadOnlyRect, - Rect -} from './interfaces' +import type { HasBoundingRect, Point, ReadOnlyRect, Rect } from './interfaces' import { Alignment, LinkDirection, hasFlag } from './types/globalEnums' /** @@ -13,7 +7,7 @@ import { Alignment, LinkDirection, hasFlag } from './types/globalEnums' * @param b Point b as `x, y` * @returns Distance between point {@link a} & {@link b} */ -export function distance(a: ReadOnlyPoint, b: ReadOnlyPoint): number { +export function distance(a: Readonly, b: Readonly): number { return Math.sqrt( (b[0] - a[0]) * (b[0] - a[0]) + (b[1] - a[1]) * (b[1] - a[1]) ) @@ -62,7 +56,7 @@ export function isInRectangle( * @returns `true` if the point is inside the rect, otherwise `false` */ export function isPointInRect( - point: ReadOnlyPoint, + point: Readonly, rect: ReadOnlyRect ): boolean { return ( @@ -289,8 +283,8 @@ export function rotateLink( * the right */ export function getOrientation( - lineStart: ReadOnlyPoint, - lineEnd: ReadOnlyPoint, + lineStart: Readonly, + lineEnd: Readonly, x: number, y: number ): number { @@ -310,10 +304,10 @@ export function getOrientation( */ export function findPointOnCurve( out: Point, - a: ReadOnlyPoint, - b: ReadOnlyPoint, - controlA: ReadOnlyPoint, - controlB: ReadOnlyPoint, + a: Readonly, + b: Readonly, + controlA: Readonly, + controlB: Readonly, t: number = 0.5 ): void { const iT = 1 - t @@ -331,7 +325,7 @@ export function createBounds( objects: Iterable, padding: number = 10 ): ReadOnlyRect | null { - const bounds = new Float32Array([Infinity, Infinity, -Infinity, -Infinity]) + const bounds: Rect = [Infinity, Infinity, -Infinity, -Infinity] for (const obj of objects) { const rect = obj.boundingRect @@ -382,7 +376,7 @@ export function alignToContainer( rect: Rect, anchors: Alignment, [containerX, containerY, containerWidth, containerHeight]: ReadOnlyRect, - [insetX, insetY]: ReadOnlyPoint = [0, 0] + [insetX, insetY]: Readonly = [0, 0] ): Rect { if (hasFlag(anchors, Alignment.Left)) { // Left @@ -425,7 +419,7 @@ export function alignOutsideContainer( rect: Rect, anchors: Alignment, [otherX, otherY, otherWidth, otherHeight]: ReadOnlyRect, - [outsetX, outsetY]: ReadOnlyPoint = [0, 0] + [outsetX, outsetY]: Readonly = [0, 0] ): Rect { if (hasFlag(anchors, Alignment.Left)) { // Left diff --git a/src/lib/litegraph/src/node/NodeInputSlot.ts b/src/lib/litegraph/src/node/NodeInputSlot.ts index 8a6af55e9..c8759da9d 100644 --- a/src/lib/litegraph/src/node/NodeInputSlot.ts +++ b/src/lib/litegraph/src/node/NodeInputSlot.ts @@ -5,7 +5,7 @@ import type { INodeInputSlot, INodeOutputSlot, OptionalProps, - ReadOnlyPoint + Point } from '@/lib/litegraph/src/interfaces' import { LiteGraph } from '@/lib/litegraph/src/litegraph' import { type IDrawOptions, NodeSlot } from '@/lib/litegraph/src/node/NodeSlot' @@ -32,7 +32,7 @@ export class NodeInputSlot extends NodeSlot implements INodeInputSlot { this.#widget = widget ? new WeakRef(widget) : undefined } - get collapsedPos(): ReadOnlyPoint { + get collapsedPos(): Readonly { return [0, LiteGraph.NODE_TITLE_HEIGHT * -0.5] } diff --git a/src/lib/litegraph/src/node/NodeOutputSlot.ts b/src/lib/litegraph/src/node/NodeOutputSlot.ts index a1120dd8e..95f20e443 100644 --- a/src/lib/litegraph/src/node/NodeOutputSlot.ts +++ b/src/lib/litegraph/src/node/NodeOutputSlot.ts @@ -5,7 +5,7 @@ import type { INodeInputSlot, INodeOutputSlot, OptionalProps, - ReadOnlyPoint + Point } from '@/lib/litegraph/src/interfaces' import { LiteGraph } from '@/lib/litegraph/src/litegraph' import { type IDrawOptions, NodeSlot } from '@/lib/litegraph/src/node/NodeSlot' @@ -24,7 +24,7 @@ export class NodeOutputSlot extends NodeSlot implements INodeOutputSlot { return false } - get collapsedPos(): ReadOnlyPoint { + get collapsedPos(): Readonly { return [ this.#node._collapsed_width ?? LiteGraph.NODE_COLLAPSED_WIDTH, LiteGraph.NODE_TITLE_HEIGHT * -0.5 diff --git a/src/lib/litegraph/src/node/NodeSlot.ts b/src/lib/litegraph/src/node/NodeSlot.ts index 48f0a443c..e7a2de382 100644 --- a/src/lib/litegraph/src/node/NodeSlot.ts +++ b/src/lib/litegraph/src/node/NodeSlot.ts @@ -8,8 +8,7 @@ import type { INodeSlot, ISubgraphInput, OptionalProps, - Point, - ReadOnlyPoint + Point } from '@/lib/litegraph/src/interfaces' import { LiteGraph, Rectangle } from '@/lib/litegraph/src/litegraph' import { getCentre } from '@/lib/litegraph/src/measure' @@ -36,7 +35,7 @@ export abstract class NodeSlot extends SlotBase implements INodeSlot { pos?: Point /** The offset from the parent node to the centre point of this slot. */ - get #centreOffset(): ReadOnlyPoint { + get #centreOffset(): Readonly { const nodePos = this.node.pos const { boundingRect } = this @@ -52,7 +51,7 @@ export abstract class NodeSlot extends SlotBase implements INodeSlot { } /** The center point of this slot when the node is collapsed. */ - abstract get collapsedPos(): ReadOnlyPoint + abstract get collapsedPos(): Readonly #node: LGraphNode get node(): LGraphNode { diff --git a/src/lib/litegraph/src/subgraph/SubgraphSlotBase.ts b/src/lib/litegraph/src/subgraph/SubgraphSlotBase.ts index 1634a769f..6faf59e80 100644 --- a/src/lib/litegraph/src/subgraph/SubgraphSlotBase.ts +++ b/src/lib/litegraph/src/subgraph/SubgraphSlotBase.ts @@ -12,7 +12,7 @@ import type { INodeOutputSlot, Point, ReadOnlyRect, - ReadOnlySize + Size } from '@/lib/litegraph/src/interfaces' import { LiteGraph } from '@/lib/litegraph/src/litegraph' import { SlotBase } from '@/lib/litegraph/src/node/SlotBase' @@ -45,7 +45,7 @@ export abstract class SubgraphSlot return LiteGraph.NODE_SLOT_HEIGHT } - readonly #pos: Point = new Float32Array(2) + readonly #pos: Point = [0, 0] readonly measurement: ConstrainedSize = new ConstrainedSize( SubgraphSlot.defaultHeight, @@ -133,7 +133,7 @@ export abstract class SubgraphSlot } } - measure(): ReadOnlySize { + measure(): Readonly { const width = LGraphCanvas._measureText?.(this.displayName) ?? 0 const { defaultHeight } = SubgraphSlot diff --git a/src/lib/litegraph/test/LGraphNode.test.ts b/src/lib/litegraph/test/LGraphNode.test.ts index ed7d15329..c57cd3029 100644 --- a/src/lib/litegraph/test/LGraphNode.test.ts +++ b/src/lib/litegraph/test/LGraphNode.test.ts @@ -84,8 +84,8 @@ describe('LGraphNode', () => { })) } node.configure(configureData) - expect(node.pos).toEqual(new Float32Array([50, 60])) - expect(node.size).toEqual(new Float32Array([70, 80])) + expect(node.pos).toEqual([50, 60]) + expect(node.size).toEqual([70, 80]) }) test('should configure inputs correctly', () => { @@ -266,7 +266,7 @@ describe('LGraphNode', () => { const node = new LGraphNode('TestNode') as unknown as Omit< LGraphNode, 'boundingRect' - > & { boundingRect: Float32Array } + > & { boundingRect: Float64Array } node.pos = [100, 100] node.size = [100, 100] node.boundingRect[0] = 100 @@ -335,7 +335,7 @@ describe('LGraphNode', () => { const node = new LGraphNode('TestNode') as unknown as Omit< LGraphNode, 'boundingRect' - > & { boundingRect: Float32Array } + > & { boundingRect: Float64Array } node.pos = [100, 100] node.size = [100, 100] node.boundingRect[0] = 100 @@ -367,7 +367,7 @@ describe('LGraphNode', () => { const node = new LGraphNode('TestNode') as unknown as Omit< LGraphNode, 'boundingRect' - > & { boundingRect: Float32Array } + > & { boundingRect: Float64Array } node.pos = [100, 100] node.size = [100, 100] node.boundingRect[0] = 100 @@ -400,7 +400,7 @@ describe('LGraphNode', () => { const node = new LGraphNode('TestNode') as unknown as Omit< LGraphNode, 'boundingRect' - > & { boundingRect: Float32Array } + > & { boundingRect: Float64Array } node.pos = [100, 100] node.size = [100, 100] node.boundingRect[0] = 100 @@ -571,7 +571,7 @@ describe('LGraphNode', () => { name: 'test_in', type: 'string', link: null, - boundingRect: new Float32Array([0, 0, 0, 0]) + boundingRect: [0, 0, 0, 0] } }) test('should return position based on title height when collapsed', () => { @@ -590,11 +590,11 @@ describe('LGraphNode', () => { test('should return default vertical position when input.pos is undefined and not collapsed', () => { node.flags.collapsed = false - const inputSlot2 = { + const inputSlot2: INodeInputSlot = { name: 'test_in_2', type: 'number', link: null, - boundingRect: new Float32Array([0, 0, 0, 0]) + boundingRect: [0, 0, 0, 0] } node.inputs = [inputSlot, inputSlot2] const slotIndex = 0 @@ -629,13 +629,13 @@ describe('LGraphNode', () => { name: 'in0', type: 'string', link: null, - boundingRect: new Float32Array([0, 0, 0, 0]) + boundingRect: [0, 0, 0, 0] } const input1: INodeInputSlot = { name: 'in1', type: 'number', link: null, - boundingRect: new Float32Array([0, 0, 0, 0]), + boundingRect: [0, 0, 0, 0], pos: [5, 45] } node.inputs = [input0, input1] diff --git a/src/renderer/core/canvas/links/slotLinkPreviewRenderer.ts b/src/renderer/core/canvas/links/slotLinkPreviewRenderer.ts index 281c9b42b..978b2c4f2 100644 --- a/src/renderer/core/canvas/links/slotLinkPreviewRenderer.ts +++ b/src/renderer/core/canvas/links/slotLinkPreviewRenderer.ts @@ -1,6 +1,6 @@ import type { LGraphCanvas } from '@/lib/litegraph/src/LGraphCanvas' import type { RenderLink } from '@/lib/litegraph/src/canvas/RenderLink' -import type { ReadOnlyPoint } from '@/lib/litegraph/src/interfaces' +import type { Point } from '@/lib/litegraph/src/interfaces' import { LinkDirection } from '@/lib/litegraph/src/types/globalEnums' import { resolveConnectingLinkColor } from '@/lib/litegraph/src/utils/linkColors' import { createLinkConnectorAdapter } from '@/renderer/core/canvas/links/linkConnectorAdapter' @@ -49,7 +49,7 @@ export function attachSlotLinkPreviewRenderer(canvas: LGraphCanvas) { const renderLinks = createLinkConnectorAdapter()?.renderLinks if (!renderLinks || renderLinks.length === 0) return - const to: ReadOnlyPoint = [pointer.canvas.x, pointer.canvas.y] + const to: Readonly = [pointer.canvas.x, pointer.canvas.y] ctx.save() for (const link of renderLinks) { const startDir = link.fromDirection ?? LinkDirection.RIGHT @@ -74,7 +74,7 @@ export function attachSlotLinkPreviewRenderer(canvas: LGraphCanvas) { canvas.onDrawForeground = patched } -function resolveRenderLinkOrigin(link: RenderLink): ReadOnlyPoint { +function resolveRenderLinkOrigin(link: RenderLink): Readonly { if (link.fromReroute) { const rerouteLayout = layoutStore.getRerouteLayout(link.fromReroute.id) if (rerouteLayout) { diff --git a/src/renderer/core/canvas/litegraph/litegraphLinkAdapter.ts b/src/renderer/core/canvas/litegraph/litegraphLinkAdapter.ts index da2e57b88..cc506eadc 100644 --- a/src/renderer/core/canvas/litegraph/litegraphLinkAdapter.ts +++ b/src/renderer/core/canvas/litegraph/litegraphLinkAdapter.ts @@ -8,10 +8,7 @@ */ import type { LLink } from '@/lib/litegraph/src/LLink' import type { Reroute } from '@/lib/litegraph/src/Reroute' -import type { - CanvasColour, - ReadOnlyPoint -} from '@/lib/litegraph/src/interfaces' +import type { CanvasColour, Point } from '@/lib/litegraph/src/interfaces' import { LiteGraph } from '@/lib/litegraph/src/litegraph' import { LinkDirection, @@ -24,7 +21,7 @@ import { type Direction, type LinkRenderData, type RenderContext as PathRenderContext, - type Point, + type Point as PointObj, type RenderMode } from '@/renderer/core/canvas/pathRenderer' import { layoutStore } from '@/renderer/core/layout/store/layoutStore' @@ -172,7 +169,7 @@ export class LitegraphLinkAdapter { * Critically: does nothing for CENTER/NONE directions (no case for them) */ private applySplineOffset( - point: Point, + point: PointObj, direction: LinkDirection, distance: number ): void { @@ -199,8 +196,8 @@ export class LitegraphLinkAdapter { */ renderLinkDirect( ctx: CanvasRenderingContext2D, - a: ReadOnlyPoint, - b: ReadOnlyPoint, + a: Readonly, + b: Readonly, link: LLink | null, skip_border: boolean, flow: number | boolean | null, @@ -210,8 +207,8 @@ export class LitegraphLinkAdapter { context: LinkRenderContext, extras: { reroute?: Reroute - startControl?: ReadOnlyPoint - endControl?: ReadOnlyPoint + startControl?: Readonly + endControl?: Readonly num_sublines?: number disabled?: boolean } = {} @@ -250,7 +247,7 @@ export class LitegraphLinkAdapter { ) const factor = 0.25 - const cps: Point[] = [] + const cps: PointObj[] = [] if (hasStartCtrl && hasEndCtrl) { // Both provided explicitly @@ -315,7 +312,7 @@ export class LitegraphLinkAdapter { // Copy calculated center position back to litegraph object // This is needed for hit detection and menu interaction if (linkData.centerPos) { - linkSegment._pos = linkSegment._pos || new Float32Array(2) + linkSegment._pos = linkSegment._pos || [0, 0] linkSegment._pos[0] = linkData.centerPos.x linkSegment._pos[1] = linkData.centerPos.y @@ -329,8 +326,8 @@ export class LitegraphLinkAdapter { if (this.enableLayoutStoreWrites && link && link.id !== -1) { // Calculate bounds and center only when writing const bounds = this.calculateLinkBounds( - [linkData.startPoint.x, linkData.startPoint.y] as ReadOnlyPoint, - [linkData.endPoint.x, linkData.endPoint.y] as ReadOnlyPoint, + [linkData.startPoint.x, linkData.startPoint.y] as Readonly, + [linkData.endPoint.x, linkData.endPoint.y] as Readonly, linkData ) const centerPos = linkData.centerPos || { @@ -365,8 +362,8 @@ export class LitegraphLinkAdapter { renderDraggingLink( ctx: CanvasRenderingContext2D, - from: ReadOnlyPoint, - to: ReadOnlyPoint, + from: Readonly, + to: Readonly, colour: CanvasColour, startDir: LinkDirection, endDir: LinkDirection, @@ -397,8 +394,8 @@ export class LitegraphLinkAdapter { * Includes padding for line width and control points */ private calculateLinkBounds( - startPos: ReadOnlyPoint, - endPos: ReadOnlyPoint, + startPos: Readonly, + endPos: Readonly, linkData: LinkRenderData ): Bounds { let minX = Math.min(startPos[0], endPos[0]) diff --git a/src/renderer/core/layout/sync/useLinkLayoutSync.ts b/src/renderer/core/layout/sync/useLinkLayoutSync.ts index b39f97b45..565022582 100644 --- a/src/renderer/core/layout/sync/useLinkLayoutSync.ts +++ b/src/renderer/core/layout/sync/useLinkLayoutSync.ts @@ -4,7 +4,7 @@ import { computed, ref, toValue } from 'vue' import type { LGraphCanvas } from '@/lib/litegraph/src/LGraphCanvas' import { LLink } from '@/lib/litegraph/src/LLink' import { Reroute } from '@/lib/litegraph/src/Reroute' -import type { ReadOnlyPoint } from '@/lib/litegraph/src/interfaces' +import type { Point } from '@/lib/litegraph/src/interfaces' import { LinkDirection } from '@/lib/litegraph/src/types/globalEnums' import { LitegraphLinkAdapter } from '@/renderer/core/canvas/litegraph/litegraphLinkAdapter' import type { LinkRenderContext } from '@/renderer/core/canvas/litegraph/litegraphLinkAdapter' @@ -113,7 +113,7 @@ export function useLinkLayoutSync() { // Special handling for floating input chain const isFloatingInputChain = !sourceNode && targetNode - const startControl: ReadOnlyPoint = isFloatingInputChain + const startControl: Readonly = isFloatingInputChain ? [0, 0] : [dist * reroute.cos, dist * reroute.sin] @@ -149,7 +149,7 @@ export function useLinkLayoutSync() { (endPos[1] - lastReroute.pos[1]) ** 2 ) const finalDist = Math.min(Reroute.maxSplineOffset, finalDistance * 0.25) - const finalStartControl: ReadOnlyPoint = [ + const finalStartControl: Readonly = [ finalDist * lastReroute.cos, finalDist * lastReroute.sin ] diff --git a/src/renderer/extensions/vueNodes/components/NodeSlots.test.ts b/src/renderer/extensions/vueNodes/components/NodeSlots.test.ts index ed8bb8ed2..c14eee6d8 100644 --- a/src/renderer/extensions/vueNodes/components/NodeSlots.test.ts +++ b/src/renderer/extensions/vueNodes/components/NodeSlots.test.ts @@ -93,16 +93,16 @@ const mountSlots = (nodeData: VueNodeData, readonly = false) => { describe('NodeSlots.vue', () => { it('filters out inputs with widget property and maps indexes correctly', () => { // Two inputs without widgets (object and string) and one with widget (filtered) - const inputObjNoWidget = { + const inputObjNoWidget: INodeInputSlot = { name: 'objNoWidget', type: 'number', - boundingRect: new Float32Array([0, 0, 0, 0]), + boundingRect: [0, 0, 0, 0], link: null } - const inputObjWithWidget = { + const inputObjWithWidget: INodeInputSlot = { name: 'objWithWidget', type: 'number', - boundingRect: new Float32Array([0, 0, 0, 0]), + boundingRect: [0, 0, 0, 0], widget: { name: 'objWithWidget' }, link: null } @@ -147,16 +147,16 @@ describe('NodeSlots.vue', () => { }) it('maps outputs and passes correct indexes', () => { - const outputObj = { + const outputObj: INodeOutputSlot = { name: 'outA', type: 'any', - boundingRect: new Float32Array([0, 0, 0, 0]), + boundingRect: [0, 0, 0, 0], links: [] } - const outputObjB = { + const outputObjB: INodeOutputSlot = { name: 'outB', type: 'any', - boundingRect: new Float32Array([0, 0, 0, 0]), + boundingRect: [0, 0, 0, 0], links: [] } const outputs: INodeOutputSlot[] = [outputObj, outputObjB] diff --git a/tests-ui/tests/litegraph/core/LGraphNode.test.ts b/tests-ui/tests/litegraph/core/LGraphNode.test.ts index 3eb38215f..be2828ec8 100644 --- a/tests-ui/tests/litegraph/core/LGraphNode.test.ts +++ b/tests-ui/tests/litegraph/core/LGraphNode.test.ts @@ -84,8 +84,8 @@ describe('LGraphNode', () => { })) } node.configure(configureData) - expect(node.pos).toEqual(new Float32Array([50, 60])) - expect(node.size).toEqual(new Float32Array([70, 80])) + expect(node.pos).toEqual(new Float64Array([50, 60])) + expect(node.size).toEqual(new Float64Array([70, 80])) }) test('should configure inputs correctly', () => { @@ -266,7 +266,7 @@ describe('LGraphNode', () => { const node = new LGraphNode('TestNode') as unknown as Omit< LGraphNode, 'boundingRect' - > & { boundingRect: Float32Array } + > & { boundingRect: Float64Array } node.pos = [100, 100] node.size = [100, 100] node.boundingRect[0] = 100 @@ -335,7 +335,7 @@ describe('LGraphNode', () => { const node = new LGraphNode('TestNode') as unknown as Omit< LGraphNode, 'boundingRect' - > & { boundingRect: Float32Array } + > & { boundingRect: Float64Array } node.pos = [100, 100] node.size = [100, 100] node.boundingRect[0] = 100 @@ -367,7 +367,7 @@ describe('LGraphNode', () => { const node = new LGraphNode('TestNode') as unknown as Omit< LGraphNode, 'boundingRect' - > & { boundingRect: Float32Array } + > & { boundingRect: Float64Array } node.pos = [100, 100] node.size = [100, 100] node.boundingRect[0] = 100 @@ -400,7 +400,7 @@ describe('LGraphNode', () => { const node = new LGraphNode('TestNode') as unknown as Omit< LGraphNode, 'boundingRect' - > & { boundingRect: Float32Array } + > & { boundingRect: Float64Array } node.pos = [100, 100] node.size = [100, 100] node.boundingRect[0] = 100 @@ -571,7 +571,7 @@ describe('LGraphNode', () => { name: 'test_in', type: 'string', link: null, - boundingRect: new Float32Array([0, 0, 0, 0]) + boundingRect: [0, 0, 0, 0] } }) test('should return position based on title height when collapsed', () => { @@ -590,11 +590,11 @@ describe('LGraphNode', () => { test('should return default vertical position when input.pos is undefined and not collapsed', () => { node.flags.collapsed = false - const inputSlot2 = { + const inputSlot2: INodeInputSlot = { name: 'test_in_2', type: 'number', link: null, - boundingRect: new Float32Array([0, 0, 0, 0]) + boundingRect: [0, 0, 0, 0] } node.inputs = [inputSlot, inputSlot2] const slotIndex = 0 diff --git a/tests-ui/tests/litegraph/core/__snapshots__/LGraph.test.ts.snap b/tests-ui/tests/litegraph/core/__snapshots__/LGraph.test.ts.snap index 1ce83fb46..30036328f 100644 --- a/tests-ui/tests/litegraph/core/__snapshots__/LGraph.test.ts.snap +++ b/tests-ui/tests/litegraph/core/__snapshots__/LGraph.test.ts.snap @@ -4,7 +4,7 @@ exports[`LGraph > supports schema v0.4 graphs > oldSchemaGraph 1`] = ` LGraph { "_groups": [ LGraphGroup { - "_bounding": Float32Array [ + "_bounding": Rectangle [ 20, 20, 1, @@ -12,11 +12,11 @@ LGraph { ], "_children": Set {}, "_nodes": [], - "_pos": Float32Array [ + "_pos": Float64Array [ 20, 20, ], - "_size": Float32Array [ + "_size": Float64Array [ 1, 3, ], @@ -39,11 +39,11 @@ LGraph { LGraphNode { "_collapsed_width": undefined, "_level": undefined, - "_pos": Float32Array [ + "_pos": Float64Array [ 10, 10, ], - "_posSize": Float32Array [ + "_posSize": Rectangle [ 10, 10, 140, @@ -51,7 +51,7 @@ LGraph { ], "_relative_id": undefined, "_shape": undefined, - "_size": Float32Array [ + "_size": Float64Array [ 140, 60, ], @@ -111,11 +111,11 @@ LGraph { "1": LGraphNode { "_collapsed_width": undefined, "_level": undefined, - "_pos": Float32Array [ + "_pos": Float64Array [ 10, 10, ], - "_posSize": Float32Array [ + "_posSize": Rectangle [ 10, 10, 140, @@ -123,7 +123,7 @@ LGraph { ], "_relative_id": undefined, "_shape": undefined, - "_size": Float32Array [ + "_size": Float64Array [ 140, 60, ], @@ -184,11 +184,11 @@ LGraph { LGraphNode { "_collapsed_width": undefined, "_level": undefined, - "_pos": Float32Array [ + "_pos": Float64Array [ 10, 10, ], - "_posSize": Float32Array [ + "_posSize": Rectangle [ 10, 10, 140, @@ -196,7 +196,7 @@ LGraph { ], "_relative_id": undefined, "_shape": undefined, - "_size": Float32Array [ + "_size": Float64Array [ 140, 60, ],