mirror of
https://github.com/penpot/penpot.git
synced 2025-03-13 00:01:51 -05:00
🐛 Fix problem with missplaced texts
This commit is contained in:
parent
4764674374
commit
321c3fb34b
6 changed files with 50 additions and 29 deletions
|
@ -28,3 +28,11 @@
|
|||
[shape]
|
||||
(gpr/points->selrect (position-data-points shape)))
|
||||
|
||||
(defn overlaps-position-data?
|
||||
"Checks if the given position data is inside the shape"
|
||||
[{:keys [points]} position-data]
|
||||
(let [bounding-box (gpr/points->selrect points)
|
||||
fix-rect #(assoc % :y (- (:y %) (:height %)))]
|
||||
(->> position-data
|
||||
(some #(gpr/overlaps-rects? bounding-box (fix-rect %)))
|
||||
(boolean))))
|
||||
|
|
|
@ -9,7 +9,7 @@
|
|||
[app.common.colors :as clr]
|
||||
[app.common.uuid :as uuid]))
|
||||
|
||||
(def file-version 18)
|
||||
(def file-version 19)
|
||||
(def default-color clr/gray-20)
|
||||
(def root uuid/zero)
|
||||
|
||||
|
|
|
@ -10,6 +10,7 @@
|
|||
[app.common.geom.matrix :as gmt]
|
||||
[app.common.geom.shapes :as gsh]
|
||||
[app.common.geom.shapes.path :as gsp]
|
||||
[app.common.geom.shapes.text :as gsht]
|
||||
[app.common.logging :as l]
|
||||
[app.common.math :as mth]
|
||||
[app.common.pages :as cp]
|
||||
|
@ -415,5 +416,21 @@
|
|||
(update :pages-index d/update-vals update-container)
|
||||
(update :components d/update-vals update-container))))
|
||||
|
||||
(defmethod migrate 19
|
||||
[data]
|
||||
(letfn [(update-object [object]
|
||||
(cond-> object
|
||||
(and (cph/text-shape? object)
|
||||
(d/not-empty? (:position-data object))
|
||||
(not (gsht/overlaps-position-data? object (:position-data object))))
|
||||
(dissoc :position-data)))
|
||||
|
||||
(update-container [container]
|
||||
(update container :objects d/update-vals update-object))]
|
||||
|
||||
(-> data
|
||||
(update :pages-index d/update-vals update-container)
|
||||
(update :components d/update-vals update-container))))
|
||||
|
||||
;; TODO: pending to do a migration for delete already not used fill
|
||||
;; and stroke props. This should be done for >1.14.x version.
|
||||
|
|
|
@ -150,7 +150,11 @@
|
|||
:workspace-undo {}
|
||||
:workspace-project project
|
||||
:workspace-file (assoc file :initialized true)
|
||||
:workspace-data (:data file)
|
||||
:workspace-data (-> (:data file)
|
||||
;; DEBUG: Uncomment this to try out migrations in local without changing
|
||||
;; the version number
|
||||
#_(assoc :version 17)
|
||||
#_(app.common.pages.migrations/migrate-data 19))
|
||||
:workspace-libraries (d/index-by :id libraries)))
|
||||
|
||||
ptk/WatchEvent
|
||||
|
|
|
@ -144,7 +144,7 @@
|
|||
(mf/use-effect
|
||||
(mf/deps @render-frame? thumbnail-data)
|
||||
(fn []
|
||||
(if (and (some? thumbnail-data) @render-frame?)
|
||||
(when (and (some? thumbnail-data) @render-frame?)
|
||||
(reset! render-frame? false))))
|
||||
|
||||
(mf/use-effect
|
||||
|
|
|
@ -9,7 +9,7 @@
|
|||
[app.common.data :as d]
|
||||
[app.common.data.macros :as dm]
|
||||
[app.common.geom.shapes :as gsh]
|
||||
[app.common.geom.shapes.rect :as gshr]
|
||||
[app.common.geom.shapes.text :as gsht]
|
||||
[app.common.math :as mth]
|
||||
[app.common.pages.helpers :as cph]
|
||||
[app.common.text :as txt]
|
||||
|
@ -22,7 +22,7 @@
|
|||
[app.util.dom :as dom]
|
||||
[app.util.object :as obj]
|
||||
[app.util.text-editor :as ted]
|
||||
[app.util.text-svg-position :as utp]
|
||||
[app.util.text-svg-position :as tsp]
|
||||
[app.util.timers :as ts]
|
||||
[promesa.core :as p]
|
||||
[rumext.alpha :as mf]))
|
||||
|
@ -62,21 +62,13 @@
|
|||
(and (some? shape) (some? editor-content))
|
||||
(assoc :content (d/txt-merge content editor-content)))))
|
||||
|
||||
(defn overlaps-position-data?
|
||||
[bounding-box position-data]
|
||||
(let [fix-rect #(assoc % :y (- (:y %) (:height %)))]
|
||||
(->> position-data
|
||||
(some #(gshr/overlaps-rects? bounding-box (fix-rect %)))
|
||||
(boolean))))
|
||||
|
||||
(defn- update-text-shape
|
||||
[{:keys [grow-type id migrate points]} node]
|
||||
[{:keys [grow-type id migrate] :as shape} node]
|
||||
;; Check if we need to update the size because it's auto-width or auto-height
|
||||
;; Update the position-data of every text fragment
|
||||
(p/let [position-data (utp/calc-position-data node)]
|
||||
(let [bounding-box (gsh/points->selrect points)]
|
||||
(p/let [position-data (tsp/calc-position-data node)]
|
||||
;; At least one paragraph needs to be inside the bounding box
|
||||
(when (overlaps-position-data? bounding-box position-data)
|
||||
(when (gsht/overlaps-position-data? shape position-data)
|
||||
(st/emit! (dwt/update-position-data id position-data)))
|
||||
|
||||
(when (contains? #{:auto-height :auto-width} grow-type)
|
||||
|
@ -88,12 +80,12 @@
|
|||
(when (and (not (mth/almost-zero? width))
|
||||
(not (mth/almost-zero? height))
|
||||
(not migrate))
|
||||
(st/emit! (dwt/resize-text id width height))))))
|
||||
(st/emit! (dwt/resize-text id width height)))))
|
||||
(st/emit! (dwt/clean-text-modifier id))))
|
||||
|
||||
(defn- update-text-modifier
|
||||
[{:keys [grow-type id]} node]
|
||||
(p/let [position-data (utp/calc-position-data node)
|
||||
(p/let [position-data (tsp/calc-position-data node)
|
||||
props {:position-data position-data}
|
||||
|
||||
props
|
||||
|
|
Loading…
Add table
Reference in a new issue