mirror of
https://github.com/penpot/penpot.git
synced 2025-06-07 14:01:37 +02:00
♻️ Refactor path editor component: path-snap
This commit is contained in:
parent
93a601a1e7
commit
93199e1a70
1 changed files with 27 additions and 20 deletions
|
@ -219,10 +219,18 @@
|
||||||
:is-preview true
|
:is-preview true
|
||||||
:zoom zoom}]]))
|
:zoom zoom}]]))
|
||||||
|
|
||||||
(mf/defc path-snap [{:keys [selected points zoom]}]
|
(mf/defc path-snap*
|
||||||
(let [ranges (mf/use-memo (mf/deps selected points) #(snap/create-ranges points selected))
|
{::mf/private true}
|
||||||
snap-matches (snap/get-snap-delta-match selected ranges (/ 1 zoom))
|
[{:keys [selected points zoom]}]
|
||||||
matches (concat (second (:x snap-matches)) (second (:y snap-matches)))]
|
(let [ranges
|
||||||
|
(mf/with-memo [selected points]
|
||||||
|
(snap/create-ranges points selected))
|
||||||
|
|
||||||
|
snap-matches
|
||||||
|
(snap/get-snap-delta-match selected ranges (/ 1 zoom))
|
||||||
|
|
||||||
|
matches
|
||||||
|
(concat (second (:x snap-matches)) (second (:y snap-matches)))]
|
||||||
|
|
||||||
[:g.snap-paths
|
[:g.snap-paths
|
||||||
(for [[idx [from to]] (d/enumerate matches)]
|
(for [[idx [from to]] (d/enumerate matches)]
|
||||||
|
@ -234,7 +242,7 @@
|
||||||
:style {:stroke pc/secondary-color
|
:style {:stroke pc/secondary-color
|
||||||
:stroke-width (/ path-snap-stroke-width zoom)}}])]))
|
:stroke-width (/ path-snap-stroke-width zoom)}}])]))
|
||||||
|
|
||||||
(defn matching-handler? [content node handlers]
|
(defn- matching-handler? [content node handlers]
|
||||||
(when (= 2 (count handlers))
|
(when (= 2 (count handlers))
|
||||||
(let [[[i1 p1] [i2 p2]] handlers
|
(let [[[i1 p1] [i2 p2]] handlers
|
||||||
p1 (path.segment/handler->point content i1 p1)
|
p1 (path.segment/handler->point content i1 p1)
|
||||||
|
@ -294,17 +302,8 @@
|
||||||
|
|
||||||
is-path-start (not (some? last-point))
|
is-path-start (not (some? last-point))
|
||||||
|
|
||||||
[snap-selected snap-points]
|
|
||||||
(cond
|
|
||||||
(some? drag-handler) [#{drag-handler} points]
|
|
||||||
(some? preview) [#{(path.segment/get-point preview)} points]
|
|
||||||
(some? moving-handler) [#{moving-handler} points]
|
|
||||||
:else
|
|
||||||
[(->> selected-points (map base->point) (into #{}))
|
|
||||||
(->> points (remove selected-points) (into #{}))])
|
|
||||||
|
|
||||||
show-snap?
|
show-snap?
|
||||||
(and snap-toggled
|
(and ^boolean snap-toggled
|
||||||
(or (some? drag-handler)
|
(or (some? drag-handler)
|
||||||
(some? preview)
|
(some? preview)
|
||||||
(some? moving-handler)
|
(some? moving-handler)
|
||||||
|
@ -404,9 +403,17 @@
|
||||||
:handler prev-handler
|
:handler prev-handler
|
||||||
:zoom zoom}]])
|
:zoom zoom}]])
|
||||||
|
|
||||||
(when show-snap?
|
(when ^boolean show-snap?
|
||||||
[:g.path-snap {:pointer-events "none"}
|
(let [[snap-selected snap-points]
|
||||||
[:& path-snap {:selected snap-selected
|
(cond
|
||||||
:points snap-points
|
(some? drag-handler) [#{drag-handler} points]
|
||||||
:zoom zoom}]])]))
|
(some? preview) [#{(path.segment/get-point preview)} points]
|
||||||
|
(some? moving-handler) [#{moving-handler} points]
|
||||||
|
:else
|
||||||
|
[(->> selected-points (map base->point) (into #{}))
|
||||||
|
(->> points (remove selected-points) (into #{}))])]
|
||||||
|
[:g.path-snap {:pointer-events "none"}
|
||||||
|
[:> path-snap* {:selected snap-selected
|
||||||
|
:points snap-points
|
||||||
|
:zoom zoom}]]))]))
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue