Merge pull request #2777 from penpot/alotor-polishing-4

Polishing
This commit is contained in:
Eva Marco 2023-01-13 14:58:38 +01:00 committed by GitHub
commit ab5fd68689
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
7 changed files with 69 additions and 47 deletions

View file

@ -146,10 +146,13 @@
((if (= :x axis) center-horizontal-vector center-vertical-vector) child-points parent-points)) ((if (= :x axis) center-horizontal-vector center-vertical-vector) child-points parent-points))
(defn displacement (defn displacement
[before-v after-v] [before-v after-v before-parent-side-v after-parent-side-v]
(let [angl (gpt/angle-with-other before-v after-v)
sign (if (mth/close? angl 180) -1 1) (let [before-angl (gpt/angle-with-other before-v before-parent-side-v)
after-angl (gpt/angle-with-other after-v after-parent-side-v)
sign (if (mth/close? before-angl after-angl) 1 -1)
length (* sign (gpt/length before-v))] length (* sign (gpt/length before-v))]
(if (mth/almost-zero? length) (if (mth/almost-zero? length)
after-v after-v
(gpt/subtract after-v (gpt/scale (gpt/unit after-v) length))))) (gpt/subtract after-v (gpt/scale (gpt/unit after-v) length)))))
@ -173,14 +176,18 @@
(defmethod constraint-modifier :start (defmethod constraint-modifier :start
[_ axis child-points-before parent-points-before child-points-after parent-points-after] [_ axis child-points-before parent-points-before child-points-after parent-points-after]
(let [start-before (start-vector axis child-points-before parent-points-before) (let [start-before (start-vector axis child-points-before parent-points-before)
start-after (start-vector axis child-points-after parent-points-after)] start-after (start-vector axis child-points-after parent-points-after)
(ctm/move-modifiers (displacement start-before start-after)))) before-side-vector (side-vector axis parent-points-before)
after-side-vector (side-vector axis parent-points-after)]
(ctm/move-modifiers (displacement start-before start-after before-side-vector after-side-vector))))
(defmethod constraint-modifier :end (defmethod constraint-modifier :end
[_ axis child-points-before parent-points-before child-points-after parent-points-after] [_ axis child-points-before parent-points-before child-points-after parent-points-after]
(let [end-before (end-vector axis child-points-before parent-points-before) (let [end-before (end-vector axis child-points-before parent-points-before)
end-after (end-vector axis child-points-after parent-points-after)] end-after (end-vector axis child-points-after parent-points-after)
(ctm/move-modifiers (displacement end-before end-after)))) before-side-vector (side-vector axis parent-points-before)
after-side-vector (side-vector axis parent-points-after)]
(ctm/move-modifiers (displacement end-before end-after before-side-vector after-side-vector))))
(defmethod constraint-modifier :fixed (defmethod constraint-modifier :fixed
[_ axis child-points-before parent-points-before child-points-after parent-points-after] [_ axis child-points-before parent-points-before child-points-after parent-points-after]
@ -190,8 +197,11 @@
start-before (start-vector axis child-points-before parent-points-before) start-before (start-vector axis child-points-before parent-points-before)
start-after (start-vector axis child-points-after parent-points-after) start-after (start-vector axis child-points-after parent-points-after)
disp-end (displacement end-before end-after) before-side-vector (side-vector axis parent-points-before)
disp-start (displacement start-before start-after) after-side-vector (side-vector axis parent-points-after)
disp-end (displacement end-before end-after before-side-vector after-side-vector)
disp-start (displacement start-before start-after before-side-vector after-side-vector)
;; We get the current axis side and grow it on both side by the end+start displacements ;; We get the current axis side and grow it on both side by the end+start displacements
before-vec (side-vector axis child-points-after) before-vec (side-vector axis child-points-after)
@ -214,8 +224,10 @@
(defmethod constraint-modifier :center (defmethod constraint-modifier :center
[_ axis child-points-before parent-points-before child-points-after parent-points-after] [_ axis child-points-before parent-points-before child-points-after parent-points-after]
(let [center-before (center-vector axis child-points-before parent-points-before) (let [center-before (center-vector axis child-points-before parent-points-before)
center-after (center-vector axis child-points-after parent-points-after)] center-after (center-vector axis child-points-after parent-points-after)
(ctm/move-modifiers (displacement center-before center-after)))) before-side-vector (side-vector axis parent-points-before)
after-side-vector (side-vector axis parent-points-after)]
(ctm/move-modifiers (displacement center-before center-after before-side-vector after-side-vector))))
(defmethod constraint-modifier :default [_ _ _ _ _] (defmethod constraint-modifier :default [_ _ _ _ _]
[]) [])

View file

@ -15,7 +15,7 @@
(dm/export fbo/layout-content-bounds) (dm/export fbo/layout-content-bounds)
(dm/export fbo/child-layout-bound-points) (dm/export fbo/child-layout-bound-points)
(dm/export fdr/get-drop-index) (dm/export fdr/get-drop-index)
(dm/export fdr/layout-drop-areas) (dm/export fdr/get-drop-areas)
(dm/export fli/calc-layout-data) (dm/export fli/calc-layout-data)
(dm/export fmo/layout-child-modifiers) (dm/export fmo/layout-child-modifiers)

View file

@ -8,11 +8,14 @@
(:require (:require
[app.common.data :as d] [app.common.data :as d]
[app.common.geom.matrix :as gmt] [app.common.geom.matrix :as gmt]
[app.common.geom.point :as gpt]
[app.common.geom.shapes.common :as gco] [app.common.geom.shapes.common :as gco]
[app.common.geom.shapes.flex-layout.lines :as fli] [app.common.geom.shapes.flex-layout.lines :as fli]
[app.common.geom.shapes.points :as gpo] [app.common.geom.shapes.points :as gpo]
[app.common.geom.shapes.rect :as gsr] [app.common.geom.shapes.rect :as gsr]
[app.common.geom.shapes.transforms :as gtr]
[app.common.pages.helpers :as cph] [app.common.pages.helpers :as cph]
[app.common.types.modifiers :as ctm]
[app.common.types.shape.layout :as ctl])) [app.common.types.shape.layout :as ctl]))
(defn drop-child-areas (defn drop-child-areas
@ -179,14 +182,36 @@
(+ (:y line-area) (:height line-area)) (+ (:y line-area) (:height line-area))
(rest lines))))))) (rest lines)))))))
(defn get-flip-modifiers
[{:keys [flip-x flip-y transform transform-inverse] :as shape}]
(if (or flip-x flip-y)
(let [modifiers
(-> (ctm/empty)
(ctm/resize (gpt/point (if flip-x -1.0 1.0)
(if flip-y -1.0 1.0))
(gco/center-shape shape)
transform
transform-inverse))]
[(gtr/transform-shape shape modifiers) modifiers])
[shape nil]))
(defn get-drop-areas
[frame objects]
(let [[frame modifiers] (get-flip-modifiers frame)
children (->> (cph/get-immediate-children objects (:id frame))
(remove :hidden)
(map #(cond-> % (some? modifiers)
(gtr/transform-shape modifiers)))
(map #(vector (gpo/parent-coords-bounds (:points %) (:points frame)) %)))
layout-data (fli/calc-layout-data frame children (:points frame))
drop-areas (layout-drop-areas frame layout-data children)]
drop-areas))
(defn get-drop-index (defn get-drop-index
[frame-id objects position] [frame-id objects position]
(let [frame (get objects frame-id) (let [frame (get objects frame-id)
drop-areas (get-drop-areas frame objects)
position (gmt/transform-point-center position (gco/center-shape frame) (:transform-inverse frame)) position (gmt/transform-point-center position (gco/center-shape frame) (:transform-inverse frame))
children (->> (cph/get-immediate-children objects frame-id)
(remove :hidden)
(map #(vector (gpo/parent-coords-bounds (:points %) (:points frame)) %)))
layout-data (fli/calc-layout-data frame children (:points frame))
drop-areas (layout-drop-areas frame layout-data children)
area (d/seek #(gsr/contains-point? % position) drop-areas)] area (d/seek #(gsr/contains-point? % position) drop-areas)]
(:index area))) (:index area)))

View file

@ -16,7 +16,6 @@
[app.common.pages.helpers :as cph] [app.common.pages.helpers :as cph]
[app.common.spec :as us] [app.common.spec :as us]
[app.common.types.modifiers :as ctm] [app.common.types.modifiers :as ctm]
[app.common.types.shape :as cts]
[app.common.types.shape.layout :as ctl] [app.common.types.shape.layout :as ctl]
[app.main.data.workspace.changes :as dch] [app.main.data.workspace.changes :as dch]
[app.main.data.workspace.comments :as-alias dwcm] [app.main.data.workspace.comments :as-alias dwcm]
@ -206,13 +205,10 @@
[shape {:keys [width height]}] [shape {:keys [width height]}]
(cond-> shape (cond-> shape
(some? width) (some? width)
(assoc :width width) (gsh/transform-shape (ctm/change-dimensions-modifiers shape :width width {:ignore-lock? true}))
(some? height) (some? height)
(assoc :height height) (gsh/transform-shape (ctm/change-dimensions-modifiers shape :height height {:ignore-lock? true}))))
(or (some? width) (some? height))
(cts/setup-rect-selrect)))
(defn apply-text-modifiers (defn apply-text-modifiers
[objects text-modifiers] [objects text-modifiers]

View file

@ -22,7 +22,6 @@
[app.main.data.workspace.changes :as dch] [app.main.data.workspace.changes :as dch]
[app.main.data.workspace.collapse :as dwc] [app.main.data.workspace.collapse :as dwc]
[app.main.data.workspace.state-helpers :as wsh] [app.main.data.workspace.state-helpers :as wsh]
[app.main.data.workspace.thumbnails :as dwt]
[app.main.data.workspace.undo :as dwu] [app.main.data.workspace.undo :as dwu]
[app.main.data.workspace.zoom :as dwz] [app.main.data.workspace.zoom :as dwz]
[app.main.refs :as refs] [app.main.refs :as refs]
@ -549,13 +548,6 @@
(map #(get-in % [:obj :id])) (map #(get-in % [:obj :id]))
(into (d/ordered-set))) (into (d/ordered-set)))
dup-frames (->> changes
:redo-changes
(filter #(= (:type %) :add-obj))
(filter #(selected (:old-id %)))
(filter #(= :frame (get-in % [:obj :type])))
(map #(vector (:old-id %) (get-in % [:obj :id]))))
id-duplicated (first new-selected) id-duplicated (first new-selected)
frames (into #{} frames (into #{}
@ -563,18 +555,14 @@
selected) selected)
undo-id (js/Symbol)] undo-id (js/Symbol)]
(rx/concat ;; Warning: This order is important for the focus mode.
(->> (rx/from dup-frames) (rx/of
(rx/map (fn [[old-id new-id]] (dwt/duplicate-thumbnail old-id new-id))))
;; Warning: This order is important for the focus mode.
(rx/of
(dwu/start-undo-transaction undo-id) (dwu/start-undo-transaction undo-id)
(dch/commit-changes changes) (dch/commit-changes changes)
(select-shapes new-selected) (select-shapes new-selected)
(ptk/data-event :layout/update frames) (ptk/data-event :layout/update frames)
(memorize-duplicated id-original id-duplicated) (memorize-duplicated id-original id-duplicated)
(dwu/commit-undo-transaction undo-id)))))))))) (dwu/commit-undo-transaction undo-id)))))))))
(defn change-hover-state (defn change-hover-state
[id value] [id value]

View file

@ -69,7 +69,8 @@
(rx/concat (rx/concat
;; Delete the thumbnail first so if we interrupt we can regenerate after ;; Delete the thumbnail first so if we interrupt we can regenerate after
(rp/cmd! :upsert-file-object-thumbnail params) (->> (rp/cmd! :upsert-file-object-thumbnail params)
(rx/catch #(rx/empty)))
(->> blob-result (->> blob-result
(rx/merge-map (rx/merge-map
(fn [blob] (fn [blob]
@ -84,7 +85,9 @@
(rx/merge (rx/merge
;; Update the local copy of the thumbnails so we don't need to request it again ;; Update the local copy of the thumbnails so we don't need to request it again
(rx/of #(update % :workspace-thumbnails assoc object-id data)) (rx/of #(update % :workspace-thumbnails assoc object-id data))
(->> (rp/cmd! :upsert-file-object-thumbnail params) (->> (rx/timer 5000)
(rx/flat-map #(rp/cmd! :upsert-file-object-thumbnail params))
(rx/catch #(rx/empty))
(rx/ignore)))) (rx/ignore))))
(rx/empty))))))))))) (rx/empty)))))))))))

