draw shapes with zoom (rust)

This commit is contained in:
Belén Albeza 2024-10-02 15:40:38 +02:00
parent 26ab39a45d
commit 80bbfe7a6f
3 changed files with 12 additions and 13 deletions

View File

@ -273,17 +273,17 @@
(when (render-v2/is-enabled?) (when (render-v2/is-enabled?)
;; set up canvas and first render ;; set up canvas and first render
(mf/with-effect (mf/with-effect
[canvas-ref vbox' @canvas-set? base-objects] [canvas-ref vbox' @canvas-set? base-objects zoom]
(let [canvas (mf/ref-val canvas-ref)] (let [canvas (mf/ref-val canvas-ref)]
(when (and (some? vbox') (not @canvas-set?)) (when (and (some? vbox') (not @canvas-set?))
(p/then (render-v2/init) (fn [] (p/then (render-v2/init) (fn []
(render-v2/set-canvas canvas vbox' base-objects) (render-v2/set-canvas canvas vbox' zoom base-objects)
(swap! canvas-set? true)))))) (swap! canvas-set? true))))))
;; redraw when vbox or shapes change ;; redraw when vbox or shapes change
(mf/with-effect (mf/with-effect
[vbox' base-objects canvas-set?] [vbox' base-objects canvas-set? zoom]
(when @canvas-set? (when @canvas-set?
(render-v2/draw-canvas vbox' base-objects)))) (render-v2/draw-canvas vbox' zoom base-objects))))
(hooks/setup-dom-events zoom disable-paste in-viewport? workspace-read-only? drawing-tool drawing-path?) (hooks/setup-dom-events zoom disable-paste in-viewport? workspace-read-only? drawing-tool drawing-path?)
(hooks/setup-viewport-size vport viewport-ref) (hooks/setup-viewport-size vport viewport-ref)

View File

@ -27,7 +27,7 @@
(render-v2-rs/init))) (render-v2-rs/init)))
(defn set-canvas (defn set-canvas
[canvas vbox base-objects] [canvas vbox zoom base-objects]
(cond (cond
;; CPP ;; CPP
(contains? cf/flags :render-v2-cpp) (contains? cf/flags :render-v2-cpp)
@ -35,10 +35,10 @@
;; Rust ;; Rust
(contains? cf/flags :render-v2-rs) (contains? cf/flags :render-v2-rs)
(render-v2-rs/set-canvas canvas vbox base-objects))) (render-v2-rs/set-canvas canvas vbox zoom base-objects)))
(defn draw-canvas [vbox base-objects] (defn draw-canvas [vbox zoom base-objects]
(cond (cond
;; Rust ;; Rust
(contains? cf/flags :render-v2-rs) (contains? cf/flags :render-v2-rs)
(render-v2-rs/draw-canvas vbox base-objects))) (render-v2-rs/draw-canvas vbox zoom base-objects)))

View File

@ -16,13 +16,14 @@
(defonce ^:dynamic internal-module #js {}) (defonce ^:dynamic internal-module #js {})
(defonce ^:dynamic gpu-state #js {}) (defonce ^:dynamic gpu-state #js {})
(defn draw-canvas [vbox objects] (defn draw-canvas [vbox zoom objects]
(let [draw-rect (gobj/get ^js internal-module "_draw_rect") (let [draw-rect (gobj/get ^js internal-module "_draw_rect")
translate (gobj/get ^js internal-module "_translate") translate (gobj/get ^js internal-module "_translate")
reset-canvas (gobj/get ^js internal-module "_reset_canvas") reset-canvas (gobj/get ^js internal-module "_reset_canvas")
scale (gobj/get ^js internal-module "_scale")] scale (gobj/get ^js internal-module "_scale")]
(reset-canvas gpu-state) (reset-canvas gpu-state)
(scale gpu-state zoom zoom)
(translate gpu-state (- (:x vbox)) (- (:y vbox))) (translate gpu-state (- (:x vbox)) (- (:y vbox)))
(doseq [shape (vals objects)] (doseq [shape (vals objects)]
(let [sr (:selrect shape)] (let [sr (:selrect shape)]
@ -30,7 +31,7 @@
(draw-rect gpu-state (:x1 sr) (:y1 sr) (:x2 sr) (:y2 sr)))))) (draw-rect gpu-state (:x1 sr) (:y1 sr) (:x2 sr) (:y2 sr))))))
(defn set-canvas (defn set-canvas
[canvas vbox objects] [canvas vbox zoom objects]
(let [gl (gobj/get ^js internal-module "GL") (let [gl (gobj/get ^js internal-module "GL")
context (.getContext canvas "webgl2" {"antialias" true context (.getContext canvas "webgl2" {"antialias" true
"depth" true "depth" true
@ -50,13 +51,11 @@
(set! (.-height canvas) (.-clientHeight canvas)) (set! (.-height canvas) (.-clientHeight canvas))
(set! gpu-state state) (set! gpu-state state)
(draw-canvas vbox objects) (draw-canvas vbox zoom objects)
#_(draw_rect state 100 100 500 500) #_(draw_rect state 100 100 500 500)
(println "set-canvas ok" (.-width canvas) (.-height canvas)))) (println "set-canvas ok" (.-width canvas) (.-height canvas))))
(defn on-init (defn on-init
[module'] [module']
(set! internal-module module') (set! internal-module module')