fix bounds collection when vue nodes turned off

This commit is contained in:
bymyself
2025-09-09 19:18:39 -07:00
parent ea9c1215a3
commit ed94827978

View File

@@ -3,7 +3,9 @@ import type { Ref } from 'vue'
import { useCanvasTransformSync } from '@/composables/canvas/useCanvasTransformSync'
import { useSelectedLiteGraphItems } from '@/composables/canvas/useSelectedLiteGraphItems'
import { useVueFeatureFlags } from '@/composables/useVueFeatureFlags'
import type { ReadOnlyRect } from '@/lib/litegraph/src/interfaces'
import { LGraphNode } from '@/lib/litegraph/src/litegraph'
import { layoutStore } from '@/renderer/core/layout/store/layoutStore'
import { useCanvasStore } from '@/stores/graphStore'
import { computeUnionBounds } from '@/utils/mathUtil'
@@ -18,6 +20,7 @@ export function useSelectionToolboxPosition(
const canvasStore = useCanvasStore()
const lgCanvas = canvasStore.getCanvas()
const { getSelectableItems } = useSelectedLiteGraphItems()
const { shouldRenderVueNodes } = useVueFeatureFlags()
// World position of selection center
const worldPosition = ref({ x: 0, y: 0 })
@@ -37,17 +40,31 @@ export function useSelectionToolboxPosition(
visible.value = true
// Get bounds from layout store for all selected items
const allBounds: ReadOnlyRect[] = Array.from(selectableItems)
.filter((item) => typeof item.id === 'string')
.map((item) => layoutStore.getNodeLayoutRef(item.id as string).value)
.filter((layout) => layout !== null)
.map((layout) => [
layout.bounds.x,
layout.bounds.y,
layout.bounds.width,
layout.bounds.height
])
// Get bounds for all selected items
const allBounds: ReadOnlyRect[] = []
for (const item of selectableItems) {
// Skip items without valid IDs
if (item.id == null) continue
if (shouldRenderVueNodes.value && typeof item.id === 'string') {
// Use layout store for Vue nodes (only works with string IDs)
const layout = layoutStore.getNodeLayoutRef(item.id).value
if (layout) {
allBounds.push([
layout.bounds.x,
layout.bounds.y,
layout.bounds.width,
layout.bounds.height
])
}
} else {
// Fallback to LiteGraph bounds for regular nodes or non-string IDs
if (item instanceof LGraphNode) {
const bounds = item.getBounding()
allBounds.push([bounds[0], bounds[1], bounds[2], bounds[3]] as const)
}
}
}
// Compute union bounds
const unionBounds = computeUnionBounds(allBounds)