From 1fdf09a692f2b52126d8692cc3646b99548421a4 Mon Sep 17 00:00:00 2001 From: "alonso.torres" Date: Mon, 9 Jan 2023 11:06:09 +0100 Subject: [PATCH] :bug: Fix problem with snap-pixel for very big shapes --- .../common/geom/shapes/pixel_precision.cljc | 3 +- common/src/app/common/types/modifiers.cljc | 28 +++++++++++-------- 2 files changed, 18 insertions(+), 13 deletions(-) diff --git a/common/src/app/common/geom/shapes/pixel_precision.cljc b/common/src/app/common/geom/shapes/pixel_precision.cljc index 211c26fd0b..c1236046ff 100644 --- a/common/src/app/common/geom/shapes/pixel_precision.cljc +++ b/common/src/app/common/geom/shapes/pixel_precision.cljc @@ -35,9 +35,8 @@ ratio-width (/ target-width curr-width) ratio-height (/ target-height curr-height) scalev (gpt/point ratio-width ratio-height)] - (-> modifiers - (ctm/resize scalev origin transform transform-inverse)))) + (ctm/resize scalev origin transform transform-inverse {:precise? true})))) (defn position-pixel-precision [modifiers _ points] diff --git a/common/src/app/common/types/modifiers.cljc b/common/src/app/common/types/modifiers.cljc index 72daab891a..5d2764bb79 100644 --- a/common/src/app/common/types/modifiers.cljc +++ b/common/src/app/common/types/modifiers.cljc @@ -177,17 +177,19 @@ (defn- maybe-add-resize "Check the last operation to check if we can stack it over the last one" - [operations op] + ([operations op] + (maybe-add-resize operations op nil)) - (if (c/empty? operations) - [op] - (let [head (peek operations)] - (if (mergeable-resize? head op) - (let [item (merge-resize head op)] - (cond-> (pop operations) - (resize-vec? (dm/get-prop item :vector)) - (conj item))) - (conj operations op))))) + ([operations op {:keys [precise?]}] + (if (c/empty? operations) + [op] + (let [head (peek operations)] + (if (mergeable-resize? head op) + (let [item (merge-resize head op)] + (cond-> (pop operations) + (or precise? (resize-vec? (dm/get-prop item :vector))) + (conj item))) + (conj operations op)))))) (defn valid-vector? [vector] @@ -259,12 +261,16 @@ (update :geometry-child maybe-add-resize (resize-op order vector origin))))) ([modifiers vector origin transform transform-inverse] + (resize modifiers vector origin transform transform-inverse nil)) + + ;; `precise?` works so we don't remove almost empty resizes. This will be used in the pixel-precision + ([modifiers vector origin transform transform-inverse {:keys [precise?]}] (assert (valid-vector? vector) (dm/str "Invalid move vector: " (:x vector) "," (:y vector))) (let [modifiers (or modifiers (empty)) order (inc (dm/get-prop modifiers :last-order)) modifiers (assoc modifiers :last-order order)] (cond-> modifiers - (resize-vec? vector) + (or precise? (resize-vec? vector)) (update :geometry-child maybe-add-resize (resize-op order vector origin transform transform-inverse)))))) (defn rotation