From e40245e18723964b5a00ffd32794f1c624bcceaa Mon Sep 17 00:00:00 2001 From: "alonso.torres" Date: Mon, 3 Jul 2023 13:08:08 +0200 Subject: [PATCH 1/4] :bug: Fixed problem with styles inside def for svg import --- frontend/src/app/main/data/workspace/svg_upload.cljs | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/frontend/src/app/main/data/workspace/svg_upload.cljs b/frontend/src/app/main/data/workspace/svg_upload.cljs index 7e9d99d67..dda47f024 100644 --- a/frontend/src/app/main/data/workspace/svg_upload.cljs +++ b/frontend/src/app/main/data/workspace/svg_upload.cljs @@ -206,7 +206,6 @@ :height height :x x :y y - :hidden (= tag :defs) :content (cond-> data (map? data) (update :attrs usvg/clean-attrs))} (assoc :svg-attrs attrs) @@ -437,6 +436,7 @@ children (cond->> (:content element-data) (contains? usvg/parent-tags tag) (mapv #(usvg/inherit-attributes attrs %)))] + [shape children])))))) (defn create-svg-children @@ -537,7 +537,8 @@ root-shape (create-svg-root frame-id parent-id svg-data) root-id (:id root-shape) - ;; In penpot groups have the size of their children. To respect the imported svg size and empty space let's create a transparent shape as background to respect the imported size + ;; In penpot groups have the size of their children. To respect the imported + ;; svg size and empty space let's create a transparent shape as background to respect the imported size base-background-shape {:tag :rect :attrs {:x (str vb-x) :y (str vb-y) @@ -588,6 +589,7 @@ [new-shape new-children] (create-svg-shapes svg-data position objects frame-id parent-id selected true) + changes (-> (pcb/empty-changes it page-id) (pcb/with-objects objects) (pcb/add-object new-shape)) From 66e32e9cbd5bbdf1f5f684340c3ce471fe906f98 Mon Sep 17 00:00:00 2001 From: "alonso.torres" Date: Mon, 3 Jul 2023 13:54:39 +0200 Subject: [PATCH 2/4] :bug: Fix problem with selection shortcuts --- CHANGES.md | 1 + frontend/src/app/main/data/workspace.cljs | 5 ++++- frontend/src/app/main/data/workspace/selection.cljs | 2 +- 3 files changed, 6 insertions(+), 2 deletions(-) diff --git a/CHANGES.md b/CHANGES.md index 8234a616c..c1917880f 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -31,6 +31,7 @@ - Fix context menu outside screen [Taiga #5524](https://tree.taiga.io/project/penpot/issue/5524) - Fix graphic item rename on assets pannel [Taiga #5556](https://tree.taiga.io/project/penpot/issue/5556) - Fix component and media name validation on assets panel [Taiga #5555](https://tree.taiga.io/project/penpot/issue/5555) +- Fix problem with selection shortcuts [Taiga #5492](https://tree.taiga.io/project/penpot/issue/5492) ### :heart: Community contributions by (Thank you!) diff --git a/frontend/src/app/main/data/workspace.cljs b/frontend/src/app/main/data/workspace.cljs index 966af4fdd..704332767 100644 --- a/frontend/src/app/main/data/workspace.cljs +++ b/frontend/src/app/main/data/workspace.cljs @@ -938,7 +938,10 @@ (rx/of (dwe/start-edition-mode id)) (:group :bool :frame) - (rx/of (dws/select-shapes (into (d/ordered-set) shapes))) + (let [shapes-ids (into (d/ordered-set) + (remove #(dm/get-in objects [% :hidden])) + shapes)] + (rx/of (dws/select-shapes shapes-ids))) :svg-raw nil diff --git a/frontend/src/app/main/data/workspace/selection.cljs b/frontend/src/app/main/data/workspace/selection.cljs index db4dfee10..9bab204bf 100644 --- a/frontend/src/app/main/data/workspace/selection.cljs +++ b/frontend/src/app/main/data/workspace/selection.cljs @@ -249,7 +249,7 @@ (lookup uuid/zero)) toselect (->> (cph/get-immediate-children objects (:id parent)) - (into (d/ordered-set) (comp (remove :blocked) (map :id))))] + (into (d/ordered-set) (comp (remove :hidden) (remove :blocked) (map :id))))] (rx/of (select-shapes toselect)))))) From 302750bd7e614e72aabfc3fb2a910661ebb81dc3 Mon Sep 17 00:00:00 2001 From: "alonso.torres" Date: Tue, 4 Jul 2023 10:48:28 +0200 Subject: [PATCH 3/4] :bug: Fix issue with paths line to curve and concurrent editing --- CHANGES.md | 1 + common/src/app/common/path/commands.cljc | 15 +++++++++------ frontend/src/app/util/path/format.cljs | 2 +- 3 files changed, 11 insertions(+), 7 deletions(-) diff --git a/CHANGES.md b/CHANGES.md index c1917880f..4e7d3a38d 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -32,6 +32,7 @@ - Fix graphic item rename on assets pannel [Taiga #5556](https://tree.taiga.io/project/penpot/issue/5556) - Fix component and media name validation on assets panel [Taiga #5555](https://tree.taiga.io/project/penpot/issue/5555) - Fix problem with selection shortcuts [Taiga #5492](https://tree.taiga.io/project/penpot/issue/5492) +- Fix issue with paths line to curve and concurrent editing [Taiga #5191](https://tree.taiga.io/project/penpot/issue/5191) ### :heart: Community contributions by (Thank you!) diff --git a/common/src/app/common/path/commands.cljc b/common/src/app/common/path/commands.cljc index 7a02f6ec4..a434cb09e 100644 --- a/common/src/app/common/path/commands.cljc +++ b/common/src/app/common/path/commands.cljc @@ -50,12 +50,15 @@ (defn update-curve-to [command h1 h2] - (-> command - (assoc :command :curve-to) - (assoc-in [:params :c1x] (:x h1)) - (assoc-in [:params :c1y] (:y h1)) - (assoc-in [:params :c2x] (:x h2)) - (assoc-in [:params :c2y] (:y h2)))) + (let [params {:x (-> command :params :x) + :y (-> command :params :y) + :c1x (:x h1) + :c1y (:y h1) + :c2x (:x h2) + :c2y (:y h2)}] + (-> command + (assoc :command :curve-to) + (assoc :params params)))) (defn make-curve-to [to h1 h2] diff --git a/frontend/src/app/util/path/format.cljs b/frontend/src/app/util/path/format.cljs index f7628bc33..c0d38829d 100644 --- a/frontend/src/app/util/path/format.cljs +++ b/frontend/src/app/util/path/format.cljs @@ -72,7 +72,7 @@ :curve-to (let [{:keys [c1x c1y c2x c2y]} params] - (join-params c1x c1y c2x c2y x y)) + (join-params (or c1x x) (or c1y y) (or c2x x) (or c2y y) x y)) (:smooth-curve-to :quadratic-bezier-curve-to) (let [{:keys [cx cy]} params] From 302bfd30074cd1ee8c28949cc39f307cbe0ba33e Mon Sep 17 00:00:00 2001 From: "alonso.torres" Date: Mon, 3 Jul 2023 15:10:49 +0200 Subject: [PATCH 4/4] :bug: Fix problems with locked frames --- CHANGES.md | 1 + common/src/app/common/types/shape_tree.cljc | 11 +++++++++-- .../main/data/workspace/drawing/common.cljs | 18 ++++++++++-------- .../src/app/main/data/workspace/shapes.cljs | 4 +++- .../app/main/data/workspace/svg_upload.cljs | 2 +- .../app/main/ui/workspace/viewport/hooks.cljs | 1 + .../main/ui/workspace/viewport/widgets.cljs | 4 +++- 7 files changed, 28 insertions(+), 13 deletions(-) diff --git a/CHANGES.md b/CHANGES.md index 4e7d3a38d..9de31fbe1 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -33,6 +33,7 @@ - Fix component and media name validation on assets panel [Taiga #5555](https://tree.taiga.io/project/penpot/issue/5555) - Fix problem with selection shortcuts [Taiga #5492](https://tree.taiga.io/project/penpot/issue/5492) - Fix issue with paths line to curve and concurrent editing [Taiga #5191](https://tree.taiga.io/project/penpot/issue/5191) +- Fix problems with locked layers [Taiga #5139](https://tree.taiga.io/project/penpot/issue/5139) ### :heart: Community contributions by (Thank you!) diff --git a/common/src/app/common/types/shape_tree.cljc b/common/src/app/common/types/shape_tree.cljc index 731f31de2..f84db3e4d 100644 --- a/common/src/app/common/types/shape_tree.cljc +++ b/common/src/app/common/types/shape_tree.cljc @@ -260,7 +260,11 @@ (let [frame-ids (cond->> (all-frames-by-position objects position) (some? excluded) - (remove excluded)) + (remove excluded) + + :always + (remove #(or (dm/get-in objects [% :hidden]) + (dm/get-in objects [% :blocked])))) frame-set (set frame-ids)] @@ -276,7 +280,10 @@ "Search the top nested frame in a list of ids" [objects ids] - (let [frame-ids (->> ids (filter #(cph/frame-shape? objects %))) + (let [frame-ids (->> ids + (filter #(cph/frame-shape? objects %)) + (remove #(or (dm/get-in objects [% :hidden]) + (dm/get-in objects [% :blocked])))) frame-set (set frame-ids)] (loop [current-id (first frame-ids)] (let [current-shape (get objects current-id) diff --git a/frontend/src/app/main/data/workspace/drawing/common.cljs b/frontend/src/app/main/data/workspace/drawing/common.cljs index 796fe8620..ed9790e24 100644 --- a/frontend/src/app/main/data/workspace/drawing/common.cljs +++ b/frontend/src/app/main/data/workspace/drawing/common.cljs @@ -63,20 +63,22 @@ ;; Add & select the created shape to the workspace (rx/concat - (if (= :text (:type shape)) + (if (or (= :text (:type shape)) (= :frame (:type shape))) (rx/of (dwu/start-undo-transaction (:id shape))) (rx/empty)) (rx/of (dwsh/add-shape shape {:no-select? (= tool :curve)})) (if (= :frame (:type shape)) - (->> (uw/ask! {:cmd :selection/query - :page-id page-id - :rect (:selrect shape) - :include-frames? true - :full-frame? true}) - (rx/map #(cph/clean-loops objects %)) - (rx/map #(dwsh/move-shapes-into-frame (:id shape) %))) + (rx/concat + (->> (uw/ask! {:cmd :selection/query + :page-id page-id + :rect (:selrect shape) + :include-frames? true + :full-frame? true}) + (rx/map #(cph/clean-loops objects %)) + (rx/map #(dwsh/move-shapes-into-frame (:id shape) %))) + (rx/of (dwu/commit-undo-transaction (:id shape)))) (rx/empty))))) ;; Delay so the mouse event can read the drawing state diff --git a/frontend/src/app/main/data/workspace/shapes.cljs b/frontend/src/app/main/data/workspace/shapes.cljs index 295e880a9..0ef0f39a2 100644 --- a/frontend/src/app/main/data/workspace/shapes.cljs +++ b/frontend/src/app/main/data/workspace/shapes.cljs @@ -143,12 +143,14 @@ (cond-> (ctl/grid-layout? objects frame-id) (pcb/update-shapes [frame-id] ctl/assign-cells)))))) -(defn move-shapes-into-frame [frame-id shapes] +(defn move-shapes-into-frame + [frame-id shapes] (ptk/reify ::move-shapes-into-frame ptk/WatchEvent (watch [it state _] (let [page-id (:current-page-id state) objects (wsh/lookup-page-objects state page-id) + shapes (->> shapes (remove #(dm/get-in objects [% :blocked]))) changes (-> (pcb/empty-changes it page-id) (pcb/with-objects objects)) changes (prepare-move-shapes-into-frame changes diff --git a/frontend/src/app/main/data/workspace/svg_upload.cljs b/frontend/src/app/main/data/workspace/svg_upload.cljs index dda47f024..53fbbbafb 100644 --- a/frontend/src/app/main/data/workspace/svg_upload.cljs +++ b/frontend/src/app/main/data/workspace/svg_upload.cljs @@ -196,7 +196,7 @@ (-> (update-in [:svg-attrs :style] dissoc :mix-blend-mode) (assoc :blend-mode (-> (get-in shape [:svg-attrs :style :mix-blend-mode]) assert-valid-blend-mode))))) -(defn create-raw-svg [name frame-id svg-data {:keys [tag attrs] :as data}] +(defn create-raw-svg [name frame-id svg-data {:keys [attrs] :as data}] (let [{:keys [x y width height offset-x offset-y]} svg-data] (-> {:id (uuid/next) :type :svg-raw diff --git a/frontend/src/app/main/ui/workspace/viewport/hooks.cljs b/frontend/src/app/main/ui/workspace/viewport/hooks.cljs index e4787f4ec..0a1245239 100644 --- a/frontend/src/app/main/ui/workspace/viewport/hooks.cljs +++ b/frontend/src/app/main/ui/workspace/viewport/hooks.cljs @@ -203,6 +203,7 @@ ids (into (d/ordered-set) + (remove #(dm/get-in objects [% :blocked])) (ctt/sort-z-index objects ids {:bottom-frames? mod?})) grouped? (fn [id] (contains? #{:group :bool} (get-in objects [id :type]))) diff --git a/frontend/src/app/main/ui/workspace/viewport/widgets.cljs b/frontend/src/app/main/ui/workspace/viewport/widgets.cljs index 74dd73d2f..7755d080a 100644 --- a/frontend/src/app/main/ui/workspace/viewport/widgets.cljs +++ b/frontend/src/app/main/ui/workspace/viewport/widgets.cljs @@ -149,7 +149,9 @@ text-pos-x (if (:use-for-thumbnail? frame) 15 0)] (when (not (:hidden frame)) - [:g.frame-title {:id (dm/str "frame-title-" (:id frame)) :transform (vwu/title-transform frame zoom)} + [:g.frame-title {:id (dm/str "frame-title-" (:id frame)) + :transform (vwu/title-transform frame zoom) + :pointer-events (when (:blocked frame) "none")} (when (:use-for-thumbnail? frame) [:svg {:x 0 :y -9