mirror of
https://github.com/penpot/penpot.git
synced 2025-01-22 22:49:01 -05:00
🐛 Fix guides are not duplicated with the artboard
This commit is contained in:
parent
658e3b7aee
commit
d28b4092d9
3 changed files with 51 additions and 15 deletions
|
@ -90,6 +90,7 @@
|
||||||
- Fix component name in sidebar widget [Taiga #3144](https://tree.taiga.io/project/penpot/issue/3144)
|
- Fix component name in sidebar widget [Taiga #3144](https://tree.taiga.io/project/penpot/issue/3144)
|
||||||
- Fix resize rotated shape with top&down constraints [Taiga #3167](https://tree.taiga.io/project/penpot/issue/3167)
|
- 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 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)
|
||||||
|
|
||||||
### :arrow_up: Deps updates
|
### :arrow_up: Deps updates
|
||||||
### :heart: Community contributions by (Thank you!)
|
### :heart: Community contributions by (Thank you!)
|
||||||
|
|
|
@ -393,6 +393,11 @@
|
||||||
interactions)))
|
interactions)))
|
||||||
(vals objects))
|
(vals objects))
|
||||||
|
|
||||||
|
;; If any of the deleted shapes is a frame with guides
|
||||||
|
guides (into {} (map (juxt :id identity) (->> (get-in page [:options :guides])
|
||||||
|
(vals)
|
||||||
|
(filter #(not (contains? ids (:frame-id %)))))))
|
||||||
|
|
||||||
starting-flows
|
starting-flows
|
||||||
(filter (fn [flow]
|
(filter (fn [flow]
|
||||||
;; If any of the deleted is a frame that starts a flow,
|
;; If any of the deleted is a frame that starts a flow,
|
||||||
|
@ -432,6 +437,7 @@
|
||||||
changes (-> (pcb/empty-changes it page-id)
|
changes (-> (pcb/empty-changes it page-id)
|
||||||
(pcb/with-page page)
|
(pcb/with-page page)
|
||||||
(pcb/with-objects objects)
|
(pcb/with-objects objects)
|
||||||
|
(pcb/set-page-option :guides guides)
|
||||||
(pcb/remove-objects all-children)
|
(pcb/remove-objects all-children)
|
||||||
(pcb/remove-objects ids)
|
(pcb/remove-objects ids)
|
||||||
(pcb/remove-objects empty-parents)
|
(pcb/remove-objects empty-parents)
|
||||||
|
|
|
@ -274,6 +274,7 @@
|
||||||
(declare prepare-duplicate-frame-change)
|
(declare prepare-duplicate-frame-change)
|
||||||
(declare prepare-duplicate-shape-change)
|
(declare prepare-duplicate-shape-change)
|
||||||
(declare prepare-duplicate-flows)
|
(declare prepare-duplicate-flows)
|
||||||
|
(declare prepare-duplicate-guides)
|
||||||
|
|
||||||
(defn prepare-duplicate-changes
|
(defn prepare-duplicate-changes
|
||||||
"Prepare objects to duplicate: generate new id, give them unique names,
|
"Prepare objects to duplicate: generate new id, give them unique names,
|
||||||
|
@ -302,7 +303,9 @@
|
||||||
delta)
|
delta)
|
||||||
init-changes))]
|
init-changes))]
|
||||||
|
|
||||||
(prepare-duplicate-flows changes shapes page ids-map)))
|
(-> changes
|
||||||
|
(prepare-duplicate-flows shapes page ids-map)
|
||||||
|
(prepare-duplicate-guides shapes page ids-map delta))))
|
||||||
|
|
||||||
(defn- prepare-duplicate-change
|
(defn- prepare-duplicate-change
|
||||||
[changes objects page unames update-unames! ids-map shape delta]
|
[changes objects page unames update-unames! ids-map shape delta]
|
||||||
|
@ -362,20 +365,20 @@
|
||||||
changes (-> (pcb/add-object changes new-obj {:ignore-touched true})
|
changes (-> (pcb/add-object changes new-obj {:ignore-touched true})
|
||||||
(pcb/amend-last-change #(assoc % :old-id (:id obj))))]
|
(pcb/amend-last-change #(assoc % :old-id (:id obj))))]
|
||||||
|
|
||||||
(reduce (fn [changes child]
|
(reduce (fn [changes child]
|
||||||
(prepare-duplicate-shape-change changes
|
(prepare-duplicate-shape-change changes
|
||||||
objects
|
objects
|
||||||
page
|
page
|
||||||
unames
|
unames
|
||||||
update-unames!
|
update-unames!
|
||||||
ids-map
|
ids-map
|
||||||
child
|
child
|
||||||
delta
|
delta
|
||||||
frame-id
|
frame-id
|
||||||
new-id))
|
new-id))
|
||||||
changes
|
changes
|
||||||
(map (d/getf objects) (:shapes obj))))
|
(map (d/getf objects) (:shapes obj))))
|
||||||
changes))
|
changes))
|
||||||
|
|
||||||
(defn- prepare-duplicate-flows
|
(defn- prepare-duplicate-flows
|
||||||
[changes shapes page ids-map]
|
[changes shapes page ids-map]
|
||||||
|
@ -399,6 +402,32 @@
|
||||||
(pcb/update-page-option changes :flows update-flows))
|
(pcb/update-page-option changes :flows update-flows))
|
||||||
changes)))
|
changes)))
|
||||||
|
|
||||||
|
(defn- prepare-duplicate-guides
|
||||||
|
[changes shapes page ids-map delta]
|
||||||
|
(let [guides (get-in page [:options :guides])
|
||||||
|
frames (->> shapes
|
||||||
|
(filter #(= (:type %) :frame)))
|
||||||
|
new-guides (reduce
|
||||||
|
(fn [g frame]
|
||||||
|
(let [new-id (ids-map (:id frame))
|
||||||
|
new-frame (-> frame
|
||||||
|
(geom/move delta))
|
||||||
|
new-guides (->> guides
|
||||||
|
(vals)
|
||||||
|
(filter #(= (:frame-id %) (:id frame)))
|
||||||
|
(map #(-> %
|
||||||
|
(assoc :id (uuid/next))
|
||||||
|
(assoc :frame-id new-id)
|
||||||
|
(assoc :position (if (= (:axis %) :x)
|
||||||
|
(+ (:position %) (- (:x new-frame) (:x frame)))
|
||||||
|
(+ (:position %) (- (:y new-frame) (:y frame))))))))]
|
||||||
|
(conj g
|
||||||
|
(into {} (map (juxt :id identity) new-guides)))))
|
||||||
|
guides
|
||||||
|
frames)]
|
||||||
|
(-> (pcb/with-page changes page)
|
||||||
|
(pcb/set-page-option :guides new-guides))))
|
||||||
|
|
||||||
(defn duplicate-changes-update-indices
|
(defn duplicate-changes-update-indices
|
||||||
"Updates the changes to correctly set the indexes of the duplicated objects,
|
"Updates the changes to correctly set the indexes of the duplicated objects,
|
||||||
depending on the index of the original object respect their parent."
|
depending on the index of the original object respect their parent."
|
||||||
|
|
Loading…
Add table
Reference in a new issue