♻️ Refactor panning/zoom rendering

This commit is contained in:
AzazelN28 2025-01-07 09:04:44 +01:00
parent a5b2f0e4c3
commit 10b32de447
7 changed files with 70 additions and 23 deletions

View file

@ -292,19 +292,23 @@
(when @canvas-init?
(wasm.api/resize-viewbox (:width vport) (:height vport))))
(mf/with-effect [base-objects @canvas-init?]
(mf/with-effect [@canvas-init? base-objects]
(when @canvas-init?
(wasm.api/set-objects base-objects)))
(mf/with-effect [preview-blend @canvas-init?]
(mf/with-effect [@canvas-init? preview-blend]
(when (and @canvas-init? preview-blend)
(wasm.api/request-render)))
(wasm.api/request-render "with-effect")))
(mf/with-effect [vbox @canvas-init?]
(mf/with-effect [@canvas-init? vbox]
(when @canvas-init?
(wasm.api/set-view zoom vbox)))
(wasm.api/set-view-zoom zoom vbox)))
(mf/with-effect [background]
(mf/with-effect [@canvas-init? vbox]
(when @canvas-init?
(wasm.api/set-view-box zoom vbox)))
(mf/with-effect [@canvas-init? background]
(when @canvas-init?
(wasm.api/set-canvas-background background)))

View file

@ -61,15 +61,16 @@
[r g b a]))
(defn cancel-render
[]
[_]
(when internal-frame-id
(js/cancelAnimationFrame internal-frame-id)
(set! internal-frame-id nil)))
(defn request-render
[]
(when internal-frame-id (cancel-render))
(set! internal-frame-id (js/requestAnimationFrame render)))
[requester]
(when internal-frame-id (cancel-render requester))
(let [frame-id (js/requestAnimationFrame render)]
(set! internal-frame-id frame-id)))
(defn use-shape
[id]
@ -378,10 +379,15 @@
(def debounce-render-without-cache (fns/debounce render-without-cache 100))
(defn set-view
(defn set-view-box
[zoom vbox]
(h/call internal-module "_set_view" zoom (- (:x vbox)) (- (:y vbox)))
(h/call internal-module "_navigate")
(h/call internal-module "_pan"))
(defn set-view-zoom
[zoom vbox]
(h/call internal-module "_set_view" zoom (- (:x vbox)) (- (:y vbox)))
(h/call internal-module "_zoom")
(debounce-render-without-cache))
(defn set-objects
@ -427,7 +433,7 @@
(let [pending' (concat (set-shape-fills fills) (set-shape-strokes strokes))]
(recur (inc index) (into pending pending'))))
pending))]
(request-render)
(request-render "set-objects")
(when-let [pending (seq pending)]
(->> (rx/from pending)
(rx/mapcat identity)

View file

@ -130,7 +130,7 @@
;; when something synced with wasm
;; is modified, we need to request
;; a new render.
(api/request-render)))
(api/request-render "set-wasm-attrs")))
(defn- impl-assoc
[self k v]