View file

@ -63,7 +63,8 @@
col? (ctl/col? shape) col? (ctl/col? shape)
children (->> (cph/get-immediate-children objects (:id shape)) children (->> (cph/get-immediate-children objects (:id shape))
(remove :hidden)) (remove :hidden)
(map #(vector (gpo/parent-coords-bounds (:points %) (:points shape)) %)))
layout-data (gsl/calc-layout-data shape children (:points shape)) layout-data (gsl/calc-layout-data shape children (:points shape))
layout-bounds (:layout-bounds layout-data) layout-bounds (:layout-bounds layout-data)
@ -85,7 +86,8 @@
(mf/defc debug-drop-zones (mf/defc debug-drop-zones
"Debug component to show the auto-layout drop areas" "Debug component to show the auto-layout drop areas"
{::mf/wrap-props false} {::mf/wrap [#(mf/memo' % (mf/check-props ["objects" "selected-shapes" "hover-top-frame-id"]))]
::mf/wrap-props false}
[props] [props]
(let [objects (unchecked-get props "objects") (let [objects (unchecked-get props "objects")
@ -100,11 +102,7 @@
shape (or selected-frame (get objects hover-top-frame-id))] shape (or selected-frame (get objects hover-top-frame-id))]
(when (and shape (:layout shape)) (when (and shape (:layout shape))
(let [children (->> (cph/get-immediate-children objects (:id shape)) (let [drop-areas (gsl/get-drop-areas shape objects)]
(remove :hidden)
(map #(vector (gpo/parent-coords-bounds (:points %) (:points shape)) %)))
layout-data (gsl/calc-layout-data shape children (:points shape))
drop-areas (gsl/layout-drop-areas shape layout-data children)]
[:g.debug-layout {:pointer-events "none" [:g.debug-layout {:pointer-events "none"
:transform (gsh/transform-str shape)} :transform (gsh/transform-str shape)}
(for [[idx drop-area] (d/enumerate drop-areas)] (for [[idx drop-area] (d/enumerate drop-areas)]