From e3f58f6823b4756791654ee1f119deb39495a3eb Mon Sep 17 00:00:00 2001 From: Andrey Antukh Date: Mon, 16 Jan 2017 17:47:01 +0100 Subject: [PATCH] Start use user-events for scroll events. In the same way as keyboard and mouse events. --- frontend/src/uxbox/main/refs.cljs | 4 ++ frontend/src/uxbox/main/streams.cljs | 13 ------ frontend/src/uxbox/main/ui/workspace.cljs | 9 ++-- .../src/uxbox/main/ui/workspace/rules.cljs | 6 +-- frontend/src/uxbox/main/user_events.cljs | 43 ++++++++++++++----- 5 files changed, 42 insertions(+), 33 deletions(-) diff --git a/frontend/src/uxbox/main/refs.cljs b/frontend/src/uxbox/main/refs.cljs index 9afdfe283..e069e9102 100644 --- a/frontend/src/uxbox/main/refs.cljs +++ b/frontend/src/uxbox/main/refs.cljs @@ -85,6 +85,10 @@ (-> (l/in [:pointer :window]) (l/derive workspace))) +(def workspace-scroll + (-> (l/key :scroll) + (l/derive workspace))) + diff --git a/frontend/src/uxbox/main/streams.cljs b/frontend/src/uxbox/main/streams.cljs index f60096016..209f84203 100644 --- a/frontend/src/uxbox/main/streams.cljs +++ b/frontend/src/uxbox/main/streams.cljs @@ -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? diff --git a/frontend/src/uxbox/main/ui/workspace.cljs b/frontend/src/uxbox/main/ui/workspace.cljs index 698b43f66..133c7d307 100644 --- a/frontend/src/uxbox/main/ui/workspace.cljs +++ b/frontend/src/uxbox/main/ui/workspace.cljs @@ -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] diff --git a/frontend/src/uxbox/main/ui/workspace/rules.cljs b/frontend/src/uxbox/main/ui/workspace/rules.cljs index 62c3ba292..e3b36b5cf 100644 --- a/frontend/src/uxbox/main/ui/workspace/rules.cljs +++ b/frontend/src/uxbox/main/ui/workspace/rules.cljs @@ -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 diff --git a/frontend/src/uxbox/main/user_events.cljs b/frontend/src/uxbox/main/user_events.cljs index a04cb7c41..cd53810da 100644 --- a/frontend/src/uxbox/main/user_events.cljs +++ b/frontend/src/uxbox/main/user_events.cljs @@ -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))