From cc62be458d582a52045767d924a8c432825676ea Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E4=B8=8D=E5=A6=82=E6=80=80=E5=BF=B5=EF=BC=88=E4=BA=91?= =?UTF-8?q?=E8=B0=8C=EF=BC=89?= Date: Mon, 24 Feb 2025 13:40:49 +0800 Subject: [PATCH 1/2] fix: image element rendering triggers an exception (#1906) * fix: image element rendering triggers an exception * chore: add image bugfix demo #1906 --- .changeset/loud-icons-press.md | 6 ++++ .eslintrc.cjs | 1 + __tests__/demos/bugfix/1906.ts | 33 +++++++++++++++++++ __tests__/demos/bugfix/index.ts | 1 + .../src/shapes/styles/Image.ts | 24 ++++++++++---- .../g-plugin-image-loader/src/ImagePool.ts | 4 +-- 6 files changed, 61 insertions(+), 8 deletions(-) create mode 100644 .changeset/loud-icons-press.md create mode 100644 __tests__/demos/bugfix/1906.ts diff --git a/.changeset/loud-icons-press.md b/.changeset/loud-icons-press.md new file mode 100644 index 000000000..cc1412bbb --- /dev/null +++ b/.changeset/loud-icons-press.md @@ -0,0 +1,6 @@ +--- +'@antv/g-plugin-canvas-renderer': patch +'@antv/g-plugin-image-loader': patch +--- + +fix: image element rendering triggers an exception diff --git a/.eslintrc.cjs b/.eslintrc.cjs index 1e45ca9e5..83db1a15a 100644 --- a/.eslintrc.cjs +++ b/.eslintrc.cjs @@ -49,6 +49,7 @@ module.exports = { 'import/no-cycle': 'warn', 'import/no-duplicates': 'warn', 'class-methods-use-this': 'warn', + 'no-console': ['warn', { allow: ['warn', 'error'] }], 'no-plusplus': [ 'warn', { diff --git a/__tests__/demos/bugfix/1906.ts b/__tests__/demos/bugfix/1906.ts new file mode 100644 index 000000000..b5e91416d --- /dev/null +++ b/__tests__/demos/bugfix/1906.ts @@ -0,0 +1,33 @@ +import { Canvas, Image as GImage } from '@antv/g'; + +/** + * @see https://github.com/antvis/G/pull/1906 + */ +export async function issue_1906(context: { canvas: Canvas }) { + const { canvas } = context; + await canvas.ready; + canvas.context.config.enableLargeImageOptimization = true; + + const img = new Image(); + img.onload = () => { + console.log('onload', img.complete); + + // remove && expect no error + requestAnimationFrame(() => { + image.remove(); + }); + }; + + let image = new GImage({ + style: { + x: 0, + y: 0, + src: img, + }, + }); + + img.src = + 'https://mdn.alipayobjects.com/huamei_fr7vu1/afts/img/A*SqloToP7R9QAAAAAAAAAAAAADkn0AQ/original'; + + canvas.appendChild(image); +} diff --git a/__tests__/demos/bugfix/index.ts b/__tests__/demos/bugfix/index.ts index 9c1f8b698..4cac0aa5d 100644 --- a/__tests__/demos/bugfix/index.ts +++ b/__tests__/demos/bugfix/index.ts @@ -10,6 +10,7 @@ export { test_pick } from './1747'; export { issue_1760 } from './1760'; export { issue_1176 } from './1176'; export { issue_1882 } from './1882'; +export { issue_1906 } from './1906'; export { textWordWrap } from './textWordWrap'; export { group_with_stroke } from './group-with-stroke'; export { switchRenderer } from './switch-renderer'; diff --git a/packages/g-plugin-canvas-renderer/src/shapes/styles/Image.ts b/packages/g-plugin-canvas-renderer/src/shapes/styles/Image.ts index 1738e8d69..f9763e0ce 100644 --- a/packages/g-plugin-canvas-renderer/src/shapes/styles/Image.ts +++ b/packages/g-plugin-canvas-renderer/src/shapes/styles/Image.ts @@ -47,14 +47,19 @@ export class ImageRenderer extends DefaultRenderer { if (!imageCache.downSampled) { this.imagePool .createDownSampledImage(src, object) - .then((res) => { + .then(() => { + // be removed from dom tree + if (!object.ownerDocument) { + return; + } + // rerender // object.dirty(); object.renderable.dirty = true; object.ownerDocument.defaultView.context.renderingService.dirtify(); }) - .catch(() => { - // + .catch((reason) => { + console.error(reason); }); return; @@ -92,6 +97,11 @@ export class ImageRenderer extends DefaultRenderer { src, [], () => { + // be removed from dom tree + if (!object.ownerDocument) { + return; + } + // rerender // object.dirty(); object.renderable.dirty = true; @@ -99,8 +109,8 @@ export class ImageRenderer extends DefaultRenderer { }, object, ) - .catch(() => { - // + .catch((reason) => { + console.error(reason); }); return; @@ -244,7 +254,9 @@ export class ImageRenderer extends DefaultRenderer { imageRect, drawRect, }); - } catch {} + } catch { + // expected error + } } // --- diff --git a/packages/g-plugin-image-loader/src/ImagePool.ts b/packages/g-plugin-image-loader/src/ImagePool.ts index dc4ea785d..c3bafa7d4 100644 --- a/packages/g-plugin-image-loader/src/ImagePool.ts +++ b/packages/g-plugin-image-loader/src/ImagePool.ts @@ -85,8 +85,8 @@ export class ImagePool { .then((cache) => { callback?.(cache); }) - .catch(() => { - // + .catch((reason) => { + console.error(reason); }); return null; From c7f3dfb4d2c2caa621f18cc72d2381b6f641f6be Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Thu, 27 Feb 2025 16:21:49 +0800 Subject: [PATCH 2/2] chore(release): bump version (#1907) Co-authored-by: github-actions[bot] --- .changeset/loud-icons-press.md | 6 ------ packages/g-canvas/CHANGELOG.md | 9 +++++++++ packages/g-canvas/package.json | 2 +- packages/g-canvaskit/CHANGELOG.md | 9 +++++++++ packages/g-canvaskit/package.json | 2 +- packages/g-mobile-canvas/CHANGELOG.md | 9 +++++++++ packages/g-mobile-canvas/package.json | 2 +- packages/g-mobile-webgl/CHANGELOG.md | 8 ++++++++ packages/g-mobile-webgl/package.json | 2 +- packages/g-plugin-3d/CHANGELOG.md | 6 ++++++ packages/g-plugin-3d/package.json | 2 +- packages/g-plugin-canvas-picker/CHANGELOG.md | 7 +++++++ packages/g-plugin-canvas-picker/package.json | 2 +- packages/g-plugin-canvas-renderer/CHANGELOG.md | 8 ++++++++ packages/g-plugin-canvas-renderer/package.json | 2 +- packages/g-plugin-canvaskit-renderer/CHANGELOG.md | 7 +++++++ packages/g-plugin-canvaskit-renderer/package.json | 2 +- packages/g-plugin-device-renderer/CHANGELOG.md | 7 +++++++ packages/g-plugin-device-renderer/package.json | 2 +- packages/g-plugin-image-loader/CHANGELOG.md | 6 ++++++ packages/g-plugin-image-loader/package.json | 2 +- packages/g-plugin-rough-canvas-renderer/CHANGELOG.md | 6 ++++++ packages/g-plugin-rough-canvas-renderer/package.json | 2 +- packages/g-plugin-zdog-canvas-renderer/CHANGELOG.md | 6 ++++++ packages/g-plugin-zdog-canvas-renderer/package.json | 2 +- packages/g-web-components/CHANGELOG.md | 7 +++++++ packages/g-web-components/package.json | 2 +- packages/g-webgl/CHANGELOG.md | 8 ++++++++ packages/g-webgl/package.json | 2 +- packages/g-webgpu/CHANGELOG.md | 8 ++++++++ packages/g-webgpu/package.json | 2 +- 31 files changed, 126 insertions(+), 21 deletions(-) delete mode 100644 .changeset/loud-icons-press.md diff --git a/.changeset/loud-icons-press.md b/.changeset/loud-icons-press.md deleted file mode 100644 index cc1412bbb..000000000 --- a/.changeset/loud-icons-press.md +++ /dev/null @@ -1,6 +0,0 @@ ---- -'@antv/g-plugin-canvas-renderer': patch -'@antv/g-plugin-image-loader': patch ---- - -fix: image element rendering triggers an exception diff --git a/packages/g-canvas/CHANGELOG.md b/packages/g-canvas/CHANGELOG.md index 5e14bd091..598784e4c 100644 --- a/packages/g-canvas/CHANGELOG.md +++ b/packages/g-canvas/CHANGELOG.md @@ -1,5 +1,14 @@ # @antv/g-canvas +## 2.0.40 + +### Patch Changes + +- Updated dependencies [cc62be4] + - @antv/g-plugin-canvas-renderer@2.2.19 + - @antv/g-plugin-image-loader@2.1.19 + - @antv/g-plugin-canvas-picker@2.1.19 + ## 2.0.39 ### Patch Changes diff --git a/packages/g-canvas/package.json b/packages/g-canvas/package.json index fe9568e93..74e4c1861 100644 --- a/packages/g-canvas/package.json +++ b/packages/g-canvas/package.json @@ -1,6 +1,6 @@ { "name": "@antv/g-canvas", - "version": "2.0.39", + "version": "2.0.40", "description": "A renderer implemented by Canvas 2D API", "keywords": [ "antv", diff --git a/packages/g-canvaskit/CHANGELOG.md b/packages/g-canvaskit/CHANGELOG.md index c5ca9b580..1787544d3 100644 --- a/packages/g-canvaskit/CHANGELOG.md +++ b/packages/g-canvaskit/CHANGELOG.md @@ -1,5 +1,14 @@ # @antv/g-canvaskit +## 1.0.39 + +### Patch Changes + +- Updated dependencies [cc62be4] + - @antv/g-plugin-image-loader@2.1.19 + - @antv/g-plugin-canvas-picker@2.1.19 + - @antv/g-plugin-canvaskit-renderer@2.1.19 + ## 1.0.38 ### Patch Changes diff --git a/packages/g-canvaskit/package.json b/packages/g-canvaskit/package.json index 2ce575dca..01e076212 100644 --- a/packages/g-canvaskit/package.json +++ b/packages/g-canvaskit/package.json @@ -1,6 +1,6 @@ { "name": "@antv/g-canvaskit", - "version": "1.0.38", + "version": "1.0.39", "description": "A renderer implemented by CanvasKit", "keywords": [ "antv", diff --git a/packages/g-mobile-canvas/CHANGELOG.md b/packages/g-mobile-canvas/CHANGELOG.md index 3b7cff026..a5c230e9e 100644 --- a/packages/g-mobile-canvas/CHANGELOG.md +++ b/packages/g-mobile-canvas/CHANGELOG.md @@ -1,5 +1,14 @@ # @antv/g-mobile-canvas +## 1.0.37 + +### Patch Changes + +- Updated dependencies [cc62be4] + - @antv/g-plugin-canvas-renderer@2.2.19 + - @antv/g-plugin-image-loader@2.1.19 + - @antv/g-plugin-canvas-picker@2.1.19 + ## 1.0.36 ### Patch Changes diff --git a/packages/g-mobile-canvas/package.json b/packages/g-mobile-canvas/package.json index 0c2f70ec5..8bb5a99cd 100644 --- a/packages/g-mobile-canvas/package.json +++ b/packages/g-mobile-canvas/package.json @@ -1,6 +1,6 @@ { "name": "@antv/g-mobile-canvas", - "version": "1.0.36", + "version": "1.0.37", "description": "A renderer implemented with Canvas2D API in mobile environment", "keywords": [ "antv", diff --git a/packages/g-mobile-webgl/CHANGELOG.md b/packages/g-mobile-webgl/CHANGELOG.md index 6a524a61d..0c19f7305 100644 --- a/packages/g-mobile-webgl/CHANGELOG.md +++ b/packages/g-mobile-webgl/CHANGELOG.md @@ -1,5 +1,13 @@ # @antv/g-mobile-webgl +## 1.0.44 + +### Patch Changes + +- Updated dependencies [cc62be4] + - @antv/g-plugin-image-loader@2.1.19 + - @antv/g-plugin-device-renderer@2.2.19 + ## 1.0.43 ### Patch Changes diff --git a/packages/g-mobile-webgl/package.json b/packages/g-mobile-webgl/package.json index 00e9a6072..ce662ea97 100644 --- a/packages/g-mobile-webgl/package.json +++ b/packages/g-mobile-webgl/package.json @@ -1,6 +1,6 @@ { "name": "@antv/g-mobile-webgl", - "version": "1.0.43", + "version": "1.0.44", "description": "A renderer implemented by WebGL1/2 in mobile environment", "keywords": [ "antv", diff --git a/packages/g-plugin-3d/CHANGELOG.md b/packages/g-plugin-3d/CHANGELOG.md index 2f213c97c..c4905fe6f 100644 --- a/packages/g-plugin-3d/CHANGELOG.md +++ b/packages/g-plugin-3d/CHANGELOG.md @@ -1,5 +1,11 @@ # @antv/g-plugin-3d +## 2.0.42 + +### Patch Changes + +- @antv/g-plugin-device-renderer@2.2.19 + ## 2.0.41 ### Patch Changes diff --git a/packages/g-plugin-3d/package.json b/packages/g-plugin-3d/package.json index 5fe5d19d4..2f81b8c32 100644 --- a/packages/g-plugin-3d/package.json +++ b/packages/g-plugin-3d/package.json @@ -1,6 +1,6 @@ { "name": "@antv/g-plugin-3d", - "version": "2.0.41", + "version": "2.0.42", "description": "Provide 3D extension for G", "keywords": [ "antv", diff --git a/packages/g-plugin-canvas-picker/CHANGELOG.md b/packages/g-plugin-canvas-picker/CHANGELOG.md index bc623111c..c6b32f434 100644 --- a/packages/g-plugin-canvas-picker/CHANGELOG.md +++ b/packages/g-plugin-canvas-picker/CHANGELOG.md @@ -1,5 +1,12 @@ # @antv/g-plugin-canvas-picker +## 2.1.19 + +### Patch Changes + +- Updated dependencies [cc62be4] + - @antv/g-plugin-canvas-renderer@2.2.19 + ## 2.1.18 ### Patch Changes diff --git a/packages/g-plugin-canvas-picker/package.json b/packages/g-plugin-canvas-picker/package.json index 6563e5af7..80d8dd58d 100644 --- a/packages/g-plugin-canvas-picker/package.json +++ b/packages/g-plugin-canvas-picker/package.json @@ -1,6 +1,6 @@ { "name": "@antv/g-plugin-canvas-picker", - "version": "2.1.18", + "version": "2.1.19", "description": "A G plugin for picking in canvas", "keywords": [ "antv", diff --git a/packages/g-plugin-canvas-renderer/CHANGELOG.md b/packages/g-plugin-canvas-renderer/CHANGELOG.md index b43cad0d2..aa4de3740 100644 --- a/packages/g-plugin-canvas-renderer/CHANGELOG.md +++ b/packages/g-plugin-canvas-renderer/CHANGELOG.md @@ -1,5 +1,13 @@ # @antv/g-plugin-canvas-renderer +## 2.2.19 + +### Patch Changes + +- cc62be4: fix: image element rendering triggers an exception +- Updated dependencies [cc62be4] + - @antv/g-plugin-image-loader@2.1.19 + ## 2.2.18 ### Patch Changes diff --git a/packages/g-plugin-canvas-renderer/package.json b/packages/g-plugin-canvas-renderer/package.json index dd844b559..42420bfba 100644 --- a/packages/g-plugin-canvas-renderer/package.json +++ b/packages/g-plugin-canvas-renderer/package.json @@ -1,6 +1,6 @@ { "name": "@antv/g-plugin-canvas-renderer", - "version": "2.2.18", + "version": "2.2.19", "description": "A G plugin of renderer implementation with Canvas2D API", "keywords": [ "antv", diff --git a/packages/g-plugin-canvaskit-renderer/CHANGELOG.md b/packages/g-plugin-canvaskit-renderer/CHANGELOG.md index b245abc6d..86174bff4 100644 --- a/packages/g-plugin-canvaskit-renderer/CHANGELOG.md +++ b/packages/g-plugin-canvaskit-renderer/CHANGELOG.md @@ -1,5 +1,12 @@ # @antv/g-plugin-canvaskit-renderer +## 2.1.19 + +### Patch Changes + +- Updated dependencies [cc62be4] + - @antv/g-plugin-image-loader@2.1.19 + ## 2.1.18 ### Patch Changes diff --git a/packages/g-plugin-canvaskit-renderer/package.json b/packages/g-plugin-canvaskit-renderer/package.json index 2211604d9..ef12b30e5 100644 --- a/packages/g-plugin-canvaskit-renderer/package.json +++ b/packages/g-plugin-canvaskit-renderer/package.json @@ -1,6 +1,6 @@ { "name": "@antv/g-plugin-canvaskit-renderer", - "version": "2.1.18", + "version": "2.1.19", "description": "A G plugin of renderer implementation with CanvasKit", "keywords": [ "antv", diff --git a/packages/g-plugin-device-renderer/CHANGELOG.md b/packages/g-plugin-device-renderer/CHANGELOG.md index 91eac6f47..fbd6dd027 100644 --- a/packages/g-plugin-device-renderer/CHANGELOG.md +++ b/packages/g-plugin-device-renderer/CHANGELOG.md @@ -1,5 +1,12 @@ # @antv/g-plugin-device-renderer +## 2.2.19 + +### Patch Changes + +- Updated dependencies [cc62be4] + - @antv/g-plugin-image-loader@2.1.19 + ## 2.2.18 ### Patch Changes diff --git a/packages/g-plugin-device-renderer/package.json b/packages/g-plugin-device-renderer/package.json index c7d487f9d..088a2a7d7 100644 --- a/packages/g-plugin-device-renderer/package.json +++ b/packages/g-plugin-device-renderer/package.json @@ -1,6 +1,6 @@ { "name": "@antv/g-plugin-device-renderer", - "version": "2.2.18", + "version": "2.2.19", "description": "A G plugin of renderer implementation with GPUDevice", "keywords": [ "antv", diff --git a/packages/g-plugin-image-loader/CHANGELOG.md b/packages/g-plugin-image-loader/CHANGELOG.md index bc674f6df..f89a98ae4 100644 --- a/packages/g-plugin-image-loader/CHANGELOG.md +++ b/packages/g-plugin-image-loader/CHANGELOG.md @@ -1,5 +1,11 @@ # @antv/g-plugin-image-loader +## 2.1.19 + +### Patch Changes + +- cc62be4: fix: image element rendering triggers an exception + ## 2.1.18 ### Patch Changes diff --git a/packages/g-plugin-image-loader/package.json b/packages/g-plugin-image-loader/package.json index ff509e739..756e56638 100644 --- a/packages/g-plugin-image-loader/package.json +++ b/packages/g-plugin-image-loader/package.json @@ -1,6 +1,6 @@ { "name": "@antv/g-plugin-image-loader", - "version": "2.1.18", + "version": "2.1.19", "description": "A G plugin for loading image", "keywords": [ "antv", diff --git a/packages/g-plugin-rough-canvas-renderer/CHANGELOG.md b/packages/g-plugin-rough-canvas-renderer/CHANGELOG.md index e11073eca..02b91b61e 100644 --- a/packages/g-plugin-rough-canvas-renderer/CHANGELOG.md +++ b/packages/g-plugin-rough-canvas-renderer/CHANGELOG.md @@ -1,5 +1,11 @@ # @antv/g-plugin-rough-canvas-renderer +## 2.0.40 + +### Patch Changes + +- @antv/g-canvas@2.0.40 + ## 2.0.39 ### Patch Changes diff --git a/packages/g-plugin-rough-canvas-renderer/package.json b/packages/g-plugin-rough-canvas-renderer/package.json index a1cac132d..53c7cdac1 100644 --- a/packages/g-plugin-rough-canvas-renderer/package.json +++ b/packages/g-plugin-rough-canvas-renderer/package.json @@ -1,6 +1,6 @@ { "name": "@antv/g-plugin-rough-canvas-renderer", - "version": "2.0.39", + "version": "2.0.40", "description": "A G plugin of renderer implementation with rough.js", "keywords": [ "antv", diff --git a/packages/g-plugin-zdog-canvas-renderer/CHANGELOG.md b/packages/g-plugin-zdog-canvas-renderer/CHANGELOG.md index 145b249da..4c3dac478 100644 --- a/packages/g-plugin-zdog-canvas-renderer/CHANGELOG.md +++ b/packages/g-plugin-zdog-canvas-renderer/CHANGELOG.md @@ -1,5 +1,11 @@ # @antv/g-plugin-zdog-canvas-renderer +## 2.0.39 + +### Patch Changes + +- @antv/g-canvas@2.0.40 + ## 2.0.38 ### Patch Changes diff --git a/packages/g-plugin-zdog-canvas-renderer/package.json b/packages/g-plugin-zdog-canvas-renderer/package.json index c914fb382..c574dc37f 100644 --- a/packages/g-plugin-zdog-canvas-renderer/package.json +++ b/packages/g-plugin-zdog-canvas-renderer/package.json @@ -1,6 +1,6 @@ { "name": "@antv/g-plugin-zdog-canvas-renderer", - "version": "2.0.38", + "version": "2.0.39", "description": "A G plugin of renderer implementation with Zdog", "keywords": [ "antv", diff --git a/packages/g-web-components/CHANGELOG.md b/packages/g-web-components/CHANGELOG.md index 91a57850c..5647a52c1 100644 --- a/packages/g-web-components/CHANGELOG.md +++ b/packages/g-web-components/CHANGELOG.md @@ -1,5 +1,12 @@ # @antv/g-web-components +## 2.0.46 + +### Patch Changes + +- @antv/g-canvas@2.0.40 +- @antv/g-webgl@2.0.44 + ## 2.0.45 ### Patch Changes diff --git a/packages/g-web-components/package.json b/packages/g-web-components/package.json index 918f6122f..dd421d026 100644 --- a/packages/g-web-components/package.json +++ b/packages/g-web-components/package.json @@ -1,6 +1,6 @@ { "name": "@antv/g-web-components", - "version": "2.0.45", + "version": "2.0.46", "description": "A declarative usage for G implemented with WebComponents", "keywords": [ "antv", diff --git a/packages/g-webgl/CHANGELOG.md b/packages/g-webgl/CHANGELOG.md index b2ae2be6b..3e2977424 100644 --- a/packages/g-webgl/CHANGELOG.md +++ b/packages/g-webgl/CHANGELOG.md @@ -1,5 +1,13 @@ # @antv/g-webgl +## 2.0.44 + +### Patch Changes + +- Updated dependencies [cc62be4] + - @antv/g-plugin-image-loader@2.1.19 + - @antv/g-plugin-device-renderer@2.2.19 + ## 2.0.43 ### Patch Changes diff --git a/packages/g-webgl/package.json b/packages/g-webgl/package.json index bc4e528cf..0ca8be556 100644 --- a/packages/g-webgl/package.json +++ b/packages/g-webgl/package.json @@ -1,6 +1,6 @@ { "name": "@antv/g-webgl", - "version": "2.0.43", + "version": "2.0.44", "description": "A renderer implemented by WebGL1/2", "keywords": [ "antv", diff --git a/packages/g-webgpu/CHANGELOG.md b/packages/g-webgpu/CHANGELOG.md index 64b364b1b..52ccf251f 100644 --- a/packages/g-webgpu/CHANGELOG.md +++ b/packages/g-webgpu/CHANGELOG.md @@ -1,5 +1,13 @@ # @antv/g-webgpu +## 2.0.44 + +### Patch Changes + +- Updated dependencies [cc62be4] + - @antv/g-plugin-image-loader@2.1.19 + - @antv/g-plugin-device-renderer@2.2.19 + ## 2.0.43 ### Patch Changes diff --git a/packages/g-webgpu/package.json b/packages/g-webgpu/package.json index a2973e534..f42988756 100644 --- a/packages/g-webgpu/package.json +++ b/packages/g-webgpu/package.json @@ -1,6 +1,6 @@ { "name": "@antv/g-webgpu", - "version": "2.0.43", + "version": "2.0.44", "description": "A renderer implemented by WebGPU", "keywords": [ "antv",