mirror of
https://github.com/penpot/penpot.git
synced 2025-02-15 11:38:24 -05:00
✨ Flip horizontal/vertical operations
This commit is contained in:
parent
d48a1ca0b0
commit
d9c10cea5d
4 changed files with 58 additions and 1 deletions
|
@ -1799,6 +1799,8 @@
|
||||||
(d/export dwt/set-modifiers)
|
(d/export dwt/set-modifiers)
|
||||||
(d/export dwt/apply-modifiers)
|
(d/export dwt/apply-modifiers)
|
||||||
(d/export dwt/update-dimensions)
|
(d/export dwt/update-dimensions)
|
||||||
|
(d/export dwt/flip-horizontal-selected)
|
||||||
|
(d/export dwt/flip-vertical-selected)
|
||||||
|
|
||||||
;; Persistence
|
;; Persistence
|
||||||
|
|
||||||
|
|
|
@ -108,6 +108,14 @@
|
||||||
:command (ds/c-mod "k")
|
:command (ds/c-mod "k")
|
||||||
:fn #(st/emit! dwl/add-component)}
|
:fn #(st/emit! dwl/add-component)}
|
||||||
|
|
||||||
|
:flip-vertical {:tooltip (ds/shift "V")
|
||||||
|
:command "shift+v"
|
||||||
|
:fn #(st/emit! (dw/flip-vertical-selected))}
|
||||||
|
|
||||||
|
:flip-horizontal {:tooltip (ds/shift "V")
|
||||||
|
:command "shift+h"
|
||||||
|
:fn #(st/emit! (dw/flip-horizontal-selected))}
|
||||||
|
|
||||||
:reset-zoom {:tooltip (ds/shift "0")
|
:reset-zoom {:tooltip (ds/shift "0")
|
||||||
:command "shift+0"
|
:command "shift+0"
|
||||||
:fn #(st/emit! dw/reset-zoom)}
|
:fn #(st/emit! dw/reset-zoom)}
|
||||||
|
|
|
@ -530,3 +530,37 @@
|
||||||
objects (dwc/lookup-page-objects state page-id)
|
objects (dwc/lookup-page-objects state page-id)
|
||||||
ids (d/concat [] ids (mapcat #(cp/get-children % objects) ids))]
|
ids (d/concat [] ids (mapcat #(cp/get-children % objects) ids))]
|
||||||
(rx/of (apply-modifiers ids))))))
|
(rx/of (apply-modifiers ids))))))
|
||||||
|
|
||||||
|
(defn flip-horizontal-selected []
|
||||||
|
(ptk/reify ::flip-horizontal-selected
|
||||||
|
ptk/WatchEvent
|
||||||
|
(watch [_ state stream]
|
||||||
|
(let [objects (dwc/lookup-page-objects state)
|
||||||
|
selected (get-in state [:workspace-local :selected])
|
||||||
|
shapes (map #(get objects %) selected)
|
||||||
|
selrect (gsh/selection-rect (->> shapes (map gsh/transform-shape)))
|
||||||
|
origin (gpt/point (:x selrect) (+ (:y selrect) (/ (:height selrect) 2)))]
|
||||||
|
|
||||||
|
(rx/of (set-modifiers selected
|
||||||
|
{:resize-vector (gpt/point -1.0 1.0)
|
||||||
|
:resize-origin origin
|
||||||
|
:displacement (gmt/translate-matrix (gpt/point (- (:width selrect)) 0))}
|
||||||
|
false)
|
||||||
|
(apply-modifiers selected))))))
|
||||||
|
|
||||||
|
(defn flip-vertical-selected []
|
||||||
|
(ptk/reify ::flip-vertical-selected
|
||||||
|
ptk/WatchEvent
|
||||||
|
(watch [_ state stream]
|
||||||
|
(let [objects (dwc/lookup-page-objects state)
|
||||||
|
selected (get-in state [:workspace-local :selected])
|
||||||
|
shapes (map #(get objects %) selected)
|
||||||
|
selrect (gsh/selection-rect (->> shapes (map gsh/transform-shape)))
|
||||||
|
origin (gpt/point (+ (:x selrect) (/ (:width selrect) 2)) (:y selrect))]
|
||||||
|
|
||||||
|
(rx/of (set-modifiers selected
|
||||||
|
{:resize-vector (gpt/point 1.0 -1.0)
|
||||||
|
:resize-origin origin
|
||||||
|
:displacement (gmt/translate-matrix (gpt/point 0 (- (:height selrect))))}
|
||||||
|
false)
|
||||||
|
(apply-modifiers selected))))))
|
||||||
|
|
|
@ -72,6 +72,8 @@
|
||||||
do-remove-group (st/emitf dw/ungroup-selected)
|
do-remove-group (st/emitf dw/ungroup-selected)
|
||||||
do-mask-group (st/emitf dw/mask-group)
|
do-mask-group (st/emitf dw/mask-group)
|
||||||
do-unmask-group (st/emitf dw/unmask-group)
|
do-unmask-group (st/emitf dw/unmask-group)
|
||||||
|
do-flip-vertical (st/emitf (dw/flip-vertical-selected))
|
||||||
|
do-flip-horizontal (st/emitf (dw/flip-horizontal-selected))
|
||||||
do-add-component (st/emitf dwl/add-component)
|
do-add-component (st/emitf dwl/add-component)
|
||||||
do-detach-component (st/emitf (dwl/detach-component id))
|
do-detach-component (st/emitf (dwl/detach-component id))
|
||||||
do-reset-component (st/emitf (dwl/reset-component id))
|
do-reset-component (st/emitf (dwl/reset-component id))
|
||||||
|
@ -133,7 +135,18 @@
|
||||||
:on-click do-create-group}]
|
:on-click do-create-group}]
|
||||||
[:& menu-entry {:title (t locale "workspace.shape.menu.mask")
|
[:& menu-entry {:title (t locale "workspace.shape.menu.mask")
|
||||||
:shortcut (sc/get-tooltip :mask)
|
:shortcut (sc/get-tooltip :mask)
|
||||||
:on-click do-mask-group}]])
|
:on-click do-mask-group}]
|
||||||
|
[:& menu-separator]])
|
||||||
|
|
||||||
|
(when (>= (count selected) 1)
|
||||||
|
[:*
|
||||||
|
[:& menu-entry {:title (t locale "workspace.shape.menu.flip-vertical")
|
||||||
|
:shortcut (sc/get-tooltip :flip-vertical)
|
||||||
|
:on-click do-flip-vertical}]
|
||||||
|
[:& menu-entry {:title (t locale "workspace.shape.menu.flip-horizontal")
|
||||||
|
:shortcut (sc/get-tooltip :flip-horizontal)
|
||||||
|
:on-click do-flip-horizontal}]
|
||||||
|
[:& menu-separator]])
|
||||||
|
|
||||||
(when (and (= (count selected) 1) (= (:type shape) :group))
|
(when (and (= (count selected) 1) (= (:type shape) :group))
|
||||||
[:*
|
[:*
|
||||||
|
|
Loading…
Add table
Reference in a new issue