From abf9f3e3f193e9dce3029e52ceb70db150d3a8f9 Mon Sep 17 00:00:00 2001 From: Beka Westberg Date: Mon, 18 Sep 2023 20:02:13 +0000 Subject: [PATCH] fix: immediately render for JavaFX --- core/render_management.ts | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/core/render_management.ts b/core/render_management.ts index 8adc83c202c..8c088eacfe0 100644 --- a/core/render_management.ts +++ b/core/render_management.ts @@ -6,6 +6,7 @@ import {BlockSvg} from './block_svg.js'; import {Coordinate} from './utils/coordinate.js'; +import * as userAgent from './utils/useragent.js'; /** The set of all blocks in need of rendering which don't have parents. */ const rootBlocks = new Set(); @@ -42,6 +43,12 @@ let animationRequestId = 0; */ export function queueRender(block: BlockSvg): Promise { queueBlock(block); + + if (alwaysImmediatelyRender()) { + doRenders(); + return Promise.resolve(); + } + if (!afterRendersPromise) { afterRendersPromise = new Promise((resolve) => { afterRendersResolver = resolve; @@ -77,6 +84,15 @@ export function triggerQueuedRenders() { if (afterRendersResolver) afterRendersResolver(); } +/** + * @returns True if we should always trigger an immediate render. + * Some platforms don't properly support `requestAnimationFrame`, so to + * avoid glitchiness, we give up the performance improvements. + */ +function alwaysImmediatelyRender() { + return userAgent.JavaFx; +} + /** * Adds the given block and its parents to the render queue. Adds the root block * to the list of root blocks.