From 7bab620986a955dced04e028e5572bcac952ff3d Mon Sep 17 00:00:00 2001 From: Chenlei Hu Date: Wed, 19 Feb 2025 14:57:29 -0500 Subject: [PATCH] Fix IColorable.getColorOption (#551) * Fix IColorable.getColorOption * nit --- src/LGraphGroup.ts | 9 +++------ src/LGraphNode.ts | 12 +++++------- src/interfaces.ts | 7 +++++++ src/litegraph.ts | 4 ++++ 4 files changed, 19 insertions(+), 13 deletions(-) diff --git a/src/LGraphGroup.ts b/src/LGraphGroup.ts index adcc95cd6..028be7dbe 100644 --- a/src/LGraphGroup.ts +++ b/src/LGraphGroup.ts @@ -64,23 +64,20 @@ export class LGraphGroup implements Positionable, IPinnable, IColorable { : "#AAA" } - /** The color option used to set {@link color}. */ - #colorOption: ColorOption | null = null - /** @inheritdoc {@link IColorable.setColorOption} */ setColorOption(colorOption: ColorOption | null): void { if (colorOption == null) { delete this.color - this.#colorOption = null } else { this.color = colorOption.groupcolor - this.#colorOption = colorOption } } /** @inheritdoc {@link IColorable.getColorOption} */ getColorOption(): ColorOption | null { - return this.#colorOption + return Object.values(LGraphCanvas.node_colors).find( + colorOption => colorOption.groupcolor === this.color, + ) ?? null } /** Position of the group, as x,y co-ordinates in graph space */ diff --git a/src/LGraphNode.ts b/src/LGraphNode.ts index dfbf258c9..f0ff2f167 100644 --- a/src/LGraphNode.ts +++ b/src/LGraphNode.ts @@ -23,7 +23,7 @@ import type { import type { LGraph } from "./LGraph" import type { IBaseWidget, IWidget, TWidgetValue } from "./types/widgets" import type { ISerialisedNode } from "./types/serialisation" -import type { LGraphCanvas } from "./LGraphCanvas" +import { LGraphCanvas } from "./LGraphCanvas" import type { CanvasMouseEvent } from "./types/events" import type { DragAndScale } from "./DragAndScale" import type { RerouteId } from "./Reroute" @@ -236,25 +236,23 @@ export class LGraphNode implements Positionable, IPinnable, IColorable { return this.boxcolor || colState || LiteGraph.NODE_DEFAULT_BOXCOLOR } - /** The color option used to set {@link color} and {@link bgcolor}. */ - #colorOption: ColorOption | null = null - /** @inheritdoc {@link IColorable.setColorOption} */ setColorOption(colorOption: ColorOption | null): void { if (colorOption == null) { delete this.color delete this.bgcolor - this.#colorOption = null } else { this.color = colorOption.color this.bgcolor = colorOption.bgcolor - this.#colorOption = colorOption } } /** @inheritdoc {@link IColorable.getColorOption} */ getColorOption(): ColorOption | null { - return this.#colorOption + return Object.values(LGraphCanvas.node_colors).find( + colorOption => + colorOption.color === this.color && colorOption.bgcolor === this.bgcolor, + ) ?? null } exec_version: number diff --git a/src/interfaces.ts b/src/interfaces.ts index f0a0c72b3..250bae038 100644 --- a/src/interfaces.ts +++ b/src/interfaces.ts @@ -83,6 +83,13 @@ export interface IColorable { getColorOption(): ColorOption | null } +/** + * Checks if an object is an instance of {@link IColorable}. + */ +export const isColorable = (obj: unknown): obj is IColorable => { + return typeof obj === "object" && obj !== null && "setColorOption" in obj && "getColorOption" in obj +} + /** * An object that can be pinned. * diff --git a/src/litegraph.ts b/src/litegraph.ts index b2ab03fd8..1cfcfe2df 100644 --- a/src/litegraph.ts +++ b/src/litegraph.ts @@ -20,7 +20,9 @@ import type { Rect32, Size, ColorOption, + IColorable, } from "./interfaces" +import { isColorable } from "./interfaces" import type { SlotShape, LabelPosition, SlotDirection, SlotType } from "./draw" import type { IWidget } from "./types/widgets" import type { RenderShape, TitleMode } from "./types/globalEnums" @@ -72,6 +74,8 @@ export { Rect32, Size, ColorOption, + IColorable, + isColorable, } export { IWidget } export { LGraphBadge, BadgePosition }