0
Fork 0
mirror of https://github.com/penpot/penpot.git synced 2025-01-24 07:29:08 -05:00

Events reorganization on workspace.

This commit is contained in:
Andrey Antukh 2016-01-12 19:34:47 +02:00
parent fb3457c6fd
commit c397100cbc

View file

@ -39,9 +39,23 @@
:y [v/integer]}) :y [v/integer]})
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; Events ;; Events (explicit)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(defn initialize
"Initialize the workspace state."
[projectid pageid]
(reify
rs/UpdateEvent
(-apply-update [_ state]
(let [s {:project projectid
:toolboxes #{:layers}
:flags #{}
:drawing nil
:selected #{}
:page pageid}]
(assoc state :workspace s)))))
(defn toggle-tool (defn toggle-tool
"Toggle the enabled flag of the specified tool." "Toggle the enabled flag of the specified tool."
[key] [key]
@ -120,14 +134,6 @@
(map :id))] (map :id))]
(assoc-in state [:workspace :selected] (into #{} shapes)))))) (assoc-in state [:workspace :selected] (into #{} shapes))))))
(defn deselect-all
"Mark a shape selected for drawing in the canvas."
[]
(reify
rs/UpdateEvent
(-apply-update [_ state]
(assoc-in state [:workspace :selected] #{}))))
(defn add-shape (defn add-shape
"Mark a shape selected for drawing in the canvas." "Mark a shape selected for drawing in the canvas."
[shape props] [shape props]
@ -158,30 +164,6 @@
(assoc-in $ [:pages-by-id pageid :shapes] shapes) (assoc-in $ [:pages-by-id pageid :shapes] shapes)
(update-in $ [:shapes-by-id] dissoc sid)))))) (update-in $ [:shapes-by-id] dissoc sid))))))
(defn remove-selected
"Deselect all and remove all selected shapes."
[]
(reify
rs/WatchEvent
(-apply-watch [_ state]
(let [selected (get-in state [:workspace :selected])]
(rx/from-coll
(into [(deselect-all)] (map #(delete-shape %) selected)))))))
(defn initialize
"Initialize the workspace state."
[projectid pageid]
(reify
rs/UpdateEvent
(-apply-update [_ state]
(let [s {:project projectid
:toolboxes #{}
:flags #{}
:drawing nil
:selected #{}
:page pageid}]
(assoc state :workspace s)))))
(defn move-shape (defn move-shape
"Mark a shape selected for drawing in the canvas." "Mark a shape selected for drawing in the canvas."
[sid [dx dy :as delta]] [sid [dx dy :as delta]]
@ -191,22 +173,6 @@
(let [shape (get-in state [:shapes-by-id sid])] (let [shape (get-in state [:shapes-by-id sid])]
(update-in state [:shapes-by-id sid] shapes/-move {:dx dx :dy dy}))))) (update-in state [:shapes-by-id sid] shapes/-move {:dx dx :dy dy})))))
(defn move-selected
"Move a minimal position unit the selected shapes."
[dir]
{:pre [(contains? #{:up :down :right :left} dir)]}
(reify
rs/WatchEvent
(-apply-watch [_ state]
(let [selected (get-in state [:workspace :selected])
delta (case dir
:up [0 -1]
:down [0 +1]
:right [+1 0]
:left [-1 0])]
(rx/from-coll
(map #(move-shape % delta) selected))))))
(defn update-shape-rotation (defn update-shape-rotation
[sid rotation] [sid rotation]
{:pre [(number? rotation) {:pre [(number? rotation)
@ -256,6 +222,44 @@
(when fill {:fill fill}) (when fill {:fill fill})
(when opacity {:opacity opacity}))))) (when opacity {:opacity opacity})))))
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; Events (for selected)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(defn deselect-all
"Mark a shape selected for drawing in the canvas."
[]
(reify
rs/UpdateEvent
(-apply-update [_ state]
(assoc-in state [:workspace :selected] #{}))))
(defn remove-selected
"Deselect all and remove all selected shapes."
[]
(reify
rs/WatchEvent
(-apply-watch [_ state]
(let [selected (get-in state [:workspace :selected])]
(rx/from-coll
(into [(deselect-all)] (map #(delete-shape %) selected)))))))
(defn move-selected
"Move a minimal position unit the selected shapes."
[dir]
{:pre [(contains? #{:up :down :right :left} dir)]}
(reify
rs/WatchEvent
(-apply-watch [_ state]
(let [selected (get-in state [:workspace :selected])
delta (case dir
:up [0 -1]
:down [0 +1]
:right [+1 0]
:left [-1 0])]
(rx/from-coll
(map #(move-shape % delta) selected))))))
(defn update-selected-shapes-fill (defn update-selected-shapes-fill
"Update the fill related attributed on "Update the fill related attributed on
selected shapes." selected shapes."