From a1dc46aa9d26ddc9c078c17e5017d88b90ff8678 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nicol=C3=B2=20Ribaudo?= Date: Fri, 7 Mar 2025 11:32:55 +0100 Subject: [PATCH] Do not constantly render the detail canvas on zoom When zooming, we should skip rendering the detail canvas until the zoom is done, similarly to how normal page rendering is delayed. To do so is enough to skip details view while zooming, since the main view rendering that already happens after the delay will also trigger rendering of the detail views. --- web/pdf_viewer.js | 18 +++++++++++------- 1 file changed, 11 insertions(+), 7 deletions(-) diff --git a/web/pdf_viewer.js b/web/pdf_viewer.js index adc47cbc3..9f515ca32 100644 --- a/web/pdf_viewer.js +++ b/web/pdf_viewer.js @@ -1868,14 +1868,18 @@ class PDFViewer { this._spreadMode !== SpreadMode.NONE && this._scrollMode !== ScrollMode.HORIZONTAL; - // If we are scrolling and the rendering of a detail view was just - // cancelled, it's because the user is scrolling too quickly and so - // we constantly need to re-render a different area. - // Don't attempt to re-render it: this will be done once the user - // stops scrolling. const ignoreDetailViews = - this.#scrollTimeoutId !== null && - visiblePages.views.some(page => page.detailView?.renderingCancelled); + // If we are zooming, do not re-render the detail views. Re-renders on + // zoom happen with a delay, and once the rendering happens it will also + // trigger rendering of the detail views. + this.#scaleTimeoutId !== null || + // If we are scrolling and the rendering of a detail view was just + // cancelled, it's because the user is scrolling too quickly and so + // we constantly need to re-render a different area. + // Don't attempt to re-render it: this will be done once the user + // stops scrolling. + (this.#scrollTimeoutId !== null && + visiblePages.views.some(page => page.detailView?.renderingCancelled)); const pageView = this.renderingQueue.getHighestPriority( visiblePages,