mirror of
https://github.com/penpot/penpot.git
synced 2025-05-10 18:56:37 +02:00
🚧 Show shapes options.
This commit is contained in:
parent
17aa744b52
commit
cd66d4a519
7 changed files with 40 additions and 47 deletions
|
@ -234,6 +234,18 @@
|
||||||
[txt]
|
[txt]
|
||||||
::todo)
|
::todo)
|
||||||
|
|
||||||
|
(defn toggle-layout-flag
|
||||||
|
[flag]
|
||||||
|
(s/assert keyword? flag)
|
||||||
|
(ptk/reify ::toggle-layout-flag
|
||||||
|
ptk/UpdateEvent
|
||||||
|
(update [_ state]
|
||||||
|
(update state :workspace-layout
|
||||||
|
(fn [flags]
|
||||||
|
(if (contains? flags flag)
|
||||||
|
(disj flags flag)
|
||||||
|
(conj flags flag)))))))
|
||||||
|
|
||||||
;; --- Workspace Ruler
|
;; --- Workspace Ruler
|
||||||
|
|
||||||
(defrecord ActivateRuler []
|
(defrecord ActivateRuler []
|
||||||
|
@ -775,6 +787,10 @@
|
||||||
xfmt (gmt/translate prev delta)]
|
xfmt (gmt/translate prev delta)]
|
||||||
(assoc-in state [:workspace-data :shapes-by-id id :modifier-mtx] xfmt)))]
|
(assoc-in state [:workspace-data :shapes-by-id id :modifier-mtx] xfmt)))]
|
||||||
(ptk/reify ::apply-temporal-displacement-in-bulk
|
(ptk/reify ::apply-temporal-displacement-in-bulk
|
||||||
|
;; udp/IPageOps
|
||||||
|
;; (-ops [_]
|
||||||
|
;; (mapv #(vec :udp/shape id :move delta) ids))
|
||||||
|
|
||||||
ptk/UpdateEvent
|
ptk/UpdateEvent
|
||||||
(update [_ state]
|
(update [_ state]
|
||||||
(reduce process-shape state ids)))))
|
(reduce process-shape state ids)))))
|
||||||
|
@ -805,29 +821,6 @@
|
||||||
(update [_ state]
|
(update [_ state]
|
||||||
(reduce process-shape state ids)))))
|
(reduce process-shape state ids)))))
|
||||||
|
|
||||||
(defn rehash-shape-relationship
|
|
||||||
"Checks shape overlaping with existing canvas, if one or more
|
|
||||||
overlaps, assigns the shape to the first one."
|
|
||||||
[id]
|
|
||||||
(s/assert ::us/uuid id)
|
|
||||||
(letfn [(overlaps? [canvas shape]
|
|
||||||
(let [shape1 (geom/shape->rect-shape canvas)
|
|
||||||
shape2 (geom/shape->rect-shape shape)]
|
|
||||||
(geom/overlaps? shape1 shape2)))]
|
|
||||||
(ptk/reify ::rehash-shape-relationship
|
|
||||||
ptk/UpdateEvent
|
|
||||||
(update [_ state]
|
|
||||||
(let [shape (get-in state [:workspace-data :shapes-by-id id])
|
|
||||||
xform (comp (map #(get-in state [:workspace-data :shapes-by-id %]))
|
|
||||||
(filter #(overlaps? % shape))
|
|
||||||
(take 1))
|
|
||||||
canvas (->> (get-in state [:workspace-data :canvas])
|
|
||||||
(sequence xform)
|
|
||||||
(first))]
|
|
||||||
(if canvas
|
|
||||||
(update-in state [:workspace-data :shapes-by-id id] assoc :canvas (:id canvas))
|
|
||||||
(update-in state [:workspace-data :shapes-by-id id] assoc :canvas nil)))))))
|
|
||||||
|
|
||||||
;; --- Start shape "edition mode"
|
;; --- Start shape "edition mode"
|
||||||
|
|
||||||
(defn start-edition-mode
|
(defn start-edition-mode
|
||||||
|
|
|
@ -110,7 +110,7 @@
|
||||||
|
|
||||||
[:> rdnd/provider {:backend rdnd/html5}
|
[:> rdnd/provider {:backend rdnd/html5}
|
||||||
[:& messages-widget]
|
[:& messages-widget]
|
||||||
[:& header {:page page :flags flags}]
|
[:& header {:page page :layout layout :flags flags}]
|
||||||
|
|
||||||
(when (:colorpalette flags)
|
(when (:colorpalette flags)
|
||||||
[:& colorpalette])
|
[:& colorpalette])
|
||||||
|
|
|
@ -43,7 +43,7 @@
|
||||||
;; --- Header Component
|
;; --- Header Component
|
||||||
|
|
||||||
(mf/defc header
|
(mf/defc header
|
||||||
[{:keys [page flags] :as props}]
|
[{:keys [page layout flags] :as props}]
|
||||||
(let [toggle #(st/emit! (dw/toggle-flag %))
|
(let [toggle #(st/emit! (dw/toggle-flag %))
|
||||||
on-undo #(st/emit! (udu/undo))
|
on-undo #(st/emit! (udu/undo))
|
||||||
on-redo #(st/emit! (udu/redo))
|
on-redo #(st/emit! (udu/redo))
|
||||||
|
@ -55,41 +55,41 @@
|
||||||
[:a {:on-click #(st/emit! (rt/nav :dashboard-projects))} i/logo-icon]]
|
[:a {:on-click #(st/emit! (rt/nav :dashboard-projects))} i/logo-icon]]
|
||||||
[:div.project-tree-btn
|
[:div.project-tree-btn
|
||||||
{:alt (tr "header.sitemap")
|
{:alt (tr "header.sitemap")
|
||||||
:class (when (contains? flags :sitemap) "selected")
|
:class (when (contains? layout :sitemap) "selected")
|
||||||
:on-click (partial toggle :sitemap)}
|
:on-click #(st/emit! (dw/toggle-layout-flag :sitemap))}
|
||||||
i/project-tree
|
i/project-tree
|
||||||
[:span {} (:name page)]]
|
[:span {} (:name page)]]
|
||||||
[:div.workspace-options
|
[:div.workspace-options
|
||||||
[:ul.options-btn
|
[:ul.options-btn
|
||||||
[:li.tooltip.tooltip-bottom
|
[:li.tooltip.tooltip-bottom
|
||||||
{:alt (tr "header.draw-tools")
|
{:alt (tr "header.draw-tools")
|
||||||
:class (when (contains? flags :drawtools) "selected")
|
:class (when (contains? layout :drawtools) "selected")
|
||||||
:on-click (partial toggle :drawtools)}
|
:on-click #(st/emit! (dw/toggle-layout-flag :drawtools))}
|
||||||
i/shapes]
|
i/shapes]
|
||||||
[:li.tooltip.tooltip-bottom
|
[:li.tooltip.tooltip-bottom
|
||||||
{:alt (tr "header.color-palette")
|
{:alt (tr "header.color-palette")
|
||||||
:class (when (contains? flags :colorpalette) "selected")
|
:class (when (contains? layout :colorpalette) "selected")
|
||||||
:on-click (partial toggle :colorpalette)}
|
:on-click #(st/emit! (dw/toggle-layout-flag :colorpalette))}
|
||||||
i/palette]
|
i/palette]
|
||||||
[:li.tooltip.tooltip-bottom
|
[:li.tooltip.tooltip-bottom
|
||||||
{:alt (tr "header.icons")
|
{:alt (tr "header.icons")
|
||||||
:class (when (contains? flags :icons) "selected")
|
:class (when (contains? layout :icons) "selected")
|
||||||
:on-click (partial toggle :icons)}
|
:on-click #(st/emit! (dw/toggle-layout-flag :icons))}
|
||||||
i/icon-set]
|
i/icon-set]
|
||||||
[:li.tooltip.tooltip-bottom
|
[:li.tooltip.tooltip-bottom
|
||||||
{:alt (tr "header.layers")
|
{:alt (tr "header.layers")
|
||||||
:class (when (contains? flags :layers) "selected")
|
:class (when (contains? layout :layers) "selected")
|
||||||
:on-click (partial toggle :layers)}
|
:on-click #(st/emit! (dw/toggle-layout-flag :layers))}
|
||||||
i/layers]
|
i/layers]
|
||||||
[:li.tooltip.tooltip-bottom
|
[:li.tooltip.tooltip-bottom
|
||||||
{:alt (tr "header.element-options")
|
{:alt (tr "header.element-options")
|
||||||
:class (when (contains? flags :element-options) "selected")
|
:class (when (contains? layout :element-options) "selected")
|
||||||
:on-click (partial toggle :element-options)}
|
:on-click #(st/emit! (dw/toggle-layout-flag :element-options))}
|
||||||
i/options]
|
i/options]
|
||||||
[:li.tooltip.tooltip-bottom
|
[:li.tooltip.tooltip-bottom
|
||||||
{:alt (tr "header.document-history")
|
{:alt (tr "header.document-history")
|
||||||
:class (when (contains? flags :document-history) "selected")
|
:class (when (contains? layout :document-history) "selected")
|
||||||
:on-click (partial toggle :document-history)}
|
:on-click #(st/emit! (dw/toggle-layout-flag :document-history))}
|
||||||
i/undo-history]]
|
i/undo-history]]
|
||||||
[:ul.options-btn
|
[:ul.options-btn
|
||||||
[:li.tooltip.tooltip-bottom
|
[:li.tooltip.tooltip-bottom
|
||||||
|
|
|
@ -50,7 +50,7 @@
|
||||||
{:wrap [mf/wrap-memo]}
|
{:wrap [mf/wrap-memo]}
|
||||||
[{:keys [flags] :as props}]
|
[{:keys [flags] :as props}]
|
||||||
(letfn [(close [event]
|
(letfn [(close [event]
|
||||||
(st/emit! (dw/deactivate-flag :drawtools)))
|
(st/emit! (dw/toggle-layout-flag :drawtools)))
|
||||||
(select [event tool]
|
(select [event tool]
|
||||||
(st/emit! :interrupt
|
(st/emit! :interrupt
|
||||||
(dw/deactivate-ruler)
|
(dw/deactivate-ruler)
|
||||||
|
|
|
@ -237,7 +237,7 @@
|
||||||
|
|
||||||
(mf/defc layers-toolbox
|
(mf/defc layers-toolbox
|
||||||
[{:keys [page] :as props}]
|
[{:keys [page] :as props}]
|
||||||
(let [on-click #(st/emit! (dw/toggle-flag :layers))
|
(let [on-click #(st/emit! (dw/toggle-layout-flag :layers))
|
||||||
|
|
||||||
selected (mf/deref refs/selected-shapes)
|
selected (mf/deref refs/selected-shapes)
|
||||||
data (mf/deref refs/workspace-data)
|
data (mf/deref refs/workspace-data)
|
||||||
|
|
|
@ -88,9 +88,9 @@
|
||||||
;; --- Options
|
;; --- Options
|
||||||
|
|
||||||
(mf/defc shape-options
|
(mf/defc shape-options
|
||||||
[{:keys [sid] :as props}]
|
[{:keys [shape-id] :as props}]
|
||||||
(let [shape-iref (mf/use-memo {:deps #js [sid]
|
(let [shape-iref (mf/use-memo {:deps #js [shape-id]
|
||||||
:fn #(-> (l/in [:shapes sid])
|
:fn #(-> (l/in [:workspace-data :shapes-by-id shape-id])
|
||||||
(l/derive st/state))})
|
(l/derive st/state))})
|
||||||
shape (mf/deref shape-iref)
|
shape (mf/deref shape-iref)
|
||||||
menus (get +menus-map+ (:type shape))]
|
menus (get +menus-map+ (:type shape))]
|
||||||
|
@ -110,7 +110,7 @@
|
||||||
(mf/defc options-toolbox
|
(mf/defc options-toolbox
|
||||||
{:wrap [mf/wrap-memo]}
|
{:wrap [mf/wrap-memo]}
|
||||||
[{:keys [page selected] :as props}]
|
[{:keys [page selected] :as props}]
|
||||||
(let [close #(st/emit! (udw/toggle-flag :element-options))
|
(let [close #(st/emit! (udw/toggle-layout-flag :element-options))
|
||||||
selected (mf/deref refs/selected-shapes)]
|
selected (mf/deref refs/selected-shapes)]
|
||||||
[:div.elementa-options.tool-window
|
[:div.elementa-options.tool-window
|
||||||
[:div.tool-window-bar
|
[:div.tool-window-bar
|
||||||
|
@ -120,5 +120,5 @@
|
||||||
[:div.tool-window-content
|
[:div.tool-window-content
|
||||||
[:div.element-options
|
[:div.element-options
|
||||||
(if (= (count selected) 1)
|
(if (= (count selected) 1)
|
||||||
[:& shape-options {:sid (first selected)}]
|
[:& shape-options {:shape-id (first selected)}]
|
||||||
[:& page-options {:page page}])]]]))
|
[:& page-options {:page page}])]]]))
|
||||||
|
|
|
@ -98,7 +98,7 @@
|
||||||
(mf/defc sitemap-toolbox
|
(mf/defc sitemap-toolbox
|
||||||
[{:keys [file page] :as props}]
|
[{:keys [file page] :as props}]
|
||||||
(let [create-fn #(modal/show! page-form-dialog {:page {:file-id (:file-id page)}})
|
(let [create-fn #(modal/show! page-form-dialog {:page {:file-id (:file-id page)}})
|
||||||
close-fn #(st/emit! (dw/toggle-flag :sitemap))]
|
close-fn #(st/emit! (dw/toggle-layout-flag :sitemap))]
|
||||||
[:div.sitemap.tool-window
|
[:div.sitemap.tool-window
|
||||||
[:div.tool-window-bar
|
[:div.tool-window-bar
|
||||||
[:div.tool-window-icon i/project-tree]
|
[:div.tool-window-icon i/project-tree]
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue