diff --git a/CHANGES.md b/CHANGES.md index 5adb6f627..f9b5f8d72 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -7,6 +7,7 @@ ### :sparkles: New features - Select through stroke only rectangle [Taiga #5484](https://tree.taiga.io/project/penpot/issue/5484) +- Override browser Ctrl+ and Ctrl- zoom with Penpot Zoom [Taiga #3200](https://tree.taiga.io/project/penpot/us/3200) ### :bug: Bugs fixed diff --git a/frontend/src/app/main/streams.cljs b/frontend/src/app/main/streams.cljs index a4dc59d69..24c8c49a1 100644 --- a/frontend/src/app/main/streams.cljs +++ b/frontend/src/app/main/streams.cljs @@ -15,7 +15,7 @@ ;; --- User Events -(defrecord KeyboardEvent [type key shift ctrl alt meta editing]) +(defrecord KeyboardEvent [type key shift ctrl alt meta editing event]) (defn keyboard-event? [v] @@ -184,6 +184,28 @@ keyboard-meta keyboard-ctrl)) +(defonce keyboard-minus-or-underscore + (let [sub (rx/behavior-subject nil) + ob (->> st/stream + (rx/filter keyboard-event?) + (rx/filter key-down?) + (rx/filter #(kbd/mod? (:event %))) + (rx/filter #(or (kbd/minus? %) (kbd/underscore? %))) + (rx/dedupe))] + (rx/subscribe-with ob sub) + sub)) + +(defonce keyboard-=-or-+ + (let [sub (rx/behavior-subject nil) + ob (->> st/stream + (rx/filter keyboard-event?) + (rx/filter key-down?) + (rx/filter #(kbd/mod? (:event %))) + (rx/filter #(or (kbd/equals? %) (kbd/plus? %))) + (rx/dedupe))] + (rx/subscribe-with ob sub) + sub)) + (defonce keyboard-space (let [sub (rx/behavior-subject nil) ob (->> st/stream diff --git a/frontend/src/app/main/ui/workspace/viewport/actions.cljs b/frontend/src/app/main/ui/workspace/viewport/actions.cljs index c9a699db3..f0a33100f 100644 --- a/frontend/src/app/main/ui/workspace/viewport/actions.cljs +++ b/frontend/src/app/main/ui/workspace/viewport/actions.cljs @@ -321,7 +321,7 @@ (= "TEXTAREA" (obj/get target "tagName")))] (when-not (.-repeat bevent) - (st/emit! (ms/->KeyboardEvent :down key shift? ctrl? alt? meta? editing?))))))) + (st/emit! (ms/->KeyboardEvent :down key shift? ctrl? alt? meta? editing? event))))))) (defn on-key-up [] (mf/use-callback @@ -336,7 +336,7 @@ (= "rich-text" (obj/get target "className")) (= "INPUT" (obj/get target "tagName")) (= "TEXTAREA" (obj/get target "tagName")))] - (st/emit! (ms/->KeyboardEvent :up key shift? ctrl? alt? meta? editing?)))))) + (st/emit! (ms/->KeyboardEvent :up key shift? ctrl? alt? meta? editing? event)))))) (defn on-pointer-move [move-stream] (let [last-position (mf/use-var nil)] diff --git a/frontend/src/app/main/ui/workspace/viewport/hooks.cljs b/frontend/src/app/main/ui/workspace/viewport/hooks.cljs index 3f863cd25..d7eef5be7 100644 --- a/frontend/src/app/main/ui/workspace/viewport/hooks.cljs +++ b/frontend/src/app/main/ui/workspace/viewport/hooks.cljs @@ -105,6 +105,12 @@ (reset! mod? %) (when-not % (reset! z? false)))) ;; In mac after command+z there is no event for the release of the z key (hooks/use-stream ms/keyboard-space #(reset! space? %)) + (hooks/use-stream ms/keyboard-=-or-+ #(do + (dom/prevent-default (:event %)) + (st/emit! (dw/increase-zoom)))) + (hooks/use-stream ms/keyboard-minus-or-underscore #(do + (dom/prevent-default (:event %)) + (st/emit! (dw/decrease-zoom)))) (hooks/use-stream ms/keyboard-z #(reset! z? %)) (hooks/use-stream ms/keyboard-shift #(reset! shift? %))) diff --git a/frontend/src/app/util/keyboard.cljs b/frontend/src/app/util/keyboard.cljs index 7d4ecf95a..f94d65ad6 100644 --- a/frontend/src/app/util/keyboard.cljs +++ b/frontend/src/app/util/keyboard.cljs @@ -45,6 +45,10 @@ (def enter? (is-key? "Enter")) (def space? (is-key? " ")) (def z? (is-key-ignore-case? "z")) +(def equals? (is-key? "=")) +(def plus? (is-key? "+")) +(def minus? (is-key? "-")) +(def underscore? (is-key? "_")) (def up-arrow? (is-key? "ArrowUp")) (def down-arrow? (is-key? "ArrowDown")) (def left-arrow? (is-key? "ArrowLeft"))