mirror of
https://github.com/penpot/penpot.git
synced 2025-03-11 23:31:21 -05:00
Start use user-events for scroll events.
In the same way as keyboard and mouse events.
This commit is contained in:
parent
7a7059e172
commit
e3f58f6823
5 changed files with 42 additions and 33 deletions
|
@ -85,6 +85,10 @@
|
||||||
(-> (l/in [:pointer :window])
|
(-> (l/in [:pointer :window])
|
||||||
(l/derive workspace)))
|
(l/derive workspace)))
|
||||||
|
|
||||||
|
(def workspace-scroll
|
||||||
|
(-> (l/key :scroll)
|
||||||
|
(l/derive workspace)))
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -15,19 +15,6 @@
|
||||||
|
|
||||||
(def page-id-ref-s (rx/from-atom refs/selected-page-id))
|
(def page-id-ref-s (rx/from-atom refs/selected-page-id))
|
||||||
|
|
||||||
;; --- Scroll Stream
|
|
||||||
|
|
||||||
(defonce scroll-b (rx/subject))
|
|
||||||
|
|
||||||
(defonce scroll-s
|
|
||||||
(as-> scroll-b $
|
|
||||||
(rx/sample 10 $)
|
|
||||||
(rx/merge $ (rx/of (gpt/point)))
|
|
||||||
(rx/dedupe $)))
|
|
||||||
|
|
||||||
(defonce scroll-a
|
|
||||||
(rx/to-atom scroll-s))
|
|
||||||
|
|
||||||
;; --- Events
|
;; --- Events
|
||||||
|
|
||||||
(defn- user-interaction-event?
|
(defn- user-interaction-event?
|
||||||
|
|
|
@ -16,6 +16,7 @@
|
||||||
[uxbox.main.data.pages :as udp]
|
[uxbox.main.data.pages :as udp]
|
||||||
[uxbox.main.data.history :as udh]
|
[uxbox.main.data.history :as udh]
|
||||||
[uxbox.main.data.undo :as udu]
|
[uxbox.main.data.undo :as udu]
|
||||||
|
[uxbox.main.user-events :as uev]
|
||||||
[uxbox.main.ui.messages :refer [messages-widget]]
|
[uxbox.main.ui.messages :refer [messages-widget]]
|
||||||
[uxbox.main.ui.confirm]
|
[uxbox.main.ui.confirm]
|
||||||
[uxbox.main.ui.workspace.images]
|
[uxbox.main.ui.workspace.images]
|
||||||
|
@ -47,7 +48,6 @@
|
||||||
(let [[projectid pageid] (:rum/args own)
|
(let [[projectid pageid] (:rum/args own)
|
||||||
dom (mx/ref-node own "workspace-canvas")
|
dom (mx/ref-node own "workspace-canvas")
|
||||||
scroll-to-page-center #(scroll/scroll-to-page-center dom @refs/selected-page)
|
scroll-to-page-center #(scroll/scroll-to-page-center dom @refs/selected-page)
|
||||||
;; sub1 (scroll/watch-scroll-interactions own)
|
|
||||||
sub2 (rx/subscribe streams/page-id-ref-s scroll-to-page-center)]
|
sub2 (rx/subscribe streams/page-id-ref-s scroll-to-page-center)]
|
||||||
|
|
||||||
(scroll-to-page-center)
|
(scroll-to-page-center)
|
||||||
|
@ -56,14 +56,11 @@
|
||||||
(udu/watch-page-changes pageid)
|
(udu/watch-page-changes pageid)
|
||||||
(udh/watch-page-changes pageid))
|
(udh/watch-page-changes pageid))
|
||||||
|
|
||||||
(assoc own
|
(assoc own ::sub2 sub2)))
|
||||||
;; ::sub1 sub1
|
|
||||||
::sub2 sub2)))
|
|
||||||
|
|
||||||
(defn- workspace-will-unmount
|
(defn- workspace-will-unmount
|
||||||
[own]
|
[own]
|
||||||
(st/emit! ::udp/stop-page-watcher)
|
(st/emit! ::udp/stop-page-watcher)
|
||||||
;; (.close (::sub1 own))
|
|
||||||
(.close (::sub2 own))
|
(.close (::sub2 own))
|
||||||
(dissoc own ::sub1 ::sub2))
|
(dissoc own ::sub1 ::sub2))
|
||||||
|
|
||||||
|
@ -84,7 +81,7 @@
|
||||||
(let [target (.-target event)
|
(let [target (.-target event)
|
||||||
top (.-scrollTop target)
|
top (.-scrollTop target)
|
||||||
left (.-scrollLeft target)]
|
left (.-scrollLeft target)]
|
||||||
(rx/push! streams/scroll-b (gpt/point left top))))
|
(st/emit! (uev/scroll-event (gpt/point left top)))))
|
||||||
|
|
||||||
(defn- on-wheel
|
(defn- on-wheel
|
||||||
[own event]
|
[own event]
|
||||||
|
|
|
@ -12,7 +12,7 @@
|
||||||
[beicon.core :as rx]
|
[beicon.core :as rx]
|
||||||
[uxbox.main.store :as s]
|
[uxbox.main.store :as s]
|
||||||
[uxbox.main.constants :as c]
|
[uxbox.main.constants :as c]
|
||||||
[uxbox.main.streams :as streams]
|
[uxbox.main.refs :as refs]
|
||||||
[uxbox.util.dom :as dom]
|
[uxbox.util.dom :as dom]
|
||||||
[uxbox.util.mixins :as mx :include-macros true]))
|
[uxbox.util.mixins :as mx :include-macros true]))
|
||||||
|
|
||||||
|
@ -144,7 +144,7 @@
|
||||||
|
|
||||||
(defn horizontal-rule-render
|
(defn horizontal-rule-render
|
||||||
[own zoom]
|
[own zoom]
|
||||||
(let [scroll (mx/react streams/scroll-a)
|
(let [scroll (mx/react refs/workspace-scroll)
|
||||||
scroll-x (:x scroll)
|
scroll-x (:x scroll)
|
||||||
translate-x (- (- c/canvas-scroll-padding) (:x scroll))]
|
translate-x (- (- c/canvas-scroll-padding) (:x scroll))]
|
||||||
(html
|
(html
|
||||||
|
@ -164,7 +164,7 @@
|
||||||
|
|
||||||
(defn vertical-rule-render
|
(defn vertical-rule-render
|
||||||
[own zoom]
|
[own zoom]
|
||||||
(let [scroll (mx/react streams/scroll-a)
|
(let [scroll (mx/react refs/workspace-scroll)
|
||||||
scroll-y (:y scroll)
|
scroll-y (:y scroll)
|
||||||
translate-y (- (- c/canvas-scroll-padding) (:y scroll))]
|
translate-y (- (- c/canvas-scroll-padding) (:y scroll))]
|
||||||
(html
|
(html
|
||||||
|
|
|
@ -10,17 +10,9 @@
|
||||||
[potok.core :as ptk]
|
[potok.core :as ptk]
|
||||||
[uxbox.util.geom.point :as gpt]))
|
[uxbox.util.geom.point :as gpt]))
|
||||||
|
|
||||||
(defrecord KeyboardEvent [type key shift ctrl])
|
;; --- Keyboard Event
|
||||||
(defrecord MouseEvent [type ctrl shift])
|
|
||||||
|
|
||||||
(defrecord PointerEvent [window
|
(defrecord KeyboardEvent [type key shift ctrl])
|
||||||
viewport
|
|
||||||
canvas
|
|
||||||
ctrl
|
|
||||||
shift]
|
|
||||||
ptk/UpdateEvent
|
|
||||||
(update [it state]
|
|
||||||
(assoc-in state [:workspace :pointer] it)))
|
|
||||||
|
|
||||||
(defn keyboard-event
|
(defn keyboard-event
|
||||||
[type key ctrl shift]
|
[type key ctrl shift]
|
||||||
|
@ -34,6 +26,10 @@
|
||||||
[v]
|
[v]
|
||||||
(instance? KeyboardEvent v))
|
(instance? KeyboardEvent v))
|
||||||
|
|
||||||
|
;; --- Mouse Event
|
||||||
|
|
||||||
|
(defrecord MouseEvent [type ctrl shift])
|
||||||
|
|
||||||
(defn mouse-event
|
(defn mouse-event
|
||||||
[type ctrl shift]
|
[type ctrl shift]
|
||||||
{:pre [(keyword? type)
|
{:pre [(keyword? type)
|
||||||
|
@ -50,7 +46,16 @@
|
||||||
(and (mouse-event? v)
|
(and (mouse-event? v)
|
||||||
(= :up (:type v))))
|
(= :up (:type v))))
|
||||||
|
|
||||||
;; TODO: add spec
|
;; --- Pointer Event
|
||||||
|
|
||||||
|
(defrecord PointerEvent [window
|
||||||
|
viewport
|
||||||
|
canvas
|
||||||
|
ctrl
|
||||||
|
shift]
|
||||||
|
ptk/UpdateEvent
|
||||||
|
(update [it state]
|
||||||
|
(assoc-in state [:workspace :pointer] it)))
|
||||||
|
|
||||||
(defn pointer-event
|
(defn pointer-event
|
||||||
[window viewport canvas ctrl shift]
|
[window viewport canvas ctrl shift]
|
||||||
|
@ -69,3 +74,19 @@
|
||||||
(defn pointer-event?
|
(defn pointer-event?
|
||||||
[v]
|
[v]
|
||||||
(instance? PointerEvent v))
|
(instance? PointerEvent v))
|
||||||
|
|
||||||
|
;; --- Scroll Event
|
||||||
|
|
||||||
|
(defrecord ScrollEvent [point]
|
||||||
|
ptk/UpdateEvent
|
||||||
|
(update [_ state]
|
||||||
|
(assoc-in state [:workspace :scroll] point)))
|
||||||
|
|
||||||
|
(defn scroll-event
|
||||||
|
[pt]
|
||||||
|
{:pre [(gpt/point? pt)]}
|
||||||
|
(ScrollEvent. pt))
|
||||||
|
|
||||||
|
(defn scroll-event?
|
||||||
|
[v]
|
||||||
|
(instance? ScrollEvent v))
|
||||||
|
|
Loading…
Add table
Reference in a new issue