Skip to content

Commit 2e0dfeb

Browse files
Updated events trigger
1 parent 0cf3341 commit 2e0dfeb

File tree

2 files changed

+26
-11
lines changed

2 files changed

+26
-11
lines changed

src/events/canvas-event-emitter.ts

Lines changed: 20 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import AdvancedCanvasPlugin from "src/main"
2-
import { BBox, CanvasNode, SelectionData } from "src/@types/Canvas"
2+
import { BBox, Canvas, CanvasNode, SelectionData } from "src/@types/Canvas"
33
import { patchWorkspaceFunction } from "src/utils/patch-helper"
44
import { CanvasEvent } from "./events"
55

@@ -10,6 +10,15 @@ export default class CanvasEventEmitter {
1010
this.plugin = plugin
1111
const that = this
1212

13+
// Patch canvas view
14+
patchWorkspaceFunction(this.plugin, () => this.plugin.getCurrentCanvasView(), {
15+
setViewData: (next: any) => function (...args: any) {
16+
const result = next.call(this, ...args)
17+
that.triggerCanvasChangedEvent(this.canvas)
18+
return result
19+
}
20+
})
21+
1322
// Patch canvas
1423
patchWorkspaceFunction(this.plugin, () => this.plugin.getCurrentCanvas(), {
1524
// Add custom function
@@ -76,29 +85,32 @@ export default class CanvasEventEmitter {
7685
patchWorkspaceFunction(this.plugin, () => this.plugin.getCurrentCanvas()?.nodeInteractionLayer, {
7786
setTarget: (next: any) => function (node: CanvasNode) {
7887
const result = next.call(this, node)
79-
8088
that.triggerWorkspaceEvent(CanvasEvent.NodeInteraction, this.canvas, node)
81-
8289
return result
8390
}
8491
})
8592

8693
// Listen to canvas changes
87-
const onCanvasChangeListener = this.plugin.app.workspace.on('active-leaf-change', () => {
94+
const onCanvasChangeListener = this.plugin.app.workspace.on('layout-change', () => {
8895
const canvas = this.plugin.getCurrentCanvas()
8996
if (!canvas) return
9097

91-
this.triggerWorkspaceEvent(CanvasEvent.CanvasChanged, canvas)
92-
this.triggerWorkspaceEvent(CanvasEvent.ViewportChanged.After, canvas)
93-
this.triggerWorkspaceEvent(CanvasEvent.ReadonlyChanged, canvas, canvas.readonly)
94-
this.triggerWorkspaceEvent(CanvasEvent.NodesChanged, canvas, [...canvas.nodes.values()])
98+
this.triggerCanvasChangedEvent(canvas)
99+
this.plugin.app.workspace.offref(onCanvasChangeListener)
95100
})
96101
this.plugin.registerEvent(onCanvasChangeListener)
97102

98103
// Trigger instantly (Plugin reload)
99104
onCanvasChangeListener.fn.call(this.plugin.app.workspace)
100105
}
101106

107+
private triggerCanvasChangedEvent(canvas: Canvas) {
108+
this.triggerWorkspaceEvent(CanvasEvent.CanvasChanged, canvas)
109+
this.triggerWorkspaceEvent(CanvasEvent.ViewportChanged.After, canvas)
110+
this.triggerWorkspaceEvent(CanvasEvent.ReadonlyChanged, canvas, canvas.readonly)
111+
this.triggerWorkspaceEvent(CanvasEvent.NodesChanged, canvas, [...canvas.nodes.values()])
112+
}
113+
102114
private triggerWorkspaceEvent(event: string, ...args: any) {
103115
this.plugin.app.workspace.trigger(event, ...args)
104116
}

src/main.ts

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -38,10 +38,13 @@ export default class AdvancedCanvasPlugin extends Plugin {
3838

3939
onunload() {}
4040

41-
getCurrentCanvas(): Canvas|null {
41+
getCurrentCanvasView(): any {
4242
const canvasView = this.app.workspace.getActiveViewOfType(ItemView)
43+
if (canvasView?.getViewType() !== 'canvas') return null
44+
return canvasView
45+
}
4346

44-
if (canvasView?.getViewType() !== 'canvas') return null
45-
return (canvasView as any).canvas
47+
getCurrentCanvas(): Canvas|null {
48+
return this.getCurrentCanvasView()?.canvas
4649
}
4750
}

0 commit comments

Comments
 (0)