diff --git a/common/src/app/common/geom/align.cljc b/common/src/app/common/geom/align.cljc index 92cdd28a9..e7b8bcc51 100644 --- a/common/src/app/common/geom/align.cljc +++ b/common/src/app/common/geom/align.cljc @@ -8,7 +8,8 @@ (:require [app.common.geom.point :as gpt] [app.common.geom.rect :as grc] - [app.common.geom.shapes :as gsh])) + [app.common.geom.shapes :as gsh] + [app.common.geom.shapes.points :as gpo])) ;; --- Alignment @@ -30,6 +31,23 @@ (- (:y align-pos) (:y wrapper-rect)))] (gsh/move shape delta))) +(defn align-to-parent + "Does the same calc as align-to-rect but relative to a parent shape." + [shape parent axis] + (let [parent-bounds (:points parent) + wrapper-rect + (-> (gsh/transform-points (:points shape) (gsh/shape->center parent) (:transform-inverse parent)) + (grc/points->rect)) + + align-pos (calc-align-pos wrapper-rect (:selrect parent) axis) + + xv #(gpo/start-hv parent-bounds %) + yv #(gpo/start-vv parent-bounds %) + + delta (-> (xv (- (:x align-pos) (:x wrapper-rect))) + (gpt/add (yv (- (:y align-pos) (:y wrapper-rect)))))] + (gsh/move shape delta))) + (defn calc-align-pos [wrapper-rect rect axis] (case axis diff --git a/frontend/src/app/main/data/workspace.cljs b/frontend/src/app/main/data/workspace.cljs index 3b464cb82..190a48c15 100644 --- a/frontend/src/app/main/data/workspace.cljs +++ b/frontend/src/app/main/data/workspace.cljs @@ -1080,7 +1080,7 @@ (let [object (get objects object-id) parent-id (:parent-id (get objects object-id)) parent (get objects parent-id)] - [(gal/align-to-rect object parent axis)])) + [(gal/align-to-parent object parent axis)])) (defn align-objects-list [objects selected axis]