handle opacity setting

This commit is contained in:
bymyself
2025-09-27 11:16:59 -07:00
parent 42c130d071
commit 481aa8252d
3 changed files with 26 additions and 50 deletions

View File

@@ -28,18 +28,6 @@ test.describe('Vue Node Custom Colors', () => {
await expect(comfyPage.canvas).toHaveScreenshot(
'vue-node-custom-color-blue.png'
)
// Verify actual DOM properties for header and body colors
const nodeHeader = loadCheckpointNode.locator(
'[data-testid^="node-header-"]'
)
const nodeBody = loadCheckpointNode
// Header should have blue header color (#223)
await expect(nodeHeader).toHaveCSS('background-color', 'rgb(34, 34, 51)')
// Node body should have blue body color (#335)
await expect(nodeBody).toHaveCSS('background-color', 'rgb(51, 51, 85)')
})
// TODO: implement loading node colors from workflow in Vue system

View File

@@ -35,7 +35,8 @@
{
transform: `translate(${position.x ?? 0}px, ${(position.y ?? 0) - LiteGraph.NODE_TITLE_HEIGHT}px)`,
zIndex: zIndex,
backgroundColor: nodeBodyBackgroundColor
backgroundColor: nodeBodyBackgroundColor,
opacity: nodeOpacity
},
dragStyle
]"
@@ -233,34 +234,29 @@ const muted = computed((): boolean => nodeData.mode === 2) // NEVER mode
// Node body background color that exactly replicates LiteGraph's drawNode logic
const nodeBodyBackgroundColor = computed(() => {
const colorPaletteStore = useColorPaletteStore()
const settingStore = useSettingStore()
// This replicates the drawNode logic for bgColor
let bgColor = nodeData.bgcolor || '' // matches: old_bgcolor || LiteGraph.NODE_DEFAULT_BGCOLOR
if (!bgColor) return '' // No color to adjust
// Apply the exact same adjustments as the drawNode monkey patch
const adjustments: { lightness?: number; opacity?: number } = {}
// 1. Apply opacity setting (same as drawNode)
const opacity = settingStore.get('Comfy.Node.Opacity')
if (opacity) adjustments.opacity = opacity
// 2. Apply light theme background lightening (same as drawNode)
if (colorPaletteStore.completedActivePalette.light_theme) {
// Apply light theme background lightening (same as drawNode)
if (
colorPaletteStore.completedActivePalette.light_theme &&
nodeData.bgcolor
) {
// This matches: "if (old_bgcolor) adjustments.lightness = 0.5"
adjustments.lightness = 0.5
}
// Apply all adjustments at once: node.bgcolor = adjustColor(bgColor, adjustments)
if (Object.keys(adjustments).length > 0) {
bgColor = adjustColor(bgColor, adjustments)
bgColor = adjustColor(bgColor, { lightness: 0.5 })
}
return bgColor
})
// Node opacity applied to ALL nodes (colored and non-colored) to match LiteGraph
const nodeOpacity = computed(() => {
const settingStore = useSettingStore()
const opacity = settingStore.get('Comfy.Node.Opacity')
return opacity || 1 // Default to fully opaque if no setting
})
// Use canvas interactions for proper wheel event handling and pointer event capture control
const { handleWheel, shouldHandleNodePointerEvents } = useCanvasInteractions()

View File

@@ -129,35 +129,27 @@ const tooltipConfig = computed(() => {
// Header style that exactly replicates LiteGraph's drawNode monkey patch logic
const headerStyle = computed(() => {
if (!nodeData?.color) {
return { backgroundColor: '' } // Explicitly clear background color
}
const colorPaletteStore = useColorPaletteStore()
const settingStore = useSettingStore()
// Get opacity setting - applies to ALL nodes (colored and non-colored)
const opacity = settingStore.get('Comfy.Node.Opacity') || 1
if (!nodeData?.color) {
// Non-colored nodes: only apply opacity
return { backgroundColor: '', opacity }
}
// Start with the original color (same as old_color in drawNode)
let headerColor = nodeData.color
// Apply the exact same adjustments as the drawNode monkey patch
const adjustments: { lightness?: number; opacity?: number } = {}
// 1. Apply opacity setting (same as drawNode)
const opacity = settingStore.get('Comfy.Node.Opacity')
if (opacity) adjustments.opacity = opacity
// 2. Apply light theme adjustments (same as drawNode)
// Apply light theme adjustments for colored nodes
if (colorPaletteStore.completedActivePalette.light_theme) {
// This matches: "if (old_color) { node.color = adjustColor(old_color, { lightness: 0.5 }) }"
adjustments.lightness = 0.5
headerColor = adjustColor(headerColor, { lightness: 0.5 })
}
// Apply all adjustments at once (matching drawNode's approach)
if (Object.keys(adjustments).length > 0) {
headerColor = adjustColor(headerColor, adjustments)
}
return { backgroundColor: headerColor }
return { backgroundColor: headerColor, opacity }
})
const resolveTitle = (info: VueNodeData | undefined) => {