diff --git a/CHANGES.md b/CHANGES.md index fa949471b..3622bba29 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -93,6 +93,7 @@ - Fix resize rotated shape with top&down constraints [Taiga #3167](https://tree.taiga.io/project/penpot/issue/3167) - Fix multi user not working [Taiga #3195](https://tree.taiga.io/project/penpot/issue/3195) - Fix guides are not duplicated with the artboard [Taiga #3072](https://tree.taiga.io/project/penpot/issue/3072) +- Fix problem when changing group size with decimal values [Taiga #3203](https://tree.taiga.io/project/penpot/issue/3203) ### :arrow_up: Deps updates ### :heart: Community contributions by (Thank you!) diff --git a/common/src/app/common/geom/shapes/constraints.cljc b/common/src/app/common/geom/shapes/constraints.cljc index 4c404d8f1..5c295acef 100644 --- a/common/src/app/common/geom/shapes/constraints.cljc +++ b/common/src/app/common/geom/shapes/constraints.cljc @@ -103,25 +103,25 @@ (defmethod constraint-modifier :scale [_ axis _ _ modifiers _] (let [{:keys [resize-vector resize-vector-2 displacement]} modifiers] - (cond-> {} - (and (some? resize-vector) - (not (mth/close? (axis resize-vector) 1))) - (assoc :resize-origin (:resize-origin modifiers) - :resize-vector (if (= :x axis) - (gpt/point (:x resize-vector) 1) - (gpt/point 1 (:y resize-vector)))) + (cond-> {} + (and (some? resize-vector) + (not= (axis resize-vector) 1)) + (assoc :resize-origin (:resize-origin modifiers) + :resize-vector (if (= :x axis) + (gpt/point (:x resize-vector) 1) + (gpt/point 1 (:y resize-vector)))) - (and (= :y axis) (some? resize-vector-2) - (not (mth/close? (:y resize-vector-2) 1))) - (assoc :resize-origin (:resize-origin-2 modifiers) - :resize-vector (gpt/point 1 (:y resize-vector-2))) + (and (= :y axis) (some? resize-vector-2) + (not (mth/close? (:y resize-vector-2) 1))) + (assoc :resize-origin (:resize-origin-2 modifiers) + :resize-vector (gpt/point 1 (:y resize-vector-2))) - (some? displacement) - (assoc :displacement - (get-displacement axis (-> (gpt/point 0 0) - (gpt/transform displacement) - (gpt/transform (:resize-transform-inverse modifiers (gmt/matrix))) - axis)))))) + (some? displacement) + (assoc :displacement + (get-displacement axis (-> (gpt/point 0 0) + (gpt/transform displacement) + (gpt/transform (:resize-transform-inverse modifiers (gmt/matrix))) + axis)))))) (defmethod constraint-modifier :default [_ _ _ _ _] {}) diff --git a/frontend/src/app/main/data/workspace/transforms.cljs b/frontend/src/app/main/data/workspace/transforms.cljs index 8d1be936f..25a0a9d22 100644 --- a/frontend/src/app/main/data/workspace/transforms.cljs +++ b/frontend/src/app/main/data/workspace/transforms.cljs @@ -110,7 +110,7 @@ ;; geometric attributes of the shapes. (declare clear-local-transform) -(declare set-modifiers-recursive) +(declare set-objects-modifiers) (declare get-ignore-tree) (defn- set-modifiers @@ -139,7 +139,7 @@ (fn [state id] (let [shape (get objects id)] (update state :workspace-modifiers - #(set-modifiers-recursive % objects shape modifiers ignore-constraints snap-pixel?))))] + #(set-objects-modifiers % objects shape modifiers ignore-constraints snap-pixel?))))] (reduce setup-modifiers state ids)))))) @@ -330,25 +330,28 @@ (assoc :displacement (gmt/translate-matrix delta-v))))] modifiers))) -(defn- set-modifiers-recursive +(defn- set-objects-modifiers [modif-tree objects shape modifiers ignore-constraints snap-pixel?] + (letfn [(set-modifiers-rec + [modif-tree shape modifiers] - (let [children (map (d/getf objects) (:shapes shape)) - modifiers (cond-> modifiers snap-pixel? (set-pixel-precision shape)) - transformed-rect (gsh/transform-selrect (:selrect shape) modifiers) + (let [children (map (d/getf objects) (:shapes shape)) + modifiers (cond-> modifiers snap-pixel? (set-pixel-precision shape)) + transformed-rect (gsh/transform-selrect (:selrect shape) modifiers) - set-child - (fn [modif-tree child] - (let [child-modifiers (gsh/calc-child-modifiers shape child modifiers ignore-constraints transformed-rect)] - (cond-> modif-tree - (not (gsh/empty-modifiers? child-modifiers)) - (set-modifiers-recursive objects child child-modifiers ignore-constraints snap-pixel?)))) + set-child + (fn [modif-tree child] + (let [child-modifiers (gsh/calc-child-modifiers shape child modifiers ignore-constraints transformed-rect)] + (cond-> modif-tree + (not (gsh/empty-modifiers? child-modifiers)) + (set-modifiers-rec child child-modifiers)))) - modif-tree - (-> modif-tree - (assoc-in [(:id shape) :modifiers] modifiers))] + modif-tree + (-> modif-tree + (assoc-in [(:id shape) :modifiers] modifiers))] - (reduce set-child modif-tree children))) + (reduce set-child modif-tree children)))] + (set-modifiers-rec modif-tree shape modifiers))) (defn- get-ignore-tree "Retrieves a map with the flag `ignore-geometry?` given a tree of modifiers" @@ -507,15 +510,17 @@ (ptk/reify ::update-dimensions ptk/UpdateEvent (update [_ state] - (let [page-id (:current-page-id state) - objects (get-in state [:workspace-data :pages-index page-id :objects]) + (let [objects (wsh/lookup-page-objects state) + layout (get state :workspace-layout) + snap-pixel? (contains? layout :snap-pixel-grid) update-modifiers (fn [state id] - (let [shape (get objects id) + (let [shape (get objects id) modifiers (gsh/resize-modifiers shape attr value)] - (update state :workspace-modifiers - #(set-modifiers-recursive % objects shape modifiers false false))))] + (-> state + (update :workspace-modifiers + #(set-objects-modifiers % objects shape modifiers false (and snap-pixel? (int? value)))))))] (reduce update-modifiers state ids))) ptk/WatchEvent