Minor refactor on horizontal rules rendering.

This commit is contained in:
Andrey Antukh 2016-02-18 18:04:49 +02:00
parent b2da09f0c1
commit 89baabbb62
2 changed files with 57 additions and 41 deletions

View file

@ -14,7 +14,7 @@
[uxbox.ui.workspace.shortcuts :as wshortcuts] [uxbox.ui.workspace.shortcuts :as wshortcuts]
[uxbox.ui.workspace.pagesmngr :refer (pagesmngr)] [uxbox.ui.workspace.pagesmngr :refer (pagesmngr)]
[uxbox.ui.workspace.header :refer (header)] [uxbox.ui.workspace.header :refer (header)]
[uxbox.ui.workspace.rules :refer (h-rule v-rule)] [uxbox.ui.workspace.rules :refer (horizontal-rule vertical-rule)]
[uxbox.ui.workspace.sidebar :refer (left-sidebar right-sidebar)] [uxbox.ui.workspace.sidebar :refer (left-sidebar right-sidebar)]
[uxbox.ui.workspace.colorpalette :refer (colorpalette)] [uxbox.ui.workspace.colorpalette :refer (colorpalette)]
[uxbox.ui.workspace.canvas :refer (viewport)])) [uxbox.ui.workspace.canvas :refer (viewport)]))
@ -77,8 +77,8 @@
;; (pagesmngr) ;; (pagesmngr)
;; Rules ;; Rules
(h-rule left-sidebar?) (horizontal-rule)
(v-rule left-sidebar?) (vertical-rule)
(coordinates) (coordinates)

View file

@ -8,33 +8,51 @@
[uxbox.ui.workspace.base :as wb] [uxbox.ui.workspace.base :as wb]
[uxbox.ui.mixins :as mx])) [uxbox.ui.mixins :as mx]))
(def ^:static zoom 1) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(def ^:static step-padding 20) ;; Constants & Helpers
(def ^:static step-size 10) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(def ^:static start-width wb/canvas-start-x)
(def ^:static start-height wb/canvas-start-y) (def ^:const zoom 1)
(def ^:static scroll-left 0) (def ^:const step-padding 20)
(def ^:static scroll-top 0) (def ^:const step-size 10)
(def ^:const start-width wb/canvas-start-x)
(def ^:const start-height wb/canvas-start-y)
(def ^:const scroll-left 0)
(def ^:const scroll-top 0)
(defn big-ticks-mod [zoom] (/ 100 zoom)) (defn big-ticks-mod [zoom] (/ 100 zoom))
(defn mid-ticks-mod [zoom] (/ 50 zoom)) (defn mid-ticks-mod [zoom] (/ 50 zoom))
(defn h-line (def ^:const +ticks+
[position value] (concat (range (- (/ wb/viewport-width 1)) 0 step-size)
(range 0 (/ wb/viewport-width 1) step-size)))
(def ^:const +rule-padding+ 20)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; Horizontal Rule
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(defn vertical-tick-render
[own value]
(let [big-ticks-mod (big-ticks-mod 1) (let [big-ticks-mod (big-ticks-mod 1)
mid-ticks-mod (mid-ticks-mod 1) mid-ticks-mod (mid-ticks-mod 1)
big-step? (< (mod value big-ticks-mod) step-size) big-step? (< (mod value big-ticks-mod) step-size)
mid-step? (< (mod value mid-ticks-mod) step-size)] mid-step? (< (mod value mid-ticks-mod) step-size)
pos (+ value +rule-padding+
wb/canvas-start-x
wb/canvas-scroll-padding)
pos (* pos zoom)]
(cond (cond
big-step? big-step?
(html (html
[:g {:key position} [:g {:key value}
[:line {:x1 position [:line {:x1 pos
:x2 position :x2 pos
:y1 5 :y1 5
:y2 step-padding :y2 step-padding
:stroke "#9da2a6"}] :stroke "#9da2a6"}]
[:text {:x (+ position 2) [:text {:x (+ pos 2)
:y 13 :y 13
:fill "#9da2a6" :fill "#9da2a6"
:style {:font-size "12px"}} :style {:font-size "12px"}}
@ -42,50 +60,48 @@
mid-step? mid-step?
(html (html
[:line {:key position [:line {:key pos
:x1 position :x1 pos
:x2 position :x2 pos
:y1 10 :y1 10
:y2 step-padding :y2 step-padding
:stroke "#9da2a6"}]) :stroke "#9da2a6"}])
:else :else
(html (html
[:line {:key position [:line {:key pos
:x1 position :x1 pos
:x2 position :x2 pos
:y1 15 :y1 15
:y2 step-padding :y2 step-padding
:stroke "#9da2a6"}])))) :stroke "#9da2a6"}]))))
(def ^:const +ticks+ (def ^:const vertical-tick
(concat (range (- (/ wb/viewport-width 2)) 0 step-size) (mx/component
(range 0 (/ wb/viewport-width 2) step-size))) {:render vertical-tick-render
:name "vertical-tick-render"
(def ^:const +rule-padding+ 20) :mixins [mx/static]}))
(defn h-rule-render (defn horizontal-rule-render
[own sidebar?] [own sidebar?]
(println "h-rule-render")
(let [scroll (rum/react wb/scroll-a) (let [scroll (rum/react wb/scroll-a)
scroll-x (:x scroll) scroll-x (:x scroll)
scroll-y (:y scroll) scroll-y (:y scroll)
translate-x (- (- wb/canvas-scroll-padding) (:x scroll))] translate-x (- (- wb/canvas-scroll-padding) (:x scroll))]
(println (count +ticks+))
(html (html
[:svg.horizontal-rule [:svg.horizontal-rule
{:width wb/viewport-width {:width wb/viewport-width
:height 20} :height 20}
[:g {:transform (str "translate(" translate-x ", 0)")} [:g {:transform (str "translate(" translate-x ", 0)")}
(for [tick +ticks+ (for [value +ticks+]
:let [pos (* (+ tick wb/canvas-start-x wb/canvas-scroll-padding +rule-padding+) zoom)]] (-> (vertical-tick value)
(h-line pos tick))]]))) (rum/with-key value)))]])))
(def h-rule (def horizontal-rule
(mx/component (mx/component
{:render h-rule-render {:render horizontal-rule-render
:name "h-rule" :name "horizontal-rule"
:mixins [mx/static rum/reactive]})) :mixins [mx/static rum/reactive]}))
@ -125,7 +141,7 @@
:x2 step-padding :x2 step-padding
:stroke "#9da2a6"}]))) :stroke "#9da2a6"}])))
(defn v-rule-render (defn vertical-rule-render
[own sidebar?] [own sidebar?]
(let [height wb/viewport-height (let [height wb/viewport-height
ticks (concat (range (- step-padding start-height) 0 step-size) ticks (concat (range (- step-padding start-height) 0 step-size)
@ -144,8 +160,8 @@
:let [pos (* (+ tick start-height) zoom)]] :let [pos (* (+ tick start-height) zoom)]]
(v-line pos tick))]]))) (v-line pos tick))]])))
(def v-rule (def vertical-rule
(mx/component (mx/component
{:render v-rule-render {:render vertical-rule-render
:name "v-rule" :name "vertical-rule"
:mixins [mx/static rum/reactive]})) :mixins [mx/static rum/reactive]}))