🐛 Fix mouse zoom on viewer and workspace.

This commit is contained in:
Andrey Antukh 2020-04-08 19:18:48 +02:00
parent 3f925690ee
commit 14ff64d3d7
3 changed files with 33 additions and 30 deletions

View file

@ -52,8 +52,12 @@
on-mouse-wheel on-mouse-wheel
(fn [event] (fn [event]
(when (kbd/ctrl? event) (when (kbd/ctrl? event)
;; Disable browser zoom with ctrl+mouse wheel (dom/prevent-default event)
(dom/prevent-default event))) (let [event (.getBrowserEvent event)]
(if (pos? (.-deltaY event))
(st/emit! dv/decrease-zoom)
(st/emit! dv/increase-zoom)))))
on-mount on-mount
(fn [] (fn []

View file

@ -37,24 +37,20 @@
;; --- Workspace ;; --- Workspace
(defn- on-scroll ;; (defn- on-scroll
[event] ;; [event]
(let [target (.-target event) ;; (let [target (.-target event)
top (.-scrollTop target) ;; top (.-scrollTop target)
left (.-scrollLeft target)] ;; left (.-scrollLeft target)]
(st/emit! (ms/->ScrollEvent (gpt/point left top))))) ;; (st/emit! (ms/->ScrollEvent (gpt/point left top)))))
(defn- on-wheel ;; (defn- on-wheel
[event frame] ;; [event frame]
(when (kbd/ctrl? event) ;; (when (kbd/ctrl? event)
;; global ctrl+wheel browser zoom must be disabled (see main/ui/workspace/wiewport.cljs) ;; (let [dom (mf/ref-val frame)
(let [dom (mf/ref-val frame) ;; scroll-position (scroll/get-current-position-absolute dom)
scroll-position (scroll/get-current-position-absolute dom) ;; mouse-point @ms/mouse-position]
mouse-point @ms/mouse-position] ;; (scroll/scroll-to-point dom mouse-point scroll-position))))
(if (pos? (.-deltaY event))
(st/emit! dw/decrease-zoom)
(st/emit! dw/increase-zoom))
(scroll/scroll-to-point dom mouse-point scroll-position))))
(mf/defc workspace-content (mf/defc workspace-content
[{:keys [page file layout] :as params}] [{:keys [page file layout] :as params}]
@ -73,8 +69,9 @@
[:section.workspace-content [:section.workspace-content
{:class classes {:class classes
:on-scroll on-scroll ;; :on-scroll on-scroll
:on-wheel #(on-wheel % frame)} ;; :on-wheel #(on-wheel % frame)
}
[:& history-dialog] [:& history-dialog]

View file

@ -9,7 +9,6 @@
(:require (:require
[beicon.core :as rx] [beicon.core :as rx]
[goog.events :as events] [goog.events :as events]
[goog.object :as gobj]
[lentes.core :as l] [lentes.core :as l]
[potok.core :as ptk] [potok.core :as ptk]
[rumext.alpha :as mf] [rumext.alpha :as mf]
@ -17,15 +16,13 @@
[uxbox.common.data :as d] [uxbox.common.data :as d]
[uxbox.main.constants :as c] [uxbox.main.constants :as c]
[uxbox.main.data.workspace :as dw] [uxbox.main.data.workspace :as dw]
[uxbox.main.geom :as geom]
[uxbox.main.refs :as refs] [uxbox.main.refs :as refs]
[uxbox.main.store :as st] [uxbox.main.store :as st]
[uxbox.main.streams :as ms] [uxbox.main.streams :as ms]
[uxbox.main.ui.keyboard :as kbd] [uxbox.main.ui.keyboard :as kbd]
[uxbox.main.ui.hooks :refer [use-rxsub]] [uxbox.main.ui.hooks :as hooks]
[uxbox.main.ui.shapes :refer [shape-wrapper frame-wrapper]] [uxbox.main.ui.shapes :refer [shape-wrapper frame-wrapper]]
[uxbox.main.ui.workspace.drawarea :refer [draw-area]] [uxbox.main.ui.workspace.drawarea :refer [draw-area start-drawing]]
[uxbox.main.ui.workspace.drawarea :refer [start-drawing]]
[uxbox.main.ui.workspace.grid :refer [grid]] [uxbox.main.ui.workspace.grid :refer [grid]]
[uxbox.main.ui.workspace.ruler :refer [ruler]] [uxbox.main.ui.workspace.ruler :refer [ruler]]
[uxbox.main.ui.workspace.selection :refer [selection-handlers]] [uxbox.main.ui.workspace.selection :refer [selection-handlers]]
@ -39,7 +36,7 @@
(mf/defc coordinates (mf/defc coordinates
[{:keys [zoom] :as props}] [{:keys [zoom] :as props}]
(let [coords (some-> (use-rxsub ms/mouse-position) (let [coords (some-> (hooks/use-rxsub ms/mouse-position)
(gpt/divide (gpt/point zoom zoom)) (gpt/divide (gpt/point zoom zoom))
(gpt/round 0))] (gpt/round 0))]
[:ul.coordinates [:ul.coordinates
@ -50,7 +47,7 @@
(mf/defc cursor-tooltip (mf/defc cursor-tooltip
[{:keys [zoom tooltip] :as props}] [{:keys [zoom tooltip] :as props}]
(let [coords (some-> (use-rxsub ms/mouse-position) (let [coords (some-> (hooks/use-rxsub ms/mouse-position)
(gpt/divide (gpt/point zoom zoom))) (gpt/divide (gpt/point zoom zoom)))
pos-x (- (:x coords) 100) pos-x (- (:x coords) 100)
pos-y (+ (:y coords) 30)] pos-y (+ (:y coords) 30)]
@ -110,7 +107,7 @@
(mf/defc frames-wrapper (mf/defc frames-wrapper
{::mf/wrap-props false} {::mf/wrap-props false}
[props] [props]
(let [page (gobj/get props "page") (let [page (unchecked-get props "page")
page-id (:id page) page-id (:id page)
data-ref (-> (mf/deps page-id) data-ref (-> (mf/deps page-id)
(mf/use-memo #(-> (l/in [:workspace-data page-id]) (mf/use-memo #(-> (l/in [:workspace-data page-id])
@ -144,6 +141,7 @@
tooltip tooltip
selected] selected]
:as local} (mf/deref refs/workspace-local) :as local} (mf/deref refs/workspace-local)
viewport-ref (mf/use-ref nil) viewport-ref (mf/use-ref nil)
last-position (mf/use-var nil) last-position (mf/use-var nil)
@ -244,7 +242,11 @@
(fn [event] (fn [event]
(when (kbd/ctrl? event) (when (kbd/ctrl? event)
;; Disable browser zoom with ctrl+mouse wheel ;; Disable browser zoom with ctrl+mouse wheel
(dom/prevent-default event))) (dom/prevent-default event)
(let [event (.getBrowserEvent event)]
(if (pos? (.-deltaY event))
(st/emit! dw/decrease-zoom)
(st/emit! dw/increase-zoom)))))
on-mount on-mount
(fn [] (fn []