From ce67550195b3ff699f3c41740506af99d26308c8 Mon Sep 17 00:00:00 2001 From: Alejandro Date: Wed, 29 Jan 2025 10:50:27 +0100 Subject: [PATCH] :bug: Avoid extra render calls on page initialization with wasm render (#5701) --- .../app/main/ui/workspace/viewport_wasm.cljs | 20 ++++++++++++------- frontend/src/app/render_wasm/api.cljs | 18 ++++++++++++----- render-wasm/src/state.rs | 1 - 3 files changed, 26 insertions(+), 13 deletions(-) diff --git a/frontend/src/app/main/ui/workspace/viewport_wasm.cljs b/frontend/src/app/main/ui/workspace/viewport_wasm.cljs index ce321f40b..3de0c4c9d 100644 --- a/frontend/src/app/main/ui/workspace/viewport_wasm.cljs +++ b/frontend/src/app/main/ui/workspace/viewport_wasm.cljs @@ -133,6 +133,7 @@ frame-hover (mf/use-state nil) active-frames (mf/use-state #{}) canvas-init? (mf/use-state false) + initialized? (mf/use-state false) ;; REFS [viewport-ref @@ -293,23 +294,28 @@ (wasm.api/resize-viewbox (:width vport) (:height vport)))) (mf/with-effect [@canvas-init? base-objects] - (when @canvas-init? + (when (and @canvas-init? @initialized?) (wasm.api/set-objects base-objects))) (mf/with-effect [@canvas-init? preview-blend] (when (and @canvas-init? preview-blend) (wasm.api/request-render "with-effect"))) - (mf/with-effect [@canvas-init? vbox] - (when @canvas-init? + (mf/with-effect [@canvas-init? zoom vbox background] + (when (and @canvas-init? (not @initialized?)) + (wasm.api/initialize base-objects zoom vbox background) + (reset! initialized? true))) + + (mf/with-effect [vbox] + (when (and @canvas-init? initialized?) (wasm.api/set-view-zoom zoom vbox))) - (mf/with-effect [@canvas-init? vbox] - (when @canvas-init? + (mf/with-effect [vbox] + (when (and @canvas-init? initialized?) (wasm.api/set-view-box zoom vbox))) - (mf/with-effect [@canvas-init? background] - (when @canvas-init? + (mf/with-effect [background] + (when (and @canvas-init? initialized?) (wasm.api/set-canvas-background background))) (hooks/setup-dom-events zoom disable-paste in-viewport? read-only? drawing-tool drawing-path?) diff --git a/frontend/src/app/render_wasm/api.cljs b/frontend/src/app/render_wasm/api.cljs index 39f52fc33..803b08303 100644 --- a/frontend/src/app/render_wasm/api.cljs +++ b/frontend/src/app/render_wasm/api.cljs @@ -573,6 +573,19 @@ (rx/reduce conj []) (rx/subs! request-render))))) +(defn set-canvas-background + [background] + (let [rgba (rgba-from-hex background 1)] + (h/call internal-module "_set_canvas_background" rgba) + (request-render "set-canvas-background"))) + +(defn initialize + [base-objects zoom vbox background] + (let [rgba (rgba-from-hex background 1)] + (h/call internal-module "_set_canvas_background" rgba) + (h/call internal-module "_set_view" zoom (- (:x vbox)) (- (:y vbox))) + (set-objects base-objects))) + (def ^:private canvas-options #js {:antialias false :depth true @@ -610,11 +623,6 @@ ;; TODO: perform corresponding cleaning (h/call internal-module "_clean_up")) -(defn set-canvas-background - [background] - (let [rgba (rgba-from-hex background 1)] - (h/call internal-module "_set_canvas_background" rgba))) - (defonce module (delay (if (exists? js/dynamicImport) diff --git a/render-wasm/src/state.rs b/render-wasm/src/state.rs index 73e4df6cf..715a25641 100644 --- a/render-wasm/src/state.rs +++ b/render-wasm/src/state.rs @@ -67,6 +67,5 @@ impl<'a> State<'a> { pub fn set_background_color(&mut self, color: skia::Color) { self.render_state.set_background_color(color); - self.render_all(true); } }