From d9c10cea5dd3d1d6b567112a86b537ba1c832847 Mon Sep 17 00:00:00 2001 From: "alonso.torres" Date: Wed, 10 Feb 2021 16:52:16 +0100 Subject: [PATCH] :sparkles: Flip horizontal/vertical operations --- frontend/src/app/main/data/workspace.cljs | 2 ++ .../app/main/data/workspace/shortcuts.cljs | 8 +++++ .../app/main/data/workspace/transforms.cljs | 34 +++++++++++++++++++ .../app/main/ui/workspace/context_menu.cljs | 15 +++++++- 4 files changed, 58 insertions(+), 1 deletion(-) diff --git a/frontend/src/app/main/data/workspace.cljs b/frontend/src/app/main/data/workspace.cljs index f76b8974ce..acb58b4870 100644 --- a/frontend/src/app/main/data/workspace.cljs +++ b/frontend/src/app/main/data/workspace.cljs @@ -1799,6 +1799,8 @@ (d/export dwt/set-modifiers) (d/export dwt/apply-modifiers) (d/export dwt/update-dimensions) +(d/export dwt/flip-horizontal-selected) +(d/export dwt/flip-vertical-selected) ;; Persistence diff --git a/frontend/src/app/main/data/workspace/shortcuts.cljs b/frontend/src/app/main/data/workspace/shortcuts.cljs index 245645fc2e..2eda58376e 100644 --- a/frontend/src/app/main/data/workspace/shortcuts.cljs +++ b/frontend/src/app/main/data/workspace/shortcuts.cljs @@ -108,6 +108,14 @@ :command (ds/c-mod "k") :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") :command "shift+0" :fn #(st/emit! dw/reset-zoom)} diff --git a/frontend/src/app/main/data/workspace/transforms.cljs b/frontend/src/app/main/data/workspace/transforms.cljs index 5a772c247a..b102be822b 100644 --- a/frontend/src/app/main/data/workspace/transforms.cljs +++ b/frontend/src/app/main/data/workspace/transforms.cljs @@ -530,3 +530,37 @@ objects (dwc/lookup-page-objects state page-id) ids (d/concat [] ids (mapcat #(cp/get-children % objects) 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)))))) diff --git a/frontend/src/app/main/ui/workspace/context_menu.cljs b/frontend/src/app/main/ui/workspace/context_menu.cljs index 13d3df116f..01c1151d0c 100644 --- a/frontend/src/app/main/ui/workspace/context_menu.cljs +++ b/frontend/src/app/main/ui/workspace/context_menu.cljs @@ -72,6 +72,8 @@ do-remove-group (st/emitf dw/ungroup-selected) do-mask-group (st/emitf dw/mask-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-detach-component (st/emitf (dwl/detach-component id)) do-reset-component (st/emitf (dwl/reset-component id)) @@ -133,7 +135,18 @@ :on-click do-create-group}] [:& menu-entry {:title (t locale "workspace.shape.menu.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)) [:*