mirror of
https://github.com/penpot/penpot.git
synced 2025-01-24 07:29:08 -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.container :as ctn]
|
||||||
[app.common.types.file :as ctf]
|
[app.common.types.file :as ctf]
|
||||||
[app.common.types.grid :as ctg]
|
[app.common.types.grid :as ctg]
|
||||||
|
[app.common.types.modifiers :as ctm]
|
||||||
[app.common.types.page :as ctp]
|
[app.common.types.page :as ctp]
|
||||||
[app.common.types.pages-list :as ctpl]
|
[app.common.types.pages-list :as ctpl]
|
||||||
[app.common.types.shape :as cts]
|
[app.common.types.shape :as cts]
|
||||||
|
@ -1051,8 +1052,8 @@
|
||||||
(fix-false-copies)
|
(fix-false-copies)
|
||||||
(fix-component-root-without-component)
|
(fix-component-root-without-component)
|
||||||
(fix-copies-names)
|
(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
|
;; COMPONENTS MIGRATION
|
||||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||||
|
@ -1101,8 +1102,8 @@
|
||||||
{:type :frame
|
{:type :frame
|
||||||
:x (:x position)
|
:x (:x position)
|
||||||
:y (:y position)
|
:y (:y position)
|
||||||
:width (+ width (* 2 grid-gap))
|
:width (+ width grid-gap)
|
||||||
:height (+ height (* 2 grid-gap))
|
:height (+ height grid-gap)
|
||||||
:name name
|
:name name
|
||||||
:frame-id uuid/zero
|
:frame-id uuid/zero
|
||||||
:parent-id uuid/zero}))
|
:parent-id uuid/zero}))
|
||||||
|
@ -1388,7 +1389,7 @@
|
||||||
(sbuilder/create-svg-shapes svg-data position objects frame-id frame-id #{} false)))
|
(sbuilder/create-svg-shapes svg-data position objects frame-id frame-id #{} false)))
|
||||||
|
|
||||||
(defn- process-media-object
|
(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)
|
(let [page (ctpl/get-page fdata page-id)
|
||||||
file-id (get fdata :id)
|
file-id (get fdata :id)
|
||||||
|
|
||||||
|
@ -1438,16 +1439,17 @@
|
||||||
cfsh/prepare-create-artboard-from-selection)
|
cfsh/prepare-create-artboard-from-selection)
|
||||||
changes (fcb/concat-changes changes changes2)]
|
changes (fcb/concat-changes changes changes2)]
|
||||||
|
|
||||||
|
(shape-cb shape)
|
||||||
(:redo-changes changes)))
|
(:redo-changes changes)))
|
||||||
|
|
||||||
(defn- create-media-grid
|
(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]
|
(letfn [(process [fdata mobj position]
|
||||||
(let [position (gpt/add position (gpt/point grid-gap grid-gap))
|
(let [position (gpt/add position (gpt/point grid-gap grid-gap))
|
||||||
tp (dt/tpoint)
|
tp (dt/tpoint)
|
||||||
err (volatile! false)]
|
err (volatile! false)]
|
||||||
(try
|
(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))
|
(cp/process-changes fdata changes false))
|
||||||
|
|
||||||
(catch Throwable cause
|
(catch Throwable cause
|
||||||
|
@ -1496,6 +1498,43 @@
|
||||||
(or (process fdata mobj position) fdata))
|
(or (process fdata mobj position) fdata))
|
||||||
(assoc-in fdata [:options :components-v2] true)))))
|
(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
|
(defn- migrate-graphics
|
||||||
[fdata]
|
[fdata]
|
||||||
(if (empty? (:media fdata))
|
(if (empty? (:media fdata))
|
||||||
|
@ -1533,11 +1572,32 @@
|
||||||
(:id frame)
|
(:id frame)
|
||||||
(:id frame)
|
(:id frame)
|
||||||
nil
|
nil
|
||||||
true))]
|
true))
|
||||||
(recur (next groups)
|
new-shapes (volatile! [])
|
||||||
(create-media-grid fdata page-id (:id frame) grid assets)
|
|
||||||
(gpt/add position (gpt/point 0 (+ height (* 2 grid-gap) frame-gap))))))))))
|
|
||||||
|
|
||||||
|
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
|
;; PRIVATE HELPERS
|
||||||
|
|
Loading…
Add table
Reference in a new issue