|
@@ -90,6 +90,7 @@ export class OpenSheetMusicDisplay {
|
|
|
protected rules: EngravingRules;
|
|
|
protected autoResizeEnabled: boolean;
|
|
|
private resizeHandlerAttached: boolean;
|
|
|
+ private disposeResizeListener: Function;
|
|
|
protected followCursor: boolean;
|
|
|
protected OnXMLRead: Function;
|
|
|
public set PlaybackManager(manager: PlaybackManager) {
|
|
@@ -412,10 +413,20 @@ export class OpenSheetMusicDisplay {
|
|
|
|
|
|
/** Clears what OSMD has drawn on its canvas. */
|
|
|
public clear(): void {
|
|
|
- this.drawer.clear();
|
|
|
+ this.drawer?.clear();
|
|
|
this.reset(); // without this, resize will draw loaded sheet again
|
|
|
}
|
|
|
|
|
|
+ /** Dispose listeners created by OSMD */
|
|
|
+ public dispose(): void {
|
|
|
+ if (this.disposeResizeListener) {
|
|
|
+ this.disposeResizeListener();
|
|
|
+ }
|
|
|
+ if (this.InteractionManager) {
|
|
|
+ this.InteractionManager.Dispose();
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
/** Set OSMD rendering options using an IOSMDOptions object.
|
|
|
* Can be called during runtime. Also called by constructor.
|
|
|
* For example, setOptions({autoResize: false}) will disable autoResize even during runtime.
|
|
@@ -806,6 +817,18 @@ export class OpenSheetMusicDisplay {
|
|
|
} else {
|
|
|
window.addEventListener("resize", resizeStart);
|
|
|
}
|
|
|
+
|
|
|
+ this.disposeResizeListener = (): void => {
|
|
|
+ if ((<any>window).detachEvent) {
|
|
|
+ // Support IE<9
|
|
|
+ (<any>window).detachEvent ("onresize", resizeStart);
|
|
|
+ } else {
|
|
|
+ window.removeEventListener("resize", resizeStart);
|
|
|
+ }
|
|
|
+
|
|
|
+ this.resizeHandlerAttached = false;
|
|
|
+ };
|
|
|
+
|
|
|
this.resizeHandlerAttached = true;
|
|
|
|
|
|
window.setTimeout(startCallback, 0);
|