mirror of
https://github.com/penpot/penpot.git
synced 2025-05-19 17:26:11 +02:00
🐛 Fix problem with board titles misplaced
This commit is contained in:
parent
acdcf82c6c
commit
bd44f49175
2 changed files with 57 additions and 5 deletions
|
@ -29,6 +29,7 @@
|
||||||
- Fix shortcuts for zoom now take into account the mouse position [#2924](https://github.com/penpot/penpot/issues/2924)
|
- Fix shortcuts for zoom now take into account the mouse position [#2924](https://github.com/penpot/penpot/issues/2924)
|
||||||
- Fix close colorpicker on Firefox when mouse-up is outside the picker [#2911](https://github.com/penpot/penpot/issues/2911)
|
- Fix close colorpicker on Firefox when mouse-up is outside the picker [#2911](https://github.com/penpot/penpot/issues/2911)
|
||||||
- Fix problems with touch devices and Wacom tablets [#2216](https://github.com/penpot/penpot/issues/2216)
|
- Fix problems with touch devices and Wacom tablets [#2216](https://github.com/penpot/penpot/issues/2216)
|
||||||
|
- Fix problem with board titles misplaced [Taiga #4738](https://tree.taiga.io/project/penpot/issue/4738)
|
||||||
|
|
||||||
### :heart: Community contributions by (Thank you!)
|
### :heart: Community contributions by (Thank you!)
|
||||||
- To @ondrejkonec: for contributing to the code with:
|
- To @ondrejkonec: for contributing to the code with:
|
||||||
|
|
|
@ -8,7 +8,7 @@
|
||||||
(:require
|
(:require
|
||||||
[app.common.data.macros :as dm]
|
[app.common.data.macros :as dm]
|
||||||
[app.common.geom.point :as gpt]
|
[app.common.geom.point :as gpt]
|
||||||
[app.common.geom.shapes :as gsh]
|
[app.common.math :as mth]
|
||||||
[app.main.ui.cursors :as cur]
|
[app.main.ui.cursors :as cur]
|
||||||
[app.main.ui.formats :refer [format-number]]))
|
[app.main.ui.formats :refer [format-number]]))
|
||||||
|
|
||||||
|
@ -42,7 +42,58 @@
|
||||||
(let [inv-zoom (/ 1 zoom)]
|
(let [inv-zoom (/ 1 zoom)]
|
||||||
(dm/fmt "scale(%, %) translate(%, %)" inv-zoom inv-zoom (* zoom x) (* zoom y))))
|
(dm/fmt "scale(%, %) translate(%, %)" inv-zoom inv-zoom (* zoom x) (* zoom y))))
|
||||||
|
|
||||||
(defn title-transform [{:keys [selrect] :as shape} zoom]
|
(defn left?
|
||||||
(let [transform (gsh/transform-str shape {:no-flip true})
|
[cur cand]
|
||||||
label-pos (gpt/point (:x selrect) (- (:y selrect) (/ 10 zoom)))]
|
(let [closex? (mth/close? (:x cand) (:x cur))]
|
||||||
(dm/str transform " " (text-transform label-pos zoom))))
|
(cond
|
||||||
|
(and closex? (< (:y cand) (:y cur))) cand
|
||||||
|
closex? cur
|
||||||
|
(< (:x cand) (:x cur)) cand
|
||||||
|
:else cur)))
|
||||||
|
|
||||||
|
(defn top?
|
||||||
|
[cur cand]
|
||||||
|
(let [closey? (mth/close? (:y cand) (:y cur))]
|
||||||
|
(cond
|
||||||
|
(and closey? (< (:x cand) (:x cur))) cand
|
||||||
|
closey? cur
|
||||||
|
(< (:y cand) (:y cur)) cand
|
||||||
|
:else cur)))
|
||||||
|
|
||||||
|
(defn right?
|
||||||
|
[cur cand]
|
||||||
|
(let [closex? (mth/close? (:x cand) (:x cur))]
|
||||||
|
(cond
|
||||||
|
(and closex? (< (:y cand) (:y cur))) cand
|
||||||
|
closex? cur
|
||||||
|
(> (:x cand) (:x cur)) cand
|
||||||
|
:else cur)))
|
||||||
|
|
||||||
|
(defn title-transform [{:keys [points] :as shape} zoom]
|
||||||
|
(let [leftmost (->> points (reduce left?))
|
||||||
|
topmost (->> points (remove #{leftmost}) (reduce top?))
|
||||||
|
rightmost (->> points (remove #{leftmost topmost}) (reduce right?))
|
||||||
|
|
||||||
|
left-top (gpt/to-vec leftmost topmost)
|
||||||
|
left-top-angle (gpt/angle left-top)
|
||||||
|
|
||||||
|
top-right (gpt/to-vec topmost rightmost)
|
||||||
|
top-right-angle (gpt/angle top-right)
|
||||||
|
|
||||||
|
;; Choose the position that creates the less angle between left-side and top-side
|
||||||
|
[label-pos angle v-pos]
|
||||||
|
(if (< (mth/abs left-top-angle) (mth/abs top-right-angle))
|
||||||
|
[leftmost left-top-angle (gpt/perpendicular left-top)]
|
||||||
|
[topmost top-right-angle (gpt/perpendicular top-right)])
|
||||||
|
|
||||||
|
|
||||||
|
label-pos
|
||||||
|
(gpt/subtract label-pos (gpt/scale (gpt/unit v-pos) (/ 10 zoom)))]
|
||||||
|
|
||||||
|
(dm/fmt "rotate(% %,%) scale(%, %) translate(%, %)"
|
||||||
|
;; rotate
|
||||||
|
angle (:x label-pos) (:y label-pos)
|
||||||
|
;; scale
|
||||||
|
(/ 1 zoom) (/ 1 zoom)
|
||||||
|
;; translate
|
||||||
|
(* zoom (:x label-pos)) (* zoom (:y label-pos)))))
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue