From d0a15cda96714b7c315b83839158d30cea605d68 Mon Sep 17 00:00:00 2001 From: "alonso.torres" Date: Thu, 12 Jan 2023 17:04:43 +0100 Subject: [PATCH 1/5] :bug: Fix issue when mirroring artboard --- .../app/common/geom/shapes/constraints.cljc | 34 +++++++++++++------ 1 file changed, 23 insertions(+), 11 deletions(-) diff --git a/common/src/app/common/geom/shapes/constraints.cljc b/common/src/app/common/geom/shapes/constraints.cljc index f0d1fe599..6cdf6c5d9 100644 --- a/common/src/app/common/geom/shapes/constraints.cljc +++ b/common/src/app/common/geom/shapes/constraints.cljc @@ -146,10 +146,13 @@ ((if (= :x axis) center-horizontal-vector center-vertical-vector) child-points parent-points)) (defn displacement - [before-v after-v] - (let [angl (gpt/angle-with-other before-v after-v) - sign (if (mth/close? angl 180) -1 1) + [before-v after-v before-parent-side-v after-parent-side-v] + + (let [before-angl (gpt/angle-with-other before-v before-parent-side-v) + after-angl (gpt/angle-with-other after-v after-parent-side-v) + sign (if (mth/close? before-angl after-angl) 1 -1) length (* sign (gpt/length before-v))] + (if (mth/almost-zero? length) after-v (gpt/subtract after-v (gpt/scale (gpt/unit after-v) length))))) @@ -173,14 +176,18 @@ (defmethod constraint-modifier :start [_ axis child-points-before parent-points-before child-points-after parent-points-after] (let [start-before (start-vector axis child-points-before parent-points-before) - start-after (start-vector axis child-points-after parent-points-after)] - (ctm/move-modifiers (displacement start-before start-after)))) + start-after (start-vector axis child-points-after parent-points-after) + before-side-vector (side-vector axis parent-points-before) + after-side-vector (side-vector axis parent-points-after)] + (ctm/move-modifiers (displacement start-before start-after before-side-vector after-side-vector)))) (defmethod constraint-modifier :end [_ axis child-points-before parent-points-before child-points-after parent-points-after] (let [end-before (end-vector axis child-points-before parent-points-before) - end-after (end-vector axis child-points-after parent-points-after)] - (ctm/move-modifiers (displacement end-before end-after)))) + end-after (end-vector axis child-points-after parent-points-after) + before-side-vector (side-vector axis parent-points-before) + after-side-vector (side-vector axis parent-points-after)] + (ctm/move-modifiers (displacement end-before end-after before-side-vector after-side-vector)))) (defmethod constraint-modifier :fixed [_ axis child-points-before parent-points-before child-points-after parent-points-after] @@ -190,8 +197,11 @@ start-before (start-vector axis child-points-before parent-points-before) start-after (start-vector axis child-points-after parent-points-after) - disp-end (displacement end-before end-after) - disp-start (displacement start-before start-after) + before-side-vector (side-vector axis parent-points-before) + after-side-vector (side-vector axis parent-points-after) + + disp-end (displacement end-before end-after before-side-vector after-side-vector) + disp-start (displacement start-before start-after before-side-vector after-side-vector) ;; We get the current axis side and grow it on both side by the end+start displacements before-vec (side-vector axis child-points-after) @@ -214,8 +224,10 @@ (defmethod constraint-modifier :center [_ axis child-points-before parent-points-before child-points-after parent-points-after] (let [center-before (center-vector axis child-points-before parent-points-before) - center-after (center-vector axis child-points-after parent-points-after)] - (ctm/move-modifiers (displacement center-before center-after)))) + center-after (center-vector axis child-points-after parent-points-after) + before-side-vector (side-vector axis parent-points-before) + after-side-vector (side-vector axis parent-points-after)] + (ctm/move-modifiers (displacement center-before center-after before-side-vector after-side-vector)))) (defmethod constraint-modifier :default [_ _ _ _ _] []) From 196e193281e4be5fc02e57d8095881bd42bab88a Mon Sep 17 00:00:00 2001 From: "alonso.torres" Date: Fri, 13 Jan 2023 09:46:26 +0100 Subject: [PATCH 2/5] :bug: Fix error message when the thumbnail fails to be added --- frontend/src/app/main/data/workspace/thumbnails.cljs | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/frontend/src/app/main/data/workspace/thumbnails.cljs b/frontend/src/app/main/data/workspace/thumbnails.cljs index cb66f59cb..63e288f3c 100644 --- a/frontend/src/app/main/data/workspace/thumbnails.cljs +++ b/frontend/src/app/main/data/workspace/thumbnails.cljs @@ -69,7 +69,8 @@ (rx/concat ;; Delete the thumbnail first so if we interrupt we can regenerate after - (rp/cmd! :upsert-file-object-thumbnail params) + (->> (rp/cmd! :upsert-file-object-thumbnail params) + (rx/catch #(rx/empty))) (->> blob-result (rx/merge-map (fn [blob] @@ -84,7 +85,9 @@ (rx/merge ;; Update the local copy of the thumbnails so we don't need to request it again (rx/of #(update % :workspace-thumbnails assoc object-id data)) - (->> (rp/cmd! :upsert-file-object-thumbnail params) + (->> (rx/timer 5000) + (rx/flat-map #(rp/cmd! :upsert-file-object-thumbnail params)) + (rx/catch #(rx/empty)) (rx/ignore)))) (rx/empty))))))))))) From 7a796bc83f3e03781d86b4632044a54b982c45d6 Mon Sep 17 00:00:00 2001 From: "alonso.torres" Date: Fri, 13 Jan 2023 09:54:46 +0100 Subject: [PATCH 3/5] :bug: Fix problem with thumbnails when duplicating artboards --- .../src/app/main/data/workspace/selection.cljs | 18 +++--------------- 1 file changed, 3 insertions(+), 15 deletions(-) diff --git a/frontend/src/app/main/data/workspace/selection.cljs b/frontend/src/app/main/data/workspace/selection.cljs index 8ff0d6668..5a31013a0 100644 --- a/frontend/src/app/main/data/workspace/selection.cljs +++ b/frontend/src/app/main/data/workspace/selection.cljs @@ -22,7 +22,6 @@ [app.main.data.workspace.changes :as dch] [app.main.data.workspace.collapse :as dwc] [app.main.data.workspace.state-helpers :as wsh] - [app.main.data.workspace.thumbnails :as dwt] [app.main.data.workspace.undo :as dwu] [app.main.data.workspace.zoom :as dwz] [app.main.refs :as refs] @@ -549,13 +548,6 @@ (map #(get-in % [:obj :id])) (into (d/ordered-set))) - dup-frames (->> changes - :redo-changes - (filter #(= (:type %) :add-obj)) - (filter #(selected (:old-id %))) - (filter #(= :frame (get-in % [:obj :type]))) - (map #(vector (:old-id %) (get-in % [:obj :id])))) - id-duplicated (first new-selected) frames (into #{} @@ -563,18 +555,14 @@ selected) undo-id (js/Symbol)] - (rx/concat - (->> (rx/from dup-frames) - (rx/map (fn [[old-id new-id]] (dwt/duplicate-thumbnail old-id new-id)))) - - ;; Warning: This order is important for the focus mode. - (rx/of + ;; Warning: This order is important for the focus mode. + (rx/of (dwu/start-undo-transaction undo-id) (dch/commit-changes changes) (select-shapes new-selected) (ptk/data-event :layout/update frames) (memorize-duplicated id-original id-duplicated) - (dwu/commit-undo-transaction undo-id)))))))))) + (dwu/commit-undo-transaction undo-id))))))))) (defn change-hover-state [id value] From b203c87dbb483a20c111f03ca4b1267f78e52d51 Mon Sep 17 00:00:00 2001 From: "alonso.torres" Date: Fri, 13 Jan 2023 14:21:28 +0100 Subject: [PATCH 4/5] :bug: Fix problem with rotated texts inside flex layout --- frontend/src/app/main/data/workspace/modifiers.cljs | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/frontend/src/app/main/data/workspace/modifiers.cljs b/frontend/src/app/main/data/workspace/modifiers.cljs index 79f1fb2db..3f3495a5d 100644 --- a/frontend/src/app/main/data/workspace/modifiers.cljs +++ b/frontend/src/app/main/data/workspace/modifiers.cljs @@ -16,7 +16,6 @@ [app.common.pages.helpers :as cph] [app.common.spec :as us] [app.common.types.modifiers :as ctm] - [app.common.types.shape :as cts] [app.common.types.shape.layout :as ctl] [app.main.data.workspace.changes :as dch] [app.main.data.workspace.comments :as-alias dwcm] @@ -206,13 +205,10 @@ [shape {:keys [width height]}] (cond-> shape (some? width) - (assoc :width width) + (gsh/transform-shape (ctm/change-dimensions-modifiers shape :width width {:ignore-lock? true})) (some? height) - (assoc :height height) - - (or (some? width) (some? height)) - (cts/setup-rect-selrect))) + (gsh/transform-shape (ctm/change-dimensions-modifiers shape :height height {:ignore-lock? true})))) (defn apply-text-modifiers [objects text-modifiers] From 5f0f3abeaeb6f4cd5bec4b3c8c3e378065197799 Mon Sep 17 00:00:00 2001 From: "alonso.torres" Date: Fri, 13 Jan 2023 14:21:48 +0100 Subject: [PATCH 5/5] :bug: Fix problem when dropping indices in flipped frames --- .../app/common/geom/shapes/flex_layout.cljc | 2 +- .../geom/shapes/flex_layout/drop_area.cljc | 35 ++++++++++++++++--- .../app/main/ui/workspace/viewport/debug.cljs | 12 +++---- 3 files changed, 36 insertions(+), 13 deletions(-) diff --git a/common/src/app/common/geom/shapes/flex_layout.cljc b/common/src/app/common/geom/shapes/flex_layout.cljc index 9119d8dab..6addec0af 100644 --- a/common/src/app/common/geom/shapes/flex_layout.cljc +++ b/common/src/app/common/geom/shapes/flex_layout.cljc @@ -15,7 +15,7 @@ (dm/export fbo/layout-content-bounds) (dm/export fbo/child-layout-bound-points) (dm/export fdr/get-drop-index) -(dm/export fdr/layout-drop-areas) +(dm/export fdr/get-drop-areas) (dm/export fli/calc-layout-data) (dm/export fmo/layout-child-modifiers) diff --git a/common/src/app/common/geom/shapes/flex_layout/drop_area.cljc b/common/src/app/common/geom/shapes/flex_layout/drop_area.cljc index fe686ae0e..f1c019184 100644 --- a/common/src/app/common/geom/shapes/flex_layout/drop_area.cljc +++ b/common/src/app/common/geom/shapes/flex_layout/drop_area.cljc @@ -8,11 +8,14 @@ (:require [app.common.data :as d] [app.common.geom.matrix :as gmt] + [app.common.geom.point :as gpt] [app.common.geom.shapes.common :as gco] [app.common.geom.shapes.flex-layout.lines :as fli] [app.common.geom.shapes.points :as gpo] [app.common.geom.shapes.rect :as gsr] + [app.common.geom.shapes.transforms :as gtr] [app.common.pages.helpers :as cph] + [app.common.types.modifiers :as ctm] [app.common.types.shape.layout :as ctl])) (defn drop-child-areas @@ -179,14 +182,36 @@ (+ (:y line-area) (:height line-area)) (rest lines))))))) +(defn get-flip-modifiers + [{:keys [flip-x flip-y transform transform-inverse] :as shape}] + + (if (or flip-x flip-y) + (let [modifiers + (-> (ctm/empty) + (ctm/resize (gpt/point (if flip-x -1.0 1.0) + (if flip-y -1.0 1.0)) + (gco/center-shape shape) + transform + transform-inverse))] + [(gtr/transform-shape shape modifiers) modifiers]) + [shape nil])) + +(defn get-drop-areas + [frame objects] + (let [[frame modifiers] (get-flip-modifiers frame) + children (->> (cph/get-immediate-children objects (:id frame)) + (remove :hidden) + (map #(cond-> % (some? modifiers) + (gtr/transform-shape modifiers))) + (map #(vector (gpo/parent-coords-bounds (:points %) (:points frame)) %))) + layout-data (fli/calc-layout-data frame children (:points frame)) + drop-areas (layout-drop-areas frame layout-data children)] + drop-areas)) + (defn get-drop-index [frame-id objects position] (let [frame (get objects frame-id) + drop-areas (get-drop-areas frame objects) position (gmt/transform-point-center position (gco/center-shape frame) (:transform-inverse frame)) - children (->> (cph/get-immediate-children objects frame-id) - (remove :hidden) - (map #(vector (gpo/parent-coords-bounds (:points %) (:points frame)) %))) - layout-data (fli/calc-layout-data frame children (:points frame)) - drop-areas (layout-drop-areas frame layout-data children) area (d/seek #(gsr/contains-point? % position) drop-areas)] (:index area))) diff --git a/frontend/src/app/main/ui/workspace/viewport/debug.cljs b/frontend/src/app/main/ui/workspace/viewport/debug.cljs index 21b5aecf3..567a0f016 100644 --- a/frontend/src/app/main/ui/workspace/viewport/debug.cljs +++ b/frontend/src/app/main/ui/workspace/viewport/debug.cljs @@ -63,7 +63,8 @@ col? (ctl/col? shape) children (->> (cph/get-immediate-children objects (:id shape)) - (remove :hidden)) + (remove :hidden) + (map #(vector (gpo/parent-coords-bounds (:points %) (:points shape)) %))) layout-data (gsl/calc-layout-data shape children (:points shape)) layout-bounds (:layout-bounds layout-data) @@ -85,7 +86,8 @@ (mf/defc debug-drop-zones "Debug component to show the auto-layout drop areas" - {::mf/wrap-props false} + {::mf/wrap [#(mf/memo' % (mf/check-props ["objects" "selected-shapes" "hover-top-frame-id"]))] + ::mf/wrap-props false} [props] (let [objects (unchecked-get props "objects") @@ -100,11 +102,7 @@ shape (or selected-frame (get objects hover-top-frame-id))] (when (and shape (:layout shape)) - (let [children (->> (cph/get-immediate-children objects (:id shape)) - (remove :hidden) - (map #(vector (gpo/parent-coords-bounds (:points %) (:points shape)) %))) - layout-data (gsl/calc-layout-data shape children (:points shape)) - drop-areas (gsl/layout-drop-areas shape layout-data children)] + (let [drop-areas (gsl/get-drop-areas shape objects)] [:g.debug-layout {:pointer-events "none" :transform (gsh/transform-str shape)} (for [[idx drop-area] (d/enumerate drop-areas)]