mirror of
https://github.com/penpot/penpot.git
synced 2025-05-20 07:36:10 +02:00
🎉 Add first impl of wasm-friendly for Shape data structure
This commit is contained in:
parent
e7d7291947
commit
043c23899a
7 changed files with 300 additions and 78 deletions
|
@ -276,18 +276,20 @@
|
|||
|
||||
(when ^boolean render.wasm/enabled?
|
||||
(mf/with-effect []
|
||||
(when-let [canvas (mf/ref-val canvas-ref)]
|
||||
(time (when-let [canvas (mf/ref-val canvas-ref)]
|
||||
(->> render.wasm/module
|
||||
(p/fmap (fn [ready?]
|
||||
(when ready?
|
||||
(mf/set-ref-val! canvas-init true)
|
||||
(render.wasm/assign-canvas canvas)))))
|
||||
(fn []
|
||||
(render.wasm/clear-canvas))))
|
||||
(render.wasm/clear-canvas)))))
|
||||
|
||||
(mf/with-effect [vbox' base-objects]
|
||||
(when (mf/ref-val canvas-init)
|
||||
(render.wasm/draw-objects base-objects zoom vbox'))))
|
||||
(mf/with-effect [vbox objects-modified]
|
||||
(let [sem (when (mf/ref-val canvas-init)
|
||||
(render.wasm/draw-objects objects-modified zoom vbox))]
|
||||
(partial render.wasm/cancel-draw sem)))
|
||||
)
|
||||
|
||||
(hooks/setup-dom-events zoom disable-paste in-viewport? read-only? drawing-tool drawing-path?)
|
||||
(hooks/setup-viewport-size vport viewport-ref)
|
||||
|
|
|
@ -17,7 +17,8 @@
|
|||
(defonce ^:dynamic internal-module #js {})
|
||||
(defonce ^:dynamic internal-gpu-state #js {})
|
||||
|
||||
(defn draw-objects [objects zoom vbox]
|
||||
(defn draw-objects
|
||||
[objects zoom vbox]
|
||||
(let [draw-rect (unchecked-get internal-module "_draw_rect")
|
||||
translate (unchecked-get internal-module "_translate")
|
||||
reset-canvas (unchecked-get internal-module "_reset_canvas")
|
||||
|
@ -35,17 +36,24 @@
|
|||
(translate gpu-state (- x) (- y)))
|
||||
|
||||
(run! (fn [shape]
|
||||
;; (js/console.log "render-shape" (.-buffer shape))
|
||||
(let [selrect (dm/get-prop shape :selrect)
|
||||
x1 (dm/get-prop selrect :x1)
|
||||
y1 (dm/get-prop selrect :y1)
|
||||
x2 (dm/get-prop selrect :x2)
|
||||
y2 (dm/get-prop selrect :y2)]
|
||||
;; (prn (:id shape) selrect)
|
||||
(draw-rect gpu-state x1 y1 x2 y2)))
|
||||
(vals objects))
|
||||
|
||||
(flush gpu-state)))))
|
||||
|
||||
(def canvas-options
|
||||
(defn cancel-draw
|
||||
[sem]
|
||||
(when (some? sem)
|
||||
(js/cancelAnimationFrame sem)))
|
||||
|
||||
(def ^:private canvas-options
|
||||
#js {:antialias true
|
||||
:depth true
|
||||
:stencil true
|
||||
|
|
|
@ -181,10 +181,12 @@
|
|||
[state name]
|
||||
(let [page-id (get state :current-page-id)
|
||||
objects (get-in state [:workspace-data :pages-index page-id :objects])
|
||||
result (or (d/seek (fn [[_ shape]] (= name (:name shape))) objects)
|
||||
result (or (d/seek (fn [shape] (= name (:name shape))) (vals objects))
|
||||
(get objects (uuid/uuid name)))]
|
||||
(logjs name result)
|
||||
nil))
|
||||
#_(logjs name result)
|
||||
result
|
||||
|
||||
#_nil))
|
||||
|
||||
(defn ^:export dump-object
|
||||
[name]
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue