0
Fork 0
mirror of https://github.com/penpot/penpot.git synced 2025-03-12 15:51:37 -05:00

🐛 Fixes problem with snaps

This commit is contained in:
alonso.torres 2021-03-24 11:37:01 +01:00
parent 7ac78cb103
commit a399363b08
3 changed files with 21 additions and 10 deletions

View file

@ -9,16 +9,17 @@
(ns app.main.snap (ns app.main.snap
(:require (:require
[clojure.set :as set]
[beicon.core :as rx]
[app.common.uuid :refer [zero]]
[app.common.math :as mth]
[app.common.data :as d] [app.common.data :as d]
[app.common.geom.point :as gpt] [app.common.geom.point :as gpt]
[app.common.geom.shapes :as gsh] [app.common.geom.shapes :as gsh]
[app.main.worker :as uw] [app.common.math :as mth]
[app.common.pages :as cp]
[app.common.uuid :refer [zero]]
[app.main.refs :as refs] [app.main.refs :as refs]
[app.util.geom.snap-points :as sp])) [app.main.worker :as uw]
[app.util.geom.snap-points :as sp]
[beicon.core :as rx]
[clojure.set :as set]))
(defonce ^:private snap-accuracy 5) (defonce ^:private snap-accuracy 5)
(defonce ^:private snap-distance-accuracy 10) (defonce ^:private snap-distance-accuracy 10)
@ -186,6 +187,7 @@
:frame-id (->> shapes first :frame-id) :frame-id (->> shapes first :frame-id)
:include-frames? true :include-frames? true
:rect area-selrect}) :rect area-selrect})
(rx/map #(cp/clean-loops objects %))
(rx/map #(set/difference % (into #{} (map :id shapes)))) (rx/map #(set/difference % (into #{} (map :id shapes))))
(rx/map (fn [ids] (map #(get objects %) ids))))) (rx/map (fn [ids] (map #(get objects %) ids)))))

View file

@ -101,8 +101,13 @@
:rect rect :rect rect
:include-frames? true})))) :include-frames? true}))))
;; We use ref so we don't recreate the stream on a change
transform-ref (mf/use-ref nil)
over-shapes-stream over-shapes-stream
(->> move-stream (->> move-stream
;; When transforming shapes we stop querying the worker
(rx/filter #(not (some? (mf/ref-val transform-ref))))
(rx/switch-map query-point)) (rx/switch-map query-point))
roots (mf/use-memo roots (mf/use-memo
@ -111,9 +116,13 @@
(let [roots-ids (cp/clean-loops objects selected)] (let [roots-ids (cp/clean-loops objects selected)]
(->> roots-ids (mapv #(get objects %))))))] (->> roots-ids (mapv #(get objects %))))))]
(mf/use-effect
(mf/deps transform)
#(mf/set-ref-val! transform-ref transform))
(hooks/use-stream (hooks/use-stream
over-shapes-stream over-shapes-stream
(mf/deps page-id objects transform selected @ctrl?) (mf/deps page-id objects selected @ctrl?)
(fn [ids] (fn [ids]
(let [remove-id? (into #{} (mapcat #(cp/get-parents % objects)) selected) (let [remove-id? (into #{} (mapcat #(cp/get-parents % objects)) selected)
remove-id? (if @ctrl? remove-id? (if @ctrl?
@ -122,9 +131,8 @@
(filterv #(= :group (get-in objects [% :type]))))) (filterv #(= :group (get-in objects [% :type])))))
remove-id?) remove-id?)
ids (->> ids (filterv (comp not remove-id?)))] ids (->> ids (filterv (comp not remove-id?)))]
(when (not transform)
(reset! hover (get objects (first ids))) (reset! hover (get objects (first ids)))
(reset! hover-ids ids))))))) (reset! hover-ids ids))))))
(defn setup-viewport-modifiers [modifiers selected objects render-ref] (defn setup-viewport-modifiers [modifiers selected objects render-ref]
(let [roots (mf/use-memo (let [roots (mf/use-memo

View file

@ -232,6 +232,7 @@
:frame-id (:id frame) :frame-id (:id frame)
:include-frames? true :include-frames? true
:rect rect}) :rect rect})
(rx/map #(cp/clean-loops @refs/workspace-page-objects %))
(rx/map #(set/difference % selected)) (rx/map #(set/difference % selected))
(rx/map #(->> % (map (partial get @refs/workspace-page-objects))))) (rx/map #(->> % (map (partial get @refs/workspace-page-objects)))))
(rx/of nil))))] (rx/of nil))))]