Merge remote-tracking branch 'origin/staging' into develop

This commit is contained in:
Andrey Antukh 2022-02-22 13:06:09 +01:00
commit a4ef3f770c
39 changed files with 981 additions and 817 deletions

View file

@ -747,14 +747,21 @@
;; --- Delete Selected
(def delete-selected
(defn delete-selected
"Deselect all and remove all selected shapes."
[]
(ptk/reify ::delete-selected
ptk/WatchEvent
(watch [_ state _]
(let [selected (wsh/lookup-selected state)]
(rx/of (dwc/delete-shapes selected)
(dws/deselect-all))))))
(let [selected (wsh/lookup-selected state)
hover-guides (get-in state [:workspace-guides :hover])]
(cond
(d/not-empty? selected)
(rx/of (dwc/delete-shapes selected)
(dws/deselect-all))
(d/not-empty? hover-guides)
(rx/of (dwgu/remove-guides hover-guides)))))))
;; --- Shape Vertical Ordering
@ -2061,4 +2068,5 @@
;; Guides
(d/export dwgu/update-guides)
(d/export dwgu/remove-guide)
(d/export dwgu/set-hover-guide)

View file

@ -41,6 +41,12 @@
(defn remove-guide [guide]
(us/verify ::csp/guide guide)
(ptk/reify ::remove-guide
ptk/UpdateEvent
(update [_ state]
(let [sdisj (fnil disj #{})]
(-> state
(update-in [:workspace-guides :hover] sdisj (:id guide)))))
ptk/WatchEvent
(watch [it state _]
(let [page (wsh/lookup-page state)
@ -53,6 +59,16 @@
(pcb/set-page-option :guides new-guides))]
(rx/of (dwc/commit-changes changes))))))
(defn remove-guides
[ids]
(ptk/reify ::remove-guides
ptk/WatchEvent
(watch [_ state _]
(let [page (wsh/lookup-page state)
guides (get-in page [:options :guides] {})
guides (-> (select-keys guides ids) (vals))]
(rx/from (->> guides (mapv #(remove-guide %))))))))
(defn move-frame-guides
"Move guides that are inside a frame when that frame is moved"
[ids]
@ -86,3 +102,14 @@
(filter (comp frame-ids? :frame-id))
(map build-move-event)
(rx/from))))))
(defn set-hover-guide
[id hover?]
(ptk/reify ::set-hover-guide
ptk/UpdateEvent
(update [_ state]
(let [sconj (fnil conj #{})
sdisj (fnil disj #{})]
(if hover?
(update-in state [:workspace-guides :hover] sconj id)
(update-in state [:workspace-guides :hover] sdisj id))))))

View file

@ -190,7 +190,8 @@
:cut {:tooltip (ds/meta "X")
:command (ds/c-mod "x")
:fn #(st/emit! (dw/copy-selected) dw/delete-selected)}
:fn #(st/emit! (dw/copy-selected)
(dw/delete-selected))}
:paste {:tooltip (ds/meta "V")
:disabled true
@ -199,7 +200,7 @@
:delete {:tooltip (ds/supr)
:command ["del" "backspace"]
:fn #(st/emit! dw/delete-selected)}
:fn #(st/emit! (dw/delete-selected))}
:bring-forward {:tooltip (ds/meta ds/up-arrow)
:command (ds/c-mod "up")

View file

@ -103,7 +103,8 @@
(mf/defc context-menu-edit
[]
(let [do-copy (st/emitf (dw/copy-selected))
do-cut (st/emitf (dw/copy-selected) dw/delete-selected)
do-cut (st/emitf (dw/copy-selected)
(dw/delete-selected))
do-paste (st/emitf dw/paste)
do-duplicate (st/emitf (dw/duplicate-selected false))]
[:*
@ -406,7 +407,7 @@
(mf/defc context-menu-delete
[]
(let [do-delete (st/emitf dw/delete-selected)]
(let [do-delete (st/emitf (dw/delete-selected))]
[:& menu-entry {:title (tr "workspace.shape.menu.delete")
:shortcut (sc/get-tooltip :delete)
:on-click do-delete}]))

View file

@ -186,19 +186,23 @@
(st/emit! (ms/->MouseEvent :double-click ctrl? shift? alt?))
(when (and (not drawing-path?) shape)
(cond frame?
(st/emit! (dw/select-shape id shift?))
;; Emit asynchronously so the double click to exit shapes won't break
(timers/schedule
#(when (and (not drawing-path?) shape)
(cond
frame?
(st/emit! (dw/select-shape id shift?))
(and group? (> (count @hover-ids) 1))
(let [selected (get objects (second @hover-ids))]
(reset! hover selected)
(reset! hover-ids (into [] (rest @hover-ids)))
(st/emit! (dw/select-shape (:id selected))))
(and group? (> (count @hover-ids) 1))
(let [selected (get objects (second @hover-ids))]
(reset! hover selected)
(reset! hover-ids (into [] (rest @hover-ids)))
(not= id edition)
(st/emit! (dw/select-shape id)
(dw/start-editing-selected))))))))
(st/emit! (dw/select-shape (:id selected))))
(not= id edition)
(st/emit! (dw/select-shape id)
(dw/start-editing-selected)))))))))
(defn on-context-menu
[hover hover-ids]

View file

@ -36,7 +36,7 @@
(defn use-guide
"Hooks to support drag/drop for existing guides and new guides"
[on-guide-change get-hover-frame zoom {:keys [position axis frame-id]}]
[on-guide-change get-hover-frame zoom {:keys [id position axis frame-id]}]
(let [dragging-ref (mf/use-ref false)
start-ref (mf/use-ref nil)
start-pos-ref (mf/use-ref nil)
@ -52,11 +52,13 @@
on-pointer-enter
(mf/use-callback
(fn []
(st/emit! (dw/set-hover-guide id true))
(swap! state assoc :hover true)))
on-pointer-leave
(mf/use-callback
(fn []
(st/emit! (dw/set-hover-guide id false))
(swap! state assoc :hover false)))
on-pointer-down