From c4c7c6c60bdb5b4be9c397ddb5aa37e534a5988c Mon Sep 17 00:00:00 2001 From: Dmitry Zarva Date: Mon, 7 Nov 2022 09:19:29 +0300 Subject: [PATCH] feat: add releaseCanvasOnDestroy flag --- src/Global.ts | 11 +++++++++++ src/Util.ts | 2 ++ 2 files changed, 13 insertions(+) diff --git a/src/Global.ts b/src/Global.ts index d54b8f17..9a5dddc5 100644 --- a/src/Global.ts +++ b/src/Global.ts @@ -164,6 +164,17 @@ export const Konva = { isDragReady() { return !!Konva['DD'].node; }, + /** + * Should Konva release canvas elements on destroy. Default is true. + * Useful to avoid memory leak issues in Safari on macOS/iOS. + * @property releaseCanvasOnDestroy + * @default true + * @name releaseCanvasOnDestroy + * @memberof Konva + * @example + * Konva.releaseCanvasOnDestroy = true; + */ + releaseCanvasOnDestroy: true, // user agent document: glob.document, // insert Konva into global namespace (window) diff --git a/src/Util.ts b/src/Util.ts index edecfa3b..cd15f038 100644 --- a/src/Util.ts +++ b/src/Util.ts @@ -958,6 +958,8 @@ export const Util = { } }, releaseCanvas(...canvases: HTMLCanvasElement[]) { + if (!Konva.releaseCanvasOnDestroy) return; + canvases.forEach(c => { c.width = 0; c.height = 0;