From e38e59d4e5c67623dc0c57a0077f746b06782c09 Mon Sep 17 00:00:00 2001 From: doodlewind <7312949+doodlewind@users.noreply.github.com> Date: Wed, 26 Feb 2025 06:49:09 +0000 Subject: [PATCH] refactor(editor): request refresh after finding stale bitmap (#10438) This ensures a bitmap will be eventually generated after tile got invalidated. --- .../viewport-renderer/viewport-renderer.ts | 22 +++++++++++-------- 1 file changed, 13 insertions(+), 9 deletions(-) diff --git a/blocksuite/affine/shared/src/viewport-renderer/viewport-renderer.ts b/blocksuite/affine/shared/src/viewport-renderer/viewport-renderer.ts index c62a8f0a6..91e669c82 100644 --- a/blocksuite/affine/shared/src/viewport-renderer/viewport-renderer.ts +++ b/blocksuite/affine/shared/src/viewport-renderer/viewport-renderer.ts @@ -67,17 +67,10 @@ export class ViewportTurboRendererExtension extends LifeCycleWatcher { ); }); - const debouncedRefresh = debounce( - () => { - this.refresh().catch(console.error); - }, - 1000, // During this period, fallback to DOM - { leading: false, trailing: true } - ); this.disposables.add( this.std.store.slots.blockUpdated.on(() => { this.invalidate(); - debouncedRefresh(); + this.debouncedRefresh(); }) ); } @@ -115,6 +108,14 @@ export class ViewportTurboRendererExtension extends LifeCycleWatcher { } } + debouncedRefresh = debounce( + () => { + this.refresh().catch(console.error); + }, + 1000, // During this period, fallback to DOM + { leading: false, trailing: true } + ); + invalidate() { this.layoutVersion++; this.layoutCache = null; @@ -190,7 +191,10 @@ export class ViewportTurboRendererExtension extends LifeCycleWatcher { } private drawCachedBitmap(layout: ViewportLayout) { - if (!this.tile) return; // version mismatch + if (!this.tile) { + this.debouncedRefresh(); + return; // version mismatch + } const bitmap = this.tile.bitmap; const ctx = this.canvas.getContext('2d');