diff --git a/CHANGES.md b/CHANGES.md index d4e659d92..a8b70d097 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -23,6 +23,8 @@ - Fix expand libraries when search results are present [Taiga #7876](https://tree.taiga.io/project/penpot/issue/7876) - Fix color palette default library [Taiga #8029](https://tree.taiga.io/project/penpot/issue/8029) - Component Library is lost after exporting/importing in .zip format [Github #4672](https://github.com/penpot/penpot/issues/4672) +- Fix problem with moving+selection not working properly [Taiga #7943](https://tree.taiga.io/project/penpot/issue/7943) +- Fix problem with flex layout fit to content not positioning correctly children [Taiga #7537](https://tree.taiga.io/project/penpot/issue/7537) ## 2.0.3 diff --git a/common/src/app/common/geom/modifiers.cljc b/common/src/app/common/geom/modifiers.cljc index 813fd784a..ec4646f66 100644 --- a/common/src/app/common/geom/modifiers.cljc +++ b/common/src/app/common/geom/modifiers.cljc @@ -269,6 +269,13 @@ (keep (mk-check-auto-layout objects)) shapes))) +(defn full-tree? + "Checks if we need to calculate the full tree or we can calculate just a partial tree. Partial + trees are more efficient but cannot be done when the layout is centered." + [objects layout-id] + (let [layout-justify-content (get-in objects [layout-id :layout-justify-content])] + (contains? #{:center :end :space-around :space-evenly :stretch} layout-justify-content))) + (defn sizing-auto-modifiers "Recalculates the layouts to adjust the sizing: auto new sizes" [modif-tree sizing-auto-layouts objects bounds ignore-constraints] @@ -286,7 +293,7 @@ (d/seek sizing-auto-layouts)) shapes - (if from-layout + (if (and from-layout (not (full-tree? objects from-layout))) (cgst/resolve-subtree from-layout layout-id objects) (cgst/resolve-tree #{layout-id} objects)) diff --git a/frontend/src/app/main/data/workspace/transforms.cljs b/frontend/src/app/main/data/workspace/transforms.cljs index 7fe33314d..abb7a7c83 100644 --- a/frontend/src/app/main/data/workspace/transforms.cljs +++ b/frontend/src/app/main/data/workspace/transforms.cljs @@ -431,7 +431,7 @@ (watch [_ state stream] (let [initial (deref ms/mouse-position) - stopper (mse/drag-stopper stream) + stopper (mse/drag-stopper stream {:interrupt? false}) zoom (get-in state [:workspace-local :zoom] 1) ;; We toggle the selection so we don't have to wait for the event diff --git a/frontend/src/app/util/mouse.cljs b/frontend/src/app/util/mouse.cljs index 4576ed325..8f3e7652a 100644 --- a/frontend/src/app/util/mouse.cljs +++ b/frontend/src/app/util/mouse.cljs @@ -72,12 +72,20 @@ (defn drag-stopper "Creates a stream to stop drag events. Takes into account the mouse and also if the window loses focus or the esc key is pressed." - [stream] - (rx/merge - (->> stream - (rx/filter blur-event?)) - (->> stream - (rx/filter mouse-event?) - (rx/filter mouse-up-event?)) - (->> stream - (rx/filter #(= % :interrupt))))) + ([stream] + (drag-stopper stream nil)) + ([stream {:keys [blur? up-mouse? interrupt?] :or {blur? true up-mouse? true interrupt? true}}] + (rx/merge + (if blur? + (->> stream + (rx/filter blur-event?)) + (rx/empty)) + (if up-mouse? + (->> stream + (rx/filter mouse-event?) + (rx/filter mouse-up-event?)) + (rx/empty)) + (if interrupt? + (->> stream + (rx/filter #(= % :interrupt))) + (rx/empty)))))