0
Fork 0
mirror of https://github.com/penpot/penpot.git synced 2025-03-18 10:41:29 -05:00

Merge pull request #2258 from penpot/alotor-hotfixes

Alotor hotfixes
This commit is contained in:
Alejandro 2022-09-20 07:37:36 +02:00 committed by GitHub
commit 69c2d95768
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
14 changed files with 55 additions and 26 deletions

View file

@ -8,6 +8,9 @@
- Fix toggle overlay position [Taiga #4091](https://tree.taiga.io/project/penpot/issue/4091)
- Fix overlay closed on clicked outside [Taiga #4027](https://tree.taiga.io/project/penpot/issue/4027)
- Fix animate multiple overlays [Taiga #3993](https://tree.taiga.io/project/penpot/issue/3993)
- Fix problem with snap to grids [#2221](https://github.com/penpot/penpot/issues/2221)
- Fix issue when scaling to value 0 [#2252](https://github.com/penpot/penpot/issues/2252)
- Fix problem when moving shapes inside nested frames [Taiga #4113](https://tree.taiga.io/project/penpot/issue/4113)
## 1.15.3-beta

View file

@ -317,9 +317,14 @@
(unit)
(scale value))))
(defn no-zeros
"Remove zero values from either coordinate"
[point]
(-> point
(update :x #(if (mth/almost-zero? %) 0.001 %))
(update :y #(if (mth/almost-zero? %) 0.001 %))))
;; --- Debug
(defmethod pp/simple-dispatch Point [obj] (pr obj))

View file

@ -287,6 +287,26 @@
(d/seek #(and position (gsh/has-point? (get objects %) position))))]
(or top-frame uuid/zero)))
(defn all-frames-by-position
[objects position]
(->> (get-frames-ids objects)
(sort-z-index objects)
(filterv #(and position (gsh/has-point? (get objects %) position)))))
(defn top-nested-frame
"Search for the top nested frame for positioning shapes when moving or creating.
Looks for all the frames in a position and then goes in depth between the top-most and its
children to find the target."
[objects position]
(let [frame-ids (all-frames-by-position objects position)
frame-set (set frame-ids)]
(loop [current-id (first frame-ids)]
(let [current-shape (get objects current-id)
child-frame-id (d/seek #(contains? frame-set %) (-> (:shapes current-shape) reverse))]
(if (nil? child-frame-id)
(or current-id uuid/zero)
(recur child-frame-id))))))
(defn frame-by-position
[objects position]
(let [frame-id (frame-id-by-position objects position)]

View file

@ -16,7 +16,7 @@
.text-editor {
.DraftEditor-root {
height: auto;
height: 100%;
display: flex;
flex-direction: column;
}

View file

@ -1344,7 +1344,7 @@
[frame-id frame-id delta])
(empty? page-selected)
(let [frame-id (cph/frame-id-by-position page-objects mouse-pos)
(let [frame-id (cph/top-nested-frame page-objects mouse-pos)
delta (gpt/subtract mouse-pos orig-pos)]
[frame-id frame-id delta])
@ -1456,7 +1456,7 @@
height 16
page-id (:current-page-id state)
frame-id (-> (wsh/lookup-page-objects state page-id)
(cph/frame-id-by-position @ms/mouse-position))
(cph/top-nested-frame @ms/mouse-position))
shape (cp/setup-rect-selrect
{:id id
:type :text

View file

@ -65,7 +65,7 @@
focus (:workspace-focus-selected state)
zoom (get-in state [:workspace-local :zoom] 1)
fid (cph/frame-id-by-position objects initial)
fid (cph/top-nested-frame objects initial)
shape (get-in state [:workspace-drawing :object])
shape (-> shape

View file

@ -47,7 +47,7 @@
(let [objects (wsh/lookup-page-objects state)
content (get-in state [:workspace-drawing :object :content] [])
position (get-in content [0 :params] nil)
frame-id (cph/frame-id-by-position objects position)]
frame-id (cph/top-nested-frame objects position)]
(-> state
(assoc-in [:workspace-drawing :object :frame-id] frame-id))))))

View file

@ -146,7 +146,7 @@
objects (:objects page)
unames (volatile! (un/retrieve-used-names objects))
frame-id (cph/frame-id-by-position objects (gpt/add orig-pos delta))
frame-id (cph/top-nested-frame objects (gpt/add orig-pos delta))
update-new-shape
(fn [new-shape original-shape]

View file

@ -258,7 +258,7 @@
(let [objects (wsh/lookup-page-objects state)
content (get-in state [:workspace-drawing :object :content] [])
position (get-in content [0 :params] nil)
frame-id (cph/frame-id-by-position objects position)]
frame-id (cph/top-nested-frame objects position)]
(-> state
(assoc-in [:workspace-drawing :object :frame-id] frame-id))))))

View file

@ -35,7 +35,7 @@
;; Calculate the frame over which we're drawing
(let [position @ms/mouse-position
frame-id (:frame-id attrs (cph/frame-id-by-position objects position))
frame-id (:frame-id attrs (cph/top-nested-frame objects position))
shape (when-not (empty? selected)
(cph/get-base-shape objects selected))]
@ -252,7 +252,6 @@
(ptk/reify ::create-and-add-shape
ptk/WatchEvent
(watch [_ state _]
(prn ">>>create-")
(let [{:keys [width height]} data
[vbc-x vbc-y] (viewport-center state)
@ -260,7 +259,7 @@
y (:y data (- vbc-y (/ height 2)))
page-id (:current-page-id state)
frame-id (-> (wsh/lookup-page-objects state page-id)
(cph/frame-id-by-position {:x frame-x :y frame-y}))
(cph/top-nested-frame {:x frame-x :y frame-y}))
shape (-> (cp/make-minimal-shape type)
(merge data)
(merge {:x x :y y})

View file

@ -437,7 +437,7 @@
(try
(let [page-id (:current-page-id state)
objects (wsh/lookup-page-objects state page-id)
frame-id (cph/frame-id-by-position objects position)
frame-id (cph/top-nested-frame objects position)
selected (wsh/lookup-selected state)
[vb-x vb-y vb-width vb-height] (svg-dimensions svg-data)

View file

@ -463,7 +463,8 @@
(gpt/multiply handler-mult))
;; Resize vector
scalev (gpt/divide (gpt/add shapev deltav) shapev)
scalev (-> (gpt/divide (gpt/add shapev deltav) shapev)
(gpt/no-zeros))
scalev (if lock?
(let [v (cond
@ -863,7 +864,7 @@
(let [position @ms/mouse-position
page-id (:current-page-id state)
objects (wsh/lookup-page-objects state page-id)
frame-id (cph/frame-id-by-position objects position)
frame-id (cph/top-nested-frame objects position)
moving-shapes
(->> ids
@ -877,15 +878,17 @@
changes (-> (pcb/empty-changes it page-id)
(pcb/with-objects objects)
(pcb/update-shapes moving-frames (fn [shape]
;; Hide in viwer must be enabled just when a board is moved inside another artboard an nested to it, we have to avoid situations like:
;; - Moving inside the same frame
;; - Moving outside the frame
(cond-> shape
(and (not= frame-id (:id shape))
(not= frame-id (:frame-id shape))
(not= frame-id uuid/zero))
(assoc :hide-in-viewer true))))
(pcb/update-shapes
moving-frames
(fn [shape]
;; Hide in viwer must be enabled just when a board is moved inside another artboard an nested to it, we have to avoid situations like:
;; - Moving inside the same frame
;; - Moving outside the frame
(cond-> shape
(and (not= frame-id (:id shape))
(not= frame-id (:frame-id shape))
(not= frame-id uuid/zero))
(assoc :hide-in-viewer true))))
(pcb/change-parent frame-id moving-shapes))]
(when-not (empty? changes)

View file

@ -21,8 +21,7 @@
:width width
:fontFamily "sourcesanspro"
:display "flex"
:whiteSpace "break-spaces"
:flex-wrap "wrap"}]
:whiteSpace "break-spaces"}]
(cond-> base
(= valign "top") (obj/set! "alignItems" "flex-start")
(= valign "center") (obj/set! "alignItems" "center")

View file

@ -55,7 +55,7 @@
(defn get-grids-snap-points
[frame coord]
(if (not (cph/rotated-frame? frame))
(if (cph/rotated-frame? frame)
[]
(let [grid->snap (fn [[grid-type position]]
{:type :layout