mirror of
https://github.com/penpot/penpot.git
synced 2025-06-04 20:51:38 +02:00
♻️ Refactor panning/zoom rendering
This commit is contained in:
parent
a5b2f0e4c3
commit
10b32de447
7 changed files with 70 additions and 23 deletions
|
@ -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)))
|
||||
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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]
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue