mirror of
https://github.com/penpot/penpot.git
synced 2025-08-02 18:08:31 +02:00
✨ Move guides and comments for wasm modifiers
This commit is contained in:
parent
f6fe41af96
commit
facb0227a0
5 changed files with 71 additions and 31 deletions
|
@ -132,8 +132,9 @@
|
|||
(rx/ignore))))))))
|
||||
|
||||
;; Move comment threads that are inside a frame when that frame is moved"
|
||||
(defmethod ptk/resolve ::move-frame-comment-threads
|
||||
[_ ids]
|
||||
|
||||
(defn- move-frame-comment-threads
|
||||
[ids transforms]
|
||||
(assert (sm/check-coll-of-uuid ids))
|
||||
|
||||
(ptk/reify ::move-frame-comment-threads
|
||||
|
@ -148,14 +149,23 @@
|
|||
threads-position-map
|
||||
(get page :comment-thread-positions)
|
||||
|
||||
object-modifiers
|
||||
(:workspace-modifiers state)
|
||||
object-modifiers (:workspace-modifiers state)
|
||||
|
||||
build-move-event
|
||||
(fn [comment-thread]
|
||||
(let [frame (get objects (:frame-id comment-thread))
|
||||
modifiers (get-in object-modifiers [(:frame-id comment-thread) :modifiers])
|
||||
frame' (gsh/transform-shape frame modifiers)
|
||||
(let [frame-id (:frame-id comment-thread)
|
||||
frame (get objects frame-id)
|
||||
modifiers (get-in object-modifiers [frame-id :modifiers])
|
||||
transform (get transforms frame-id)
|
||||
|
||||
frame'
|
||||
(cond-> frame
|
||||
(some? modifiers)
|
||||
(gsh/transform-shape modifiers)
|
||||
|
||||
(some? transform)
|
||||
(gsh/apply-transform transform))
|
||||
|
||||
moved (gpt/to-vec (gpt/point (:x frame) (:y frame))
|
||||
(gpt/point (:x frame') (:y frame')))
|
||||
position (get-in threads-position-map [(:id comment-thread) :position])
|
||||
|
@ -171,6 +181,13 @@
|
|||
(map build-move-event)
|
||||
(rx/from))))))
|
||||
|
||||
(defmethod ptk/resolve ::move-frame-comment-threads
|
||||
[_ ids-or-transforms]
|
||||
(when (d/not-empty? ids-or-transforms)
|
||||
(move-frame-comment-threads
|
||||
(if (map? ids-or-transforms) (keys ids-or-transforms) ids-or-transforms)
|
||||
(when (map? ids-or-transforms) ids-or-transforms))))
|
||||
|
||||
(defn overlap-bubbles?
|
||||
"Detect if two bubbles overlap"
|
||||
[zoom thread-1 thread-2]
|
||||
|
|
|
@ -87,7 +87,7 @@
|
|||
(watch [_ state _]
|
||||
(let [ids (:ids args)
|
||||
object-modifiers (:modifiers args)
|
||||
|
||||
object-transforms (:transforms args)
|
||||
objects (dsh/lookup-page-objects state)
|
||||
|
||||
is-frame? (fn [id] (= :frame (get-in objects [id :type])))
|
||||
|
@ -95,8 +95,18 @@
|
|||
|
||||
build-move-event
|
||||
(fn [guide]
|
||||
(let [frame (get objects (:frame-id guide))
|
||||
frame' (gsh/transform-shape frame (get-in object-modifiers [(:frame-id guide) :modifiers]))
|
||||
(let [frame-id (:frame-id guide)
|
||||
frame (get objects frame-id)
|
||||
modifier (get-in object-modifiers [frame-id :modifiers])
|
||||
transform (get object-transforms frame-id)
|
||||
|
||||
frame'
|
||||
(cond-> frame
|
||||
(some? modifier)
|
||||
(gsh/transform-shape modifier)
|
||||
|
||||
(some? transform)
|
||||
(gsh/apply-transform transform))
|
||||
|
||||
moved (gpt/to-vec (gpt/point (:x frame) (:y frame))
|
||||
(gpt/point (:x frame') (:y frame')))
|
||||
|
|
|
@ -36,6 +36,9 @@
|
|||
[beicon.v2.core :as rx]
|
||||
[potok.v2.core :as ptk]))
|
||||
|
||||
(def ^:private xf:without-uuid-zero
|
||||
(remove #(= % uuid/zero)))
|
||||
|
||||
;; -- temporary modifiers -------------------------------------------
|
||||
|
||||
;; During an interactive transformation of shapes (e.g. when resizing or rotating
|
||||
|
@ -594,8 +597,8 @@
|
|||
(ptk/reify ::apply-wasm-modifiesr
|
||||
ptk/WatchEvent
|
||||
(watch [_ state _]
|
||||
(let [geometry-entries
|
||||
(parse-geometry-modifiers modif-tree)
|
||||
(let [objects (dsh/lookup-page-objects state)
|
||||
geometry-entries (parse-geometry-modifiers modif-tree)
|
||||
|
||||
snap-pixel?
|
||||
(and (not ignore-snap-pixel) (contains? (:workspace-layout state) :snap-pixel-grid))
|
||||
|
@ -610,7 +613,7 @@
|
|||
(propagate-structure-modifiers modif-tree (dsh/lookup-page-objects state))
|
||||
|
||||
ids
|
||||
(into (set (keys modif-tree)) (keys transforms))
|
||||
(into [] xf:without-uuid-zero (keys transforms))
|
||||
|
||||
update-shape
|
||||
(fn [shape]
|
||||
|
@ -622,6 +625,8 @@
|
|||
(ctm/apply-structure-modifiers modifiers))))]
|
||||
(rx/of
|
||||
(clear-local-transform)
|
||||
(ptk/event ::dwg/move-frame-guides {:ids ids :transforms transforms})
|
||||
(ptk/event ::dwcm/move-frame-comment-threads transforms)
|
||||
(dwsh/update-shapes ids update-shape))))))
|
||||
|
||||
(def ^:private
|
||||
|
@ -709,9 +714,6 @@
|
|||
|
||||
(assoc state :workspace-modifiers modif-tree)))))
|
||||
|
||||
(def ^:private xf:without-uuid-zero
|
||||
(remove #(= % uuid/zero)))
|
||||
|
||||
(def ^:private transform-attrs
|
||||
#{:selrect
|
||||
:points
|
||||
|
|
|
@ -272,8 +272,8 @@
|
|||
(mf/defc guide*
|
||||
{::mf/wrap [mf/memo]
|
||||
::mf/props :obj}
|
||||
[{:keys [guide is-hover on-guide-change get-hover-frame vbox zoom hover-frame disabled-guides frame-modifier]}]
|
||||
|
||||
[{:keys [guide is-hover on-guide-change get-hover-frame vbox zoom
|
||||
hover-frame disabled-guides frame-modifier frame-transform]}]
|
||||
(let [axis (:axis guide)
|
||||
|
||||
handle-change-position
|
||||
|
@ -293,7 +293,14 @@
|
|||
frame]} (use-guide handle-change-position get-hover-frame zoom guide)
|
||||
|
||||
base-frame (or frame hover-frame)
|
||||
frame (gsh/transform-shape base-frame frame-modifier)
|
||||
|
||||
frame
|
||||
(cond-> base-frame
|
||||
(some? frame-modifier)
|
||||
(gsh/transform-shape frame-modifier)
|
||||
|
||||
(some? frame-transform)
|
||||
(gsh/apply-transform frame-transform))
|
||||
|
||||
move-vec (gpt/to-vec (gpt/point (:x base-frame) (:y base-frame))
|
||||
(gpt/point (:x frame) (:y frame)))
|
||||
|
@ -472,7 +479,11 @@
|
|||
(fn [guide]
|
||||
(if (guide-inside-vbox? zoom vbox guide)
|
||||
(st/emit! (dw/update-guides guide))
|
||||
(st/emit! (dw/remove-guide guide)))))]
|
||||
(st/emit! (dw/remove-guide guide)))))
|
||||
|
||||
frame-modifiers
|
||||
(-> (group-by :id modifiers)
|
||||
(update-vals (comp :transform first)))]
|
||||
|
||||
(mf/with-effect [hover-frame]
|
||||
(mf/set-ref-val! hover-frame-ref hover-frame))
|
||||
|
@ -490,15 +501,15 @@
|
|||
:get-hover-frame get-hover-frame
|
||||
:disabled-guides disabled-guides}]
|
||||
|
||||
(for [current guides]
|
||||
(when (or (nil? (:frame-id current))
|
||||
(for [{:keys [id frame-id] :as guide} guides]
|
||||
(when (or (nil? frame-id)
|
||||
(empty? focus)
|
||||
(contains? focus (:frame-id current)))
|
||||
[:> guide* {:key (dm/str "guide-" (:id current))
|
||||
:guide current
|
||||
(contains? focus frame-id))
|
||||
[:> guide* {:key (dm/str "guide-" id)
|
||||
:guide guide
|
||||
:vbox vbox
|
||||
:zoom zoom
|
||||
:frame-modifier (dm/get-in modifiers [(:frame-id current) :modifiers])
|
||||
:frame-transform (get frame-modifiers frame-id)
|
||||
:get-hover-frame get-hover-frame
|
||||
:on-guide-change on-guide-change
|
||||
:disabled-guides disabled-guides}]))]))
|
||||
|
|
|
@ -95,9 +95,9 @@
|
|||
read-only? (mf/use-ctx ctx/workspace-read-only?)
|
||||
|
||||
;; DEREFS
|
||||
|
||||
drawing (mf/deref refs/workspace-drawing)
|
||||
focus (mf/deref refs/workspace-focus-selected)
|
||||
wasm-modifiers (mf/deref workspace-wasm-modifiers)
|
||||
|
||||
workspace-editor-state (mf/deref refs/workspace-editor-state)
|
||||
|
||||
|
@ -105,11 +105,10 @@
|
|||
objects (get page :objects)
|
||||
page-id (get page :id)
|
||||
background (get page :background clr/canvas)
|
||||
guides (get page :guides)
|
||||
|
||||
base-objects (ui-hooks/with-focus-objects objects focus)
|
||||
|
||||
wasm-modifiers (mf/deref workspace-wasm-modifiers)
|
||||
|
||||
objects-modified
|
||||
(mf/with-memo
|
||||
[base-objects wasm-modifiers]
|
||||
|
@ -575,9 +574,10 @@
|
|||
[:> guides/viewport-guides*
|
||||
{:zoom zoom
|
||||
:vbox vbox
|
||||
:guides (:guides page)
|
||||
:guides guides
|
||||
:hover-frame guide-frame
|
||||
:disabled-guides disabled-guides?}])
|
||||
:disabled-guides disabled-guides?
|
||||
:modifiers wasm-modifiers}])
|
||||
|
||||
;; DEBUG LAYOUT DROP-ZONES
|
||||
(when (dbg/enabled? :layout-drop-zones)
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue