From 739b8d7c022e808f08513999eaccf3388377494c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bel=C3=A9n=20Albeza?= Date: Wed, 2 Oct 2024 14:49:25 +0200 Subject: [PATCH] fix vbox being nil when calling translate --- .../src/app/main/ui/workspace/viewport.cljs | 10 ++++---- frontend/src/app/render_v2/rs.cljs | 23 ++++++++++++++----- 2 files changed, 23 insertions(+), 10 deletions(-) diff --git a/frontend/src/app/main/ui/workspace/viewport.cljs b/frontend/src/app/main/ui/workspace/viewport.cljs index bdc3f38c9c..d7f3772356 100644 --- a/frontend/src/app/main/ui/workspace/viewport.cljs +++ b/frontend/src/app/main/ui/workspace/viewport.cljs @@ -130,6 +130,7 @@ hover-top-frame-id (mf/use-state nil) frame-hover (mf/use-state nil) active-frames (mf/use-state #{}) + canvas-set? (mf/use-state false) ;; REFS [viewport-ref @@ -269,13 +270,14 @@ rule-area-size (/ rulers/ruler-area-size zoom)] - (when (render-v2/is-enabled?) (mf/with-effect - [canvas-ref base-objects] + [canvas-ref vbox' @canvas-set? base-objects] (let [canvas (mf/ref-val canvas-ref)] - (p/then (render-v2/init) - #(render-v2/set-canvas canvas vbox base-objects))))) + (when (and (some? vbox') (not @canvas-set?)) + (swap! canvas-set? true) + (p/then (render-v2/init) + #(render-v2/set-canvas canvas vbox' base-objects)))))) (hooks/setup-dom-events zoom disable-paste in-viewport? workspace-read-only? drawing-tool drawing-path?) (hooks/setup-viewport-size vport viewport-ref) diff --git a/frontend/src/app/render_v2/rs.cljs b/frontend/src/app/render_v2/rs.cljs index 264defffb8..efce70405f 100644 --- a/frontend/src/app/render_v2/rs.cljs +++ b/frontend/src/app/render_v2/rs.cljs @@ -14,6 +14,19 @@ [promesa.core :as p])) (defonce ^:dynamic internal-module #js {}) +(defonce ^:dynamic gpu-state #js {}) + +(defn draw-canvas [vbox objects] + (let [draw_rect (gobj/get ^js internal-module "_draw_rect") + translate (gobj/get ^js internal-module "_translate") + _ (js/console.log "vbox " (clj->js vbox)) + scale (gobj/get ^js internal-module "_scale")] + + (translate gpu-state (- (:x vbox)) (- (:y vbox))) + (doseq [shape (vals objects)] + (let [sr (:selrect shape)] + (println "*****" (:x1 sr) (:y1 sr) (:x2 sr) (:y2 sr)) + (draw_rect gpu-state (:x1 sr) (:y1 sr) (:x2 sr) (:y2 sr)))))) (defn set-canvas [canvas vbox objects] @@ -22,7 +35,6 @@ "depth" true "stencil" true "alpha" true}) - _ (js/console.log "context" context) ;; Register the context with emscripten handle (.registerContext gl context {"majorVersion" 2}) _ (.makeContextCurrent gl handle) @@ -35,16 +47,15 @@ (set! (.-width canvas) (.-clientWidth canvas)) (set! (.-height canvas) (.-clientHeight canvas)) + (set! gpu-state state) - (translate state (- (:x vbox)) (- (:y vbox))) - (doseq [shape (vals objects)] - (let [sr (:selrect shape)] - (println "-----" (:x1 sr) (:y1 sr) (:x2 sr) (:y2 sr)) - (draw_rect state (:x1 sr) (:y1 sr) (:x2 sr) (:y2 sr)))) + (draw-canvas vbox objects) #_(draw_rect state 100 100 500 500) (println "set-canvas ok" (.-width canvas) (.-height canvas)))) + + (defn on-init [module'] (set! internal-module module')