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:
parent
7a7059e172
commit
e3f58f6823
5 changed files with 42 additions and 33 deletions
|
@ -85,6 +85,10 @@
|
|||
(-> (l/in [:pointer :window])
|
||||
(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))
|
||||
|
||||
;; --- 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?
|
||||
|
|
|
@ -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]
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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))
|
||||
|
|
Loading…
Add table
Reference in a new issue