mirror of
https://github.com/penpot/penpot.git
synced 2025-01-23 23:18:48 -05:00
🐛 Fix sizes of migrated graphics
This commit is contained in:
parent
3a67e51f2f
commit
bd8fcfde28
1 changed files with 71 additions and 11 deletions
|
@ -32,6 +32,7 @@
|
|||
[app.common.types.container :as ctn]
|
||||
[app.common.types.file :as ctf]
|
||||
[app.common.types.grid :as ctg]
|
||||
[app.common.types.modifiers :as ctm]
|
||||
[app.common.types.page :as ctp]
|
||||
[app.common.types.pages-list :as ctpl]
|
||||
[app.common.types.shape :as cts]
|
||||
|
@ -1051,8 +1052,8 @@
|
|||
(fix-false-copies)
|
||||
(fix-component-root-without-component)
|
||||
(fix-copies-names)
|
||||
(fix-copies-of-detached); <- Do not add fixes after this and fix-orphan-copies call
|
||||
)))
|
||||
(fix-copies-of-detached)))); <- Do not add fixes after this and fix-orphan-copies call
|
||||
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
;; COMPONENTS MIGRATION
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
|
@ -1101,8 +1102,8 @@
|
|||
{:type :frame
|
||||
:x (:x position)
|
||||
:y (:y position)
|
||||
:width (+ width (* 2 grid-gap))
|
||||
:height (+ height (* 2 grid-gap))
|
||||
:width (+ width grid-gap)
|
||||
:height (+ height grid-gap)
|
||||
:name name
|
||||
:frame-id uuid/zero
|
||||
:parent-id uuid/zero}))
|
||||
|
@ -1388,7 +1389,7 @@
|
|||
(sbuilder/create-svg-shapes svg-data position objects frame-id frame-id #{} false)))
|
||||
|
||||
(defn- process-media-object
|
||||
[fdata page-id frame-id mobj position]
|
||||
[fdata page-id frame-id mobj position shape-cb]
|
||||
(let [page (ctpl/get-page fdata page-id)
|
||||
file-id (get fdata :id)
|
||||
|
||||
|
@ -1438,16 +1439,17 @@
|
|||
cfsh/prepare-create-artboard-from-selection)
|
||||
changes (fcb/concat-changes changes changes2)]
|
||||
|
||||
(shape-cb shape)
|
||||
(:redo-changes changes)))
|
||||
|
||||
(defn- create-media-grid
|
||||
[fdata page-id frame-id grid media-group]
|
||||
[fdata page-id frame-id grid media-group shape-cb]
|
||||
(letfn [(process [fdata mobj position]
|
||||
(let [position (gpt/add position (gpt/point grid-gap grid-gap))
|
||||
tp (dt/tpoint)
|
||||
err (volatile! false)]
|
||||
(try
|
||||
(let [changes (process-media-object fdata page-id frame-id mobj position)]
|
||||
(let [changes (process-media-object fdata page-id frame-id mobj position shape-cb)]
|
||||
(cp/process-changes fdata changes false))
|
||||
|
||||
(catch Throwable cause
|
||||
|
@ -1496,6 +1498,43 @@
|
|||
(or (process fdata mobj position) fdata))
|
||||
(assoc-in fdata [:options :components-v2] true)))))
|
||||
|
||||
(defn- fix-graphics-size
|
||||
[fdata new-grid page-id frame-id]
|
||||
(let [modify-shape (fn [page shape-id modifiers]
|
||||
(ctn/update-shape page shape-id #(gsh/transform-shape % modifiers)))
|
||||
|
||||
resize-frame (fn [page]
|
||||
(let [{:keys [width height]} (meta new-grid)
|
||||
|
||||
frame (ctst/get-shape page frame-id)
|
||||
width (+ width grid-gap)
|
||||
height (+ height grid-gap)
|
||||
|
||||
modif-frame (ctm/resize nil
|
||||
(gpt/point (/ width (:width frame))
|
||||
(/ height (:height frame)))
|
||||
(gpt/point (:x frame) (:y frame)))]
|
||||
|
||||
(modify-shape page frame-id modif-frame)))
|
||||
|
||||
move-components (fn [page]
|
||||
(let [frame (get (:objects page) frame-id)
|
||||
shapes (map (d/getf (:objects page)) (:shapes frame))]
|
||||
(->> (d/zip shapes new-grid)
|
||||
(reduce (fn [page [shape position]]
|
||||
(let [position (gpt/add position (gpt/point grid-gap grid-gap))
|
||||
modif-shape (ctm/move nil
|
||||
(gpt/point (- (:x position) (:x (:selrect shape)))
|
||||
(- (:y position) (:y (:selrect shape)))))
|
||||
children-ids (cfh/get-children-ids-with-self (:objects page) (:id shape))]
|
||||
(reduce #(modify-shape %1 %2 modif-shape)
|
||||
page
|
||||
children-ids)))
|
||||
page))))]
|
||||
(-> fdata
|
||||
(ctpl/update-page page-id resize-frame)
|
||||
(ctpl/update-page page-id move-components))))
|
||||
|
||||
(defn- migrate-graphics
|
||||
[fdata]
|
||||
(if (empty? (:media fdata))
|
||||
|
@ -1533,11 +1572,32 @@
|
|||
(:id frame)
|
||||
(:id frame)
|
||||
nil
|
||||
true))]
|
||||
(recur (next groups)
|
||||
(create-media-grid fdata page-id (:id frame) grid assets)
|
||||
(gpt/add position (gpt/point 0 (+ height (* 2 grid-gap) frame-gap))))))))))
|
||||
true))
|
||||
new-shapes (volatile! [])
|
||||
|
||||
add-shape (fn [shape]
|
||||
(vswap! new-shapes conj shape))
|
||||
|
||||
fdata' (create-media-grid fdata page-id (:id frame) grid assets add-shape)
|
||||
|
||||
;; When svgs had different width&height and viewport, sometimes the old graphics
|
||||
;; importer didn't calculat well the media object size. So, after migration we
|
||||
;; recalculate grid size from the actual size of the created shapes.
|
||||
new-grid (ctst/generate-shape-grid @new-shapes position grid-gap)
|
||||
|
||||
{new-width :width new-height :height} (meta new-grid)
|
||||
|
||||
fdata'' (if-not (and (mth/close? width new-width) (mth/close? height new-height))
|
||||
(do
|
||||
(l/inf :hint "fixing graphics sizes"
|
||||
:file-id (str (:id fdata))
|
||||
:group group-name)
|
||||
(fix-graphics-size fdata' new-grid page-id (:id frame)))
|
||||
fdata')]
|
||||
|
||||
(recur (next groups)
|
||||
fdata''
|
||||
(gpt/add position (gpt/point 0 (+ height (* 2 grid-gap) frame-gap))))))))))
|
||||
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
;; PRIVATE HELPERS
|
||||
|
|
Loading…
Add table
Reference in a new issue