mirror of
https://github.com/penpot/penpot.git
synced 2026-08-01 19:06:18 +00:00
✨ Improve text layer resize behavior
Text layers now only switch to fixed grow-type on vertical resize, not on horizontal resize, for a more intuitive UX. See #4602.
This commit is contained in:
parent
9f04c2fc1d
commit
e05f8c0329
@ -23,6 +23,7 @@
|
|||||||
- Add the option to import tokens in a .zip file. [Taiga #11378](https://tree.taiga.io/project/penpot/us/11378)
|
- Add the option to import tokens in a .zip file. [Taiga #11378](https://tree.taiga.io/project/penpot/us/11378)
|
||||||
- New typography token type - font size token [Taiga #10938](https://tree.taiga.io/project/penpot/us/10938)
|
- New typography token type - font size token [Taiga #10938](https://tree.taiga.io/project/penpot/us/10938)
|
||||||
- Hide bounding box while editing visual effects [Taiga #11576](https://tree.taiga.io/project/penpot/issue/11576)
|
- Hide bounding box while editing visual effects [Taiga #11576](https://tree.taiga.io/project/penpot/issue/11576)
|
||||||
|
- Improved text layer resizing: Allow double-click on text bounding box to set auto-width/auto-height [Taiga #11577](https://tree.taiga.io/project/penpot/issue/11577)
|
||||||
|
|
||||||
### :bug: Bugs fixed
|
### :bug: Bugs fixed
|
||||||
|
|
||||||
|
|||||||
@ -16,6 +16,7 @@
|
|||||||
[app.common.types.container :as ctn]
|
[app.common.types.container :as ctn]
|
||||||
[app.common.types.shape :as cts]
|
[app.common.types.shape :as cts]
|
||||||
[app.main.data.workspace :as dw]
|
[app.main.data.workspace :as dw]
|
||||||
|
[app.main.data.workspace.shapes :as dwsh]
|
||||||
[app.main.refs :as refs]
|
[app.main.refs :as refs]
|
||||||
[app.main.store :as st]
|
[app.main.store :as st]
|
||||||
[app.main.ui.context :as ctx]
|
[app.main.ui.context :as ctx]
|
||||||
@ -277,7 +278,7 @@
|
|||||||
;; The side handler is always rendered horizontally and then rotated
|
;; The side handler is always rendered horizontally and then rotated
|
||||||
(mf/defc resize-side-handler
|
(mf/defc resize-side-handler
|
||||||
{::mf/wrap-props false}
|
{::mf/wrap-props false}
|
||||||
[{:keys [x y length align angle zoom position rotation transform on-resize color show-handler scale-text]}]
|
[{:keys [x y length align angle zoom position rotation transform on-resize color show-handler scale-text shape-id shape-type]}]
|
||||||
(let [height (/ resize-side-height zoom)
|
(let [height (/ resize-side-height zoom)
|
||||||
offset-y (if (= align :outside) (- height) (- (/ height 2)))
|
offset-y (if (= align :outside) (- height) (- (/ height 2)))
|
||||||
target-y (+ y offset-y)
|
target-y (+ y offset-y)
|
||||||
@ -289,8 +290,14 @@
|
|||||||
(cur/get-dynamic "resize-ew" rotation))
|
(cur/get-dynamic "resize-ew" rotation))
|
||||||
(if ^boolean scale-text
|
(if ^boolean scale-text
|
||||||
(cur/get-dynamic "scale-ns" rotation)
|
(cur/get-dynamic "scale-ns" rotation)
|
||||||
(cur/get-dynamic "resize-ns" rotation)))]
|
(cur/get-dynamic "resize-ns" rotation)))
|
||||||
|
on-double-click (fn [_]
|
||||||
|
(when (= shape-type :text)
|
||||||
|
(cond
|
||||||
|
(= position :right)
|
||||||
|
(st/emit! (dwsh/update-shapes [shape-id] #(assoc % :grow-type :auto-width)))
|
||||||
|
(= position :bottom)
|
||||||
|
(st/emit! (dwsh/update-shapes [shape-id] #(assoc % :grow-type :auto-height))))))]
|
||||||
[:g.resize-handler
|
[:g.resize-handler
|
||||||
(when ^boolean show-handler
|
(when ^boolean show-handler
|
||||||
[:circle {:r (/ resize-point-radius zoom)
|
[:circle {:r (/ resize-point-radius zoom)
|
||||||
@ -311,6 +318,7 @@
|
|||||||
:data-position (name position)
|
:data-position (name position)
|
||||||
:transform transform-str
|
:transform transform-str
|
||||||
:on-pointer-down on-resize
|
:on-pointer-down on-resize
|
||||||
|
:on-double-click on-double-click
|
||||||
:style {:fill (if (dbg/enabled? :handlers) "yellow" "none")
|
:style {:fill (if (dbg/enabled? :handlers) "yellow" "none")
|
||||||
:stroke-width 0}}]]))
|
:stroke-width 0}}]]))
|
||||||
|
|
||||||
@ -399,7 +407,9 @@
|
|||||||
:on-resize on-resize
|
:on-resize on-resize
|
||||||
:transform transform
|
:transform transform
|
||||||
:rotation rotation
|
:rotation rotation
|
||||||
:color color}
|
:color color
|
||||||
|
:shape-id (dm/get-prop shape :id)
|
||||||
|
:shape-type (dm/get-prop shape :type)}
|
||||||
props)]
|
props)]
|
||||||
(case type
|
(case type
|
||||||
:rotation [:> rotation-handler props]
|
:rotation [:> rotation-handler props]
|
||||||
@ -482,16 +492,36 @@
|
|||||||
{::mf/private true}
|
{::mf/private true}
|
||||||
[{:keys [shape zoom color disabled]}]
|
[{:keys [shape zoom color disabled]}]
|
||||||
(let [shape-id (dm/get-prop shape :id)
|
(let [shape-id (dm/get-prop shape :id)
|
||||||
|
grow-type (dm/get-prop shape :grow-type)
|
||||||
|
shape-type (dm/get-prop shape :type)
|
||||||
|
|
||||||
on-resize
|
on-resize
|
||||||
(mf/use-fn
|
(mf/use-fn
|
||||||
(mf/deps shape-id shape)
|
(mf/deps shape-id shape grow-type shape-type)
|
||||||
(fn [event]
|
(fn [event]
|
||||||
(when (dom/left-mouse? event)
|
(when (dom/left-mouse? event)
|
||||||
(dom/stop-propagation event)
|
(dom/stop-propagation event)
|
||||||
(let [target (dom/get-current-target event)
|
(let [target (dom/get-current-target event)
|
||||||
position (-> (dom/get-data target "position")
|
position (-> (dom/get-data target "position")
|
||||||
(keyword))]
|
(keyword))]
|
||||||
|
(cond
|
||||||
|
;; If text and in auto-width and the resize is horizontal, switch to auto-height and mark direction
|
||||||
|
(and (= shape-type :text)
|
||||||
|
(= grow-type :auto-width)
|
||||||
|
(or (= position :right) (= position :left)))
|
||||||
|
(st/emit! (dwsh/update-shapes [shape-id] #(-> % (assoc :grow-type :auto-height) (assoc :last-resize-direction :horizontal))))
|
||||||
|
;; If text and in auto-height and the resize is horizontal, mark direction but do not change grow-type
|
||||||
|
(and (= shape-type :text)
|
||||||
|
(= grow-type :auto-height)
|
||||||
|
(or (= position :right) (= position :left)))
|
||||||
|
(st/emit! (dwsh/update-shapes [shape-id] #(assoc % :last-resize-direction :horizontal)))
|
||||||
|
;; If text and in auto-height and the resize is vertical, mark direction
|
||||||
|
(and (= shape-type :text)
|
||||||
|
(= grow-type :auto-height)
|
||||||
|
(or (= position :top) (= position :bottom)))
|
||||||
|
(st/emit! (dwsh/update-shapes [shape-id] #(assoc % :last-resize-direction :vertical)))
|
||||||
|
:else
|
||||||
|
nil)
|
||||||
(st/emit! (dw/start-resize position #{shape-id} shape))))))
|
(st/emit! (dw/start-resize position #{shape-id} shape))))))
|
||||||
|
|
||||||
on-rotate
|
on-rotate
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user