11import AdvancedCanvasPlugin from "src/main"
2- import { BBox , CanvasNode , SelectionData } from "src/@types/Canvas"
2+ import { BBox , Canvas , CanvasNode , SelectionData } from "src/@types/Canvas"
33import { patchWorkspaceFunction } from "src/utils/patch-helper"
44import { 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 }
0 commit comments