mirror of
https://github.com/Comfy-Org/ComfyUI_frontend.git
synced 2026-05-01 19:51:54 +00:00
## 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 <github-actions@github.com>
76 lines
1.7 KiB
TypeScript
76 lines
1.7 KiB
TypeScript
import { clamp } from 'es-toolkit/compat'
|
|
|
|
import type { ReadOnlyRect, Size } from '@/lib/litegraph/src/interfaces'
|
|
|
|
/**
|
|
* Basic width and height, with min/max constraints.
|
|
*
|
|
* - The {@link width} and {@link height} properties are readonly
|
|
* - Size is set via {@link desiredWidth} and {@link desiredHeight} properties
|
|
* - Width and height are then updated, clamped to min/max values
|
|
*/
|
|
export class ConstrainedSize {
|
|
#width: number = 0
|
|
#height: number = 0
|
|
#desiredWidth: number = 0
|
|
#desiredHeight: number = 0
|
|
|
|
minWidth: number = 0
|
|
minHeight: number = 0
|
|
maxWidth: number = Infinity
|
|
maxHeight: number = Infinity
|
|
|
|
get width() {
|
|
return this.#width
|
|
}
|
|
|
|
get height() {
|
|
return this.#height
|
|
}
|
|
|
|
get desiredWidth() {
|
|
return this.#desiredWidth
|
|
}
|
|
|
|
set desiredWidth(value: number) {
|
|
this.#desiredWidth = value
|
|
this.#width = clamp(value, this.minWidth, this.maxWidth)
|
|
}
|
|
|
|
get desiredHeight() {
|
|
return this.#desiredHeight
|
|
}
|
|
|
|
set desiredHeight(value: number) {
|
|
this.#desiredHeight = value
|
|
this.#height = clamp(value, this.minHeight, this.maxHeight)
|
|
}
|
|
|
|
constructor(width: number, height: number) {
|
|
this.desiredWidth = width
|
|
this.desiredHeight = height
|
|
}
|
|
|
|
static fromSize(size: Readonly<Size>): ConstrainedSize {
|
|
return new ConstrainedSize(size[0], size[1])
|
|
}
|
|
|
|
static fromRect(rect: ReadOnlyRect): ConstrainedSize {
|
|
return new ConstrainedSize(rect[2], rect[3])
|
|
}
|
|
|
|
setSize(size: Readonly<Size>): void {
|
|
this.desiredWidth = size[0]
|
|
this.desiredHeight = size[1]
|
|
}
|
|
|
|
setValues(width: number, height: number): void {
|
|
this.desiredWidth = width
|
|
this.desiredHeight = height
|
|
}
|
|
|
|
toSize(): Size {
|
|
return [this.#width, this.#height]
|
|
}
|
|
}
|