0
Fork 0
mirror of https://github.com/penpot/penpot.git synced 2025-03-11 07:11:32 -05:00

Start use user-events for scroll events.

In the same way as keyboard and mouse events.
This commit is contained in:
Andrey Antukh 2017-01-16 17:47:01 +01:00
parent 7a7059e172
commit e3f58f6823
No known key found for this signature in database
GPG key ID: 4DFEBCB8316A8B95
5 changed files with 42 additions and 33 deletions

View file

@ -85,6 +85,10 @@
(-> (l/in [:pointer :window])
(l/derive workspace)))
(def workspace-scroll
(-> (l/key :scroll)
(l/derive workspace)))

View file

@ -15,19 +15,6 @@
(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
(defn- user-interaction-event?

View file

@ -16,6 +16,7 @@
[uxbox.main.data.pages :as udp]
[uxbox.main.data.history :as udh]
[uxbox.main.data.undo :as udu]
[uxbox.main.user-events :as uev]
[uxbox.main.ui.messages :refer [messages-widget]]
[uxbox.main.ui.confirm]
[uxbox.main.ui.workspace.images]
@ -47,7 +48,6 @@
(let [[projectid pageid] (:rum/args own)
dom (mx/ref-node own "workspace-canvas")
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)]
(scroll-to-page-center)
@ -56,14 +56,11 @@
(udu/watch-page-changes pageid)
(udh/watch-page-changes pageid))
(assoc own
;; ::sub1 sub1
::sub2 sub2)))
(assoc own ::sub2 sub2)))
(defn- workspace-will-unmount
[own]
(st/emit! ::udp/stop-page-watcher)
;; (.close (::sub1 own))
(.close (::sub2 own))
(dissoc own ::sub1 ::sub2))
@ -84,7 +81,7 @@
(let [target (.-target event)
top (.-scrollTop 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
[own event]

View file

@ -12,7 +12,7 @@
[beicon.core :as rx]
[uxbox.main.store :as s]
[uxbox.main.constants :as c]
[uxbox.main.streams :as streams]
[uxbox.main.refs :as refs]
[uxbox.util.dom :as dom]
[uxbox.util.mixins :as mx :include-macros true]))
@ -144,7 +144,7 @@
(defn horizontal-rule-render
[own zoom]
(let [scroll (mx/react streams/scroll-a)
(let [scroll (mx/react refs/workspace-scroll)
scroll-x (:x scroll)
translate-x (- (- c/canvas-scroll-padding) (:x scroll))]
(html
@ -164,7 +164,7 @@
(defn vertical-rule-render
[own zoom]
(let [scroll (mx/react streams/scroll-a)
(let [scroll (mx/react refs/workspace-scroll)
scroll-y (:y scroll)
translate-y (- (- c/canvas-scroll-padding) (:y scroll))]
(html

View file

@ -10,17 +10,9 @@
[potok.core :as ptk]
[uxbox.util.geom.point :as gpt]))
(defrecord KeyboardEvent [type key shift ctrl])
(defrecord MouseEvent [type ctrl shift])
;; --- Keyboard Event
(defrecord PointerEvent [window
viewport
canvas
ctrl
shift]
ptk/UpdateEvent
(update [it state]
(assoc-in state [:workspace :pointer] it)))
(defrecord KeyboardEvent [type key shift ctrl])
(defn keyboard-event
[type key ctrl shift]
@ -34,6 +26,10 @@
[v]
(instance? KeyboardEvent v))
;; --- Mouse Event
(defrecord MouseEvent [type ctrl shift])
(defn mouse-event
[type ctrl shift]
{:pre [(keyword? type)
@ -50,7 +46,16 @@
(and (mouse-event? 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
[window viewport canvas ctrl shift]
@ -69,3 +74,19 @@
(defn pointer-event?
[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))