mirror of
https://github.com/Comfy-Org/ComfyUI_frontend.git
synced 2026-04-26 17:30:07 +00:00
Make LGraphCanvas shallowReactive (#1169)
* Make LGraphCanvas shallowReactive * Restore canvas options after creation
This commit is contained in:
@@ -108,12 +108,12 @@ watchEffect(() => {
|
|||||||
watchEffect(() => {
|
watchEffect(() => {
|
||||||
if (!canvasStore.canvas) return
|
if (!canvasStore.canvas) return
|
||||||
|
|
||||||
if (canvasStore.draggingCanvas) {
|
if (canvasStore.canvas.dragging_canvas) {
|
||||||
canvasStore.canvas.canvas.style.cursor = 'grabbing'
|
canvasStore.canvas.canvas.style.cursor = 'grabbing'
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
if (canvasStore.readOnly) {
|
if (canvasStore.canvas.read_only) {
|
||||||
canvasStore.canvas.canvas.style.cursor = 'grab'
|
canvasStore.canvas.canvas.style.cursor = 'grab'
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -55,6 +55,7 @@ import { IWidget } from '@comfyorg/litegraph'
|
|||||||
import { useExtensionStore } from '@/stores/extensionStore'
|
import { useExtensionStore } from '@/stores/extensionStore'
|
||||||
import { KeyComboImpl, useKeybindingStore } from '@/stores/keybindingStore'
|
import { KeyComboImpl, useKeybindingStore } from '@/stores/keybindingStore'
|
||||||
import { useCommandStore } from '@/stores/commandStore'
|
import { useCommandStore } from '@/stores/commandStore'
|
||||||
|
import { shallowReactive } from 'vue'
|
||||||
|
|
||||||
export const ANIM_PREVIEW_WIDGET = '$$comfy_animation_preview'
|
export const ANIM_PREVIEW_WIDGET = '$$comfy_animation_preview'
|
||||||
|
|
||||||
@@ -1836,7 +1837,20 @@ export class ComfyApp {
|
|||||||
|
|
||||||
this.#addAfterConfigureHandler()
|
this.#addAfterConfigureHandler()
|
||||||
|
|
||||||
this.canvas = new LGraphCanvas(canvasEl, this.graph)
|
// Make LGraphCanvas shallow reactive so that any change on the root object
|
||||||
|
// triggers reactivity.
|
||||||
|
this.canvas = shallowReactive(
|
||||||
|
new LGraphCanvas(canvasEl, this.graph, {
|
||||||
|
skip_events: true,
|
||||||
|
skip_render: true
|
||||||
|
})
|
||||||
|
)
|
||||||
|
// Bind event/ start rendering later, so that event handlers get reactive canvas reference.
|
||||||
|
this.canvas.options.skip_events = false
|
||||||
|
this.canvas.options.skip_render = false
|
||||||
|
this.canvas.bindEvents()
|
||||||
|
this.canvas.startRendering()
|
||||||
|
|
||||||
this.ctx = canvasEl.getContext('2d')
|
this.ctx = canvasEl.getContext('2d')
|
||||||
|
|
||||||
LiteGraph.alt_drag_do_clone_nodes = true
|
LiteGraph.alt_drag_do_clone_nodes = true
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
import { LGraphNode, LGraphGroup, LGraphCanvas } from '@comfyorg/litegraph'
|
import { LGraphNode, LGraphGroup, LGraphCanvas } from '@comfyorg/litegraph'
|
||||||
import { defineStore } from 'pinia'
|
import { defineStore } from 'pinia'
|
||||||
import { ref, shallowRef } from 'vue'
|
import { shallowRef } from 'vue'
|
||||||
|
|
||||||
export const useTitleEditorStore = defineStore('titleEditor', () => {
|
export const useTitleEditorStore = defineStore('titleEditor', () => {
|
||||||
const titleEditorTarget = shallowRef<LGraphNode | LGraphGroup | null>(null)
|
const titleEditorTarget = shallowRef<LGraphNode | LGraphGroup | null>(null)
|
||||||
@@ -11,31 +11,14 @@ export const useTitleEditorStore = defineStore('titleEditor', () => {
|
|||||||
})
|
})
|
||||||
|
|
||||||
export const useCanvasStore = defineStore('canvas', () => {
|
export const useCanvasStore = defineStore('canvas', () => {
|
||||||
|
/**
|
||||||
|
* The LGraphCanvas instance.
|
||||||
|
*
|
||||||
|
* The root LGraphCanvas object is shallow reactive.
|
||||||
|
*/
|
||||||
const canvas = shallowRef<LGraphCanvas | null>(null)
|
const canvas = shallowRef<LGraphCanvas | null>(null)
|
||||||
const readOnly = ref(false)
|
|
||||||
const draggingCanvas = ref(false)
|
|
||||||
|
|
||||||
document.addEventListener(
|
|
||||||
'litegraph:canvas',
|
|
||||||
(e: CustomEvent<{ subType: string; readOnly: boolean }>) => {
|
|
||||||
if (e.detail?.subType === 'read-only') {
|
|
||||||
readOnly.value = e.detail.readOnly
|
|
||||||
}
|
|
||||||
}
|
|
||||||
)
|
|
||||||
|
|
||||||
document.addEventListener(
|
|
||||||
'litegraph:canvas',
|
|
||||||
(e: CustomEvent<{ subType: string; draggingCanvas: boolean }>) => {
|
|
||||||
if (e.detail?.subType === 'dragging-canvas') {
|
|
||||||
draggingCanvas.value = e.detail.draggingCanvas
|
|
||||||
}
|
|
||||||
}
|
|
||||||
)
|
|
||||||
|
|
||||||
return {
|
return {
|
||||||
canvas,
|
canvas
|
||||||
readOnly,
|
|
||||||
draggingCanvas
|
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|||||||
Reference in New Issue
Block a user