From c69bc74713df00df4d42bda1a7af8a07ead23dd3 Mon Sep 17 00:00:00 2001 From: Rizumu Ayaka Date: Mon, 15 Dec 2025 22:40:29 +0800 Subject: [PATCH] fix: nodes2.0's combo widget does not respect "scale menus" setting --- .../useTransformCompatOverlayProps.ts | 24 +++++-- .../components/form/dropdown/FormDropdown.vue | 66 +++++++++++++++++-- 2 files changed, 80 insertions(+), 10 deletions(-) diff --git a/src/composables/useTransformCompatOverlayProps.ts b/src/composables/useTransformCompatOverlayProps.ts index f6a7e6672..aadaf0b86 100644 --- a/src/composables/useTransformCompatOverlayProps.ts +++ b/src/composables/useTransformCompatOverlayProps.ts @@ -1,6 +1,8 @@ import type { HintedString } from '@primevue/core' import { computed } from 'vue' +import { useSettingStore } from '@/platform/settings/settingStore' + /** * Options for configuring transform-compatible overlay props */ @@ -21,8 +23,11 @@ interface TransformCompatOverlayOptions { * * Vue nodes use CSS transforms for positioning/scaling. PrimeVue overlay * components (Select, MultiSelect, TreeSelect, etc.) teleport to document - * body by default, breaking transform inheritance. This composable provides - * the necessary props to keep overlays within their component elements. + * body by default, breaking transform inheritance. + * + * When LiteGraph.ContextMenu.Scaling is enabled, overlays are appended to + * 'self' to inherit canvas transforms and scale with the canvas. When disabled, + * overlays are appended to 'body' to maintain fixed size regardless of canvas zoom. * * @param overrides - Optional overrides for specific use cases * @returns Computed props object to spread on PrimeVue overlay components @@ -41,8 +46,15 @@ interface TransformCompatOverlayOptions { export function useTransformCompatOverlayProps( overrides: TransformCompatOverlayOptions = {} ) { - return computed(() => ({ - appendTo: 'self' as const, - ...overrides - })) + const settingStore = useSettingStore() + + return computed(() => { + const contextMenuScaling = settingStore.get('LiteGraph.ContextMenu.Scaling') + const appendTo = contextMenuScaling ? ('self' as const) : ('body' as const) + + return { + appendTo, + ...overrides + } + }) } diff --git a/src/renderer/extensions/vueNodes/widgets/components/form/dropdown/FormDropdown.vue b/src/renderer/extensions/vueNodes/widgets/components/form/dropdown/FormDropdown.vue index 670c054a4..b0746721d 100644 --- a/src/renderer/extensions/vueNodes/widgets/components/form/dropdown/FormDropdown.vue +++ b/src/renderer/extensions/vueNodes/widgets/components/form/dropdown/FormDropdown.vue @@ -1,5 +1,6 @@