From 02044a81533d80f39e704b75fb00c2d522ef4968 Mon Sep 17 00:00:00 2001 From: "alonso.torres" Date: Fri, 19 Jan 2024 14:28:06 +0100 Subject: [PATCH 1/2] :bug: Fix problem in viewer with hidden elements --- common/src/app/common/geom/shapes/bounds.cljc | 35 ++++++++++--------- .../app/main/ui/workspace/shapes/debug.cljs | 2 +- .../app/main/ui/workspace/shapes/frame.cljs | 4 ++- 3 files changed, 22 insertions(+), 19 deletions(-) diff --git a/common/src/app/common/geom/shapes/bounds.cljc b/common/src/app/common/geom/shapes/bounds.cljc index b6769d7639..bb14ea3458 100644 --- a/common/src/app/common/geom/shapes/bounds.cljc +++ b/common/src/app/common/geom/shapes/bounds.cljc @@ -140,40 +140,41 @@ (update :width + (* 2 h-padding)) (update :height + (* 2 v-padding))))) +(defn calculate-base-bounds + [shape] + (-> (get-shape-filter-bounds shape) + (add-padding (calculate-padding shape true)))) + (defn get-object-bounds [objects shape] - (let [calculate-base-bounds - (fn [shape] - (-> (get-shape-filter-bounds shape) - (add-padding (calculate-padding shape true)))) - + (let [base-bounds (calculate-base-bounds shape) bounds (cond - (empty? (:shapes shape)) - [(calculate-base-bounds shape)] - - (or (:masked-group shape) (= :bool (:type shape))) - [(calculate-base-bounds shape)] - - (and (cfh/frame-shape? shape) (not (:show-content shape))) - [(calculate-base-bounds shape)] + (or (empty? (:shapes shape)) + (or (:masked-group shape) (= :bool (:type shape))) + (and (cfh/frame-shape? shape) (not (:show-content shape)))) + [base-bounds] :else (cfh/reduce-objects objects (fn [shape] - (and (d/not-empty? (:shapes shape)) + (and (not (:hidden shape)) + (d/not-empty? (:shapes shape)) (or (not (cfh/frame-shape? shape)) (:show-content shape)) (or (not (cfh/group-shape? shape)) (not (:masked-group shape))))) (:id shape) - (fn [result child] - (conj result (calculate-base-bounds child))) - [(calculate-base-bounds shape)])) + (fn [result child] + (cond-> result + (not (:hidden child)) + (conj (calculate-base-bounds child)))) + + [base-bounds])) children-bounds (cond->> (grc/join-rects bounds) diff --git a/frontend/src/app/main/ui/workspace/shapes/debug.cljs b/frontend/src/app/main/ui/workspace/shapes/debug.cljs index 71cec7d268..e1353644b1 100644 --- a/frontend/src/app/main/ui/workspace/shapes/debug.cljs +++ b/frontend/src/app/main/ui/workspace/shapes/debug.cljs @@ -91,7 +91,7 @@ [{:keys [shape]}] [:* (when ^boolean (dbg/enabled? :bounding-boxes) - [:& debug-bounding-boxes]) + [:& debug-bounding-boxes {:shape shape}]) (when (and ^boolean (cfh/text-shape? shape) ^boolean (dbg/enabled? :text-outline) diff --git a/frontend/src/app/main/ui/workspace/shapes/frame.cljs b/frontend/src/app/main/ui/workspace/shapes/frame.cljs index 9ecddd1e20..f365199967 100644 --- a/frontend/src/app/main/ui/workspace/shapes/frame.cljs +++ b/frontend/src/app/main/ui/workspace/shapes/frame.cljs @@ -44,7 +44,9 @@ childs (mf/deref childs-ref)] [:& shape-container {:shape shape :ref ref :disable-shadows? (cfh/is-direct-child-of-root? shape)} - [:& frame-shape {:shape shape :childs childs}]])))) + [:& frame-shape {:shape shape :childs childs}] + (when *assert* + [:& wsd/shape-debug {:shape shape}])])))) (defn check-props [new-props old-props] From 97a6095762cdbb3b2315bada2afa9aa4823a8471 Mon Sep 17 00:00:00 2001 From: "alonso.torres" Date: Fri, 19 Jan 2024 15:51:58 +0100 Subject: [PATCH 2/2] :bug: Fix problem with thumbnails size --- .../app/main/ui/workspace/shapes/frame.cljs | 31 +++++++++++++++++++ 1 file changed, 31 insertions(+) diff --git a/frontend/src/app/main/ui/workspace/shapes/frame.cljs b/frontend/src/app/main/ui/workspace/shapes/frame.cljs index f365199967..d7a3d0e23b 100644 --- a/frontend/src/app/main/ui/workspace/shapes/frame.cljs +++ b/frontend/src/app/main/ui/workspace/shapes/frame.cljs @@ -24,7 +24,9 @@ [app.main.ui.workspace.shapes.frame.dynamic-modifiers :as fdm] [app.util.debug :as dbg] [app.util.dom :as dom] + [app.util.thumbnails :as th] [app.util.timers :as tm] + [promesa.core :as p] [rumext.v2 :as mf])) (defn frame-shape-factory @@ -81,6 +83,34 @@ (fdm/use-dynamic-modifiers objects (mf/ref-val node-ref) modifiers) [:& frame-shape {:shape shape :ref node-ref}])))) +(defn image-size + [href] + (p/create + (fn [resolve _] + (let [img (js/Image.) + load-fn + (fn [] + (let [width (.-naturalWidth img) + height (.-naturalHeight img)] + (resolve {:width width :height height})))] + (set! (.-onload img) load-fn) + (set! (.-src img) href))))) + +(defn check-thumbnail-size + [image-node bounds file-id page-id frame-id] + (let [href (dom/get-attribute image-node "href") + width (dm/get-prop bounds :width) + height (dm/get-prop bounds :height) + [fixed-width fixed-height] (th/get-relative-size width height)] + ;; Even if looks like we're doing a new request the browser caches the image + ;; so really we don't. We need a different API to check the sizes + (-> (image-size href) + (p/then + (fn [{:keys [width height]}] + (when (or (not (mth/close? width fixed-width 2)) + (not (mth/close? height fixed-height 2))) + (st/emit! (dwt/request-thumbnail file-id page-id frame-id "frame")))))))) + (defn root-frame-wrapper-factory [shape-wrapper] (let [frame-shape (frame-shape-factory shape-wrapper)] @@ -125,6 +155,7 @@ task-ref (mf/use-ref nil) on-load (mf/use-fn (fn [] + (check-thumbnail-size (mf/ref-val imposter-ref) bounds file-id page-id frame-id) (mf/set-ref-val! tries-ref 0) (reset! imposter-loaded true))) on-error (mf/use-fn