Minor changes on color picker.

This commit is contained in:
Andrey Antukh 2016-04-14 21:19:04 +03:00
parent 73d2a6cfd5
commit 48171bbecc
No known key found for this signature in database
GPG Key ID: 4DFEBCB8316A8B95
3 changed files with 55 additions and 44 deletions

View File

@ -65,6 +65,22 @@
[:rect {:x 0 :y 0 :width "100%" :height "100%" [:rect {:x 0 :y 0 :width "100%" :height "100%"
:fill "url(#gradient-hsv)"}]])) :fill "url(#gradient-hsv)"}]]))
(def ^:const default-dimensions
{:pi-height 5
:pi-width 5
:si-height 10
:p-height 200
:p-width 200
:s-height 200})
(def ^:const small-dimensions
{:pi-height 5
:pi-width 5
:si-height 10
:p-height 170
:p-width 170
:s-height 170})
(def slider-box (def slider-box
(mx/component (mx/component
{:render slider-box-render {:render slider-box-render
@ -74,53 +90,63 @@
;; --- Color Picker ;; --- Color Picker
(defn- on-picker-click (defn- on-picker-click
[local on-change color event] [local dimensions on-change color event]
(let [event (.-nativeEvent event) (let [event (.-nativeEvent event)
my (.-offsetY event) my (.-offsetY event)
height (:p-height @local) height (:p-height dimensions)
width (:p-width @local) width (:p-width dimensions)
mx (.-offsetX event) mx (.-offsetX event)
my (.-offsetY event) my (.-offsetY event)
[h] color [h] color
s (/ mx width) s (/ mx width)
v (/ (- height my) height)] v (/ (- height my) height)
(on-change (color/hsv->hex [(+ h 15) s (* v 255)])) hex (color/hsv->hex [h s (* v 255)])]
(swap! local dissoc :color))) (swap! local assoc :color [h s (* v 255)])
(on-change hex)))
(defn- on-slide-click (defn- on-slide-click
[local event] [local dimensions event]
(let [event (.-nativeEvent event) (let [event (.-nativeEvent event)
my (.-offsetY event) my (.-offsetY event)
h (* (/ my (:s-height @local)) 360)] h (* (/ my (:s-height dimensions)) 360)]
(swap! local assoc :color [h 1 255]))) (swap! local assoc :color [(+ h 15) 1 255])))
(defn- colorpicker-render (defn- colorpicker-render
[own & {:keys [value on-change] :or {value "#d4edfb"}}] [own & {:keys [value on-change theme]
:or {value "#d4edfb" theme :default}}]
(let [local (:rum/local own) (let [local (:rum/local own)
[h s v :as color] (if (:color @local) dimensions (case theme
(:color @local) :default default-dimensions
(let [[h s v] (color/hex->hsv value)] :small small-dimensions
[(if (pos? h) (- h 15) h) s v])) default-dimensions)
bg (color/hsv->hex [(+ h 15) 1 255]) [h s v :as color] (or (:color @local)
sit (- (/ (* h (:s-height @local)) 360) (color/hex->hsv value))
(/ (:si-height @local) 2)) bg (color/hsv->hex [h 1 255])
pit (- (* s (:p-width @local)) pit (- (* s (:p-width dimensions))
(/ (:pi-height @local) 2)) (/ (:pi-height dimensions) 2))
pil (- (- (:p-height @local) (* (/ v 255) (:p-height @local))) pil (- (- (:p-height dimensions) (* (/ v 255) (:p-height dimensions)))
(/ (:pi-width @local) 2)) (/ (:pi-width dimensions) 2))
sit (- (/ (* (- h 15) (:s-height dimensions)) 360)
(/ (:si-height dimensions) 2))
on-mouse-down #(swap! local assoc :mousedown true) on-mouse-down #(swap! local assoc :mousedown true)
on-mouse-up #(swap! local assoc :mousedown false) on-mouse-up #(swap! local assoc :mousedown false)
on-mouse-move-slide #(when (:mousedown @local) on-mouse-move-slide #(when (:mousedown @local)
(on-slide-click local %)) (on-slide-click local dimensions %))
on-mouse-move-picker #(when (:mousedown @local) on-mouse-move-picker #(when (:mousedown @local)
(on-picker-click local on-change color %))] (on-picker-click local dimensions on-change color %))]
(html (html
[:div.color-picker [:div.color-picker
[:div.picker-wrapper #_[:div.tester {:style {:width "100px" :height "100px"
:border "1px solid black"
:position "fixed" :top "50px" :left "50px"
:backgroundColor (color/hsv->hex color)}}]
[:div.picker-wrapper
[:div.picker [:div.picker
{:ref "picker" {:ref "picker"
:on-click (partial on-picker-click local on-change color) :on-click (partial on-picker-click local dimensions on-change color)
:on-mouse-down on-mouse-down :on-mouse-down on-mouse-down
:on-mouse-up on-mouse-up :on-mouse-up on-mouse-up
:on-mouse-move on-mouse-move-picker :on-mouse-move on-mouse-move-picker
@ -137,32 +163,15 @@
:on-mouse-down on-mouse-down :on-mouse-down on-mouse-down
:on-mouse-up on-mouse-up :on-mouse-up on-mouse-up
:on-mouse-move on-mouse-move-slide :on-mouse-move on-mouse-move-slide
:on-click (partial on-slide-click local)} :on-click (partial on-slide-click local dimensions)}
(slider-box)] (slider-box)]
[:div.slide-indicator [:div.slide-indicator
{:ref "slide-indicator" {:ref "slide-indicator"
:style {:top (str sit "px") :style {:top (str sit "px")
:pointerEvents "none"}}]]]))) :pointerEvents "none"}}]]])))
(defn- colorpicker-did-mount
[own]
(let [local (:rum/local own)
picker (mx/get-ref-dom own "picker")
slide (mx/get-ref-dom own "slide")
picker-ind (mx/get-ref-dom own "picker-indicator")
slide-ind (mx/get-ref-dom own "slide-indicator")]
(swap! local assoc
:pi-height (.-offsetHeight picker-ind)
:pi-width (.-offsetWidth picker-ind)
:si-height (.-offsetHeight slide-ind)
:p-height (.-offsetHeight picker)
:p-width (.-offsetWidth picker)
:s-height (.-offsetHeight slide))
own))
(def ^:static colorpicker (def ^:static colorpicker
(mx/component (mx/component
{:render colorpicker-render {:render colorpicker-render
:did-mount colorpicker-did-mount
:name "colorpicker" :name "colorpicker"
:mixins [mx/static (mx/local)]})) :mixins [mx/static (mx/local)]}))

View File

@ -35,7 +35,7 @@
(def settings-form-defaults (def settings-form-defaults
{:grid/x-axis c/grid-x-axis {:grid/x-axis c/grid-x-axis
:grid/y-axis c/grid-y-axis :grid/y-axis c/grid-y-axis
:grid/color "#0000ff" :grid/color "#b5bdb9"
:grid/alignment false}) :grid/alignment false})
(defn- settings-form-render (defn- settings-form-render

View File

@ -120,6 +120,7 @@
[:span "Color"] [:span "Color"]
[:div.color-picker-small [:div.color-picker-small
(colorpicker (colorpicker
:theme :small
:value (:stroke shape "#000000") :value (:stroke shape "#000000")
:on-change #(change-stroke {:color %}))] :on-change #(change-stroke {:color %}))]
@ -166,6 +167,7 @@
[:div.color-picker-small [:div.color-picker-small
(colorpicker (colorpicker
:theme :small
:value (:fill shape "#000000") :value (:fill shape "#000000")
:on-change #(on-color-picker-event %))] :on-change #(on-color-picker-event %))]