mirror of
https://github.com/penpot/penpot.git
synced 2025-05-30 11:06:11 +02:00
🐛 Fix mouse zoom on viewer and workspace.
This commit is contained in:
parent
3f925690ee
commit
14ff64d3d7
3 changed files with 33 additions and 30 deletions
|
@ -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 []
|
||||||
|
|
|
@ -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]
|
||||||
|
|
||||||
|
|
|
@ -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 []
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue