Skip to content

Commit

Permalink
Don't resize frame if it overlaps with other frames
Browse files Browse the repository at this point in the history
  • Loading branch information
prabhanshuguptagit committed Jun 24, 2024
1 parent 70bbfad commit 5bf5ec8
Show file tree
Hide file tree
Showing 4 changed files with 22 additions and 16 deletions.
5 changes: 5 additions & 0 deletions src/bean/area.cljs
Original file line number Diff line number Diff line change
Expand Up @@ -30,8 +30,13 @@
(= start end))

(defn overlap? [area-a area-b]
(prn area-a area-b)
(let [{[a-r1 a-c1] :start [a-r2 a-c2] :end} area-a
{[b-r1 b-c1] :start [b-r2 b-c2] :end} area-b]
(prn a-r2 b-r1
a-r1 b-r2
a-c2 b-c1
a-c1 b-c2)
(not
(or (< a-r2 b-r1)
(> a-r1 b-r2)
Expand Down
20 changes: 13 additions & 7 deletions src/bean/frames.cljs
Original file line number Diff line number Diff line change
Expand Up @@ -3,11 +3,14 @@
[bean.util :as util]
[clojure.set :as set]))

(defn overlaps? [sheet frame-name area]
(some
#(area/overlap? % area)
(vals (dissoc (:frames sheet) frame-name))))

(defn make-frame [sheet frame-name area]
(if (and (not (area/area-empty? area))
(not (some
#(area/overlap? % area)
(vals (:frames sheet)))))
(not (overlaps? sheet frame-name area)))
(assoc-in sheet [:frames frame-name]
(merge area {:labels {}
:skip-cells #{}}))
Expand Down Expand Up @@ -194,15 +197,18 @@
(update-in sheet [:frames frame-name :skip-cells] #(apply disj % addresses*))))

(defn resize-frame [sheet frame-name area]
(update-in sheet [:frames frame-name] merge area))
(when-not (overlaps? sheet frame-name area)
(update-in sheet [:frames frame-name] merge area)))

(defn expand-frames [sheet [updated-r updated-c]]
(if-let [at-end-of-frame (some (fn [[frame-name {:keys [start end]}]]
(when (and (= updated-r (inc (first end)))
(< updated-c (inc (second end)))
(>= updated-c (second start)))
frame-name)) (:frames sheet))]

(let [[end-r end-c] (:end (get-frame sheet at-end-of-frame))]
(resize-frame sheet at-end-of-frame {:end [(inc end-r) end-c]}))
(let [start (:start (get-frame sheet at-end-of-frame))
[end-r end-c] (:end (get-frame sheet at-end-of-frame))]
(or (resize-frame sheet at-end-of-frame {:start start
:end [(inc end-r) end-c]})
sheet))
sheet))
5 changes: 3 additions & 2 deletions src/bean/grid.cljs
Original file line number Diff line number Diff line change
Expand Up @@ -335,8 +335,9 @@
:end (offset end pasted-at)}))

(defn resize-frame [sheet frame-name area]
(-> (frames/resize-frame sheet frame-name area)
eval-sheet-a-few-times))
(if-let [sheet* (frames/resize-frame sheet frame-name area)]
(eval-sheet-a-few-times sheet*)
sheet))

(defn clear-area [sheet {:keys [start end]}]
(->> (util/addresses-matrix start end)
Expand Down
8 changes: 1 addition & 7 deletions src/bean/ui/views/sheet.cljs
Original file line number Diff line number Diff line change
Expand Up @@ -492,14 +492,8 @@
(doseq [[frame-name frame-data] frames]
(let [[x y w h] (area->xywh frame-data row-heights col-widths)
border (new pixi/Graphics)
highlight (new pixi/Graphics)
extra-hitarea-y (+ (* 2 (:frame-name-padding styles/sizes))
(:frame-name-font styles/sizes))]
highlight (new pixi/Graphics)]
(-> g (.addChild border) (.addChild highlight))
(set! (.-eventMode border) "static")
(set! (.-hitArea border) (new pixi/Rectangle
x (- y extra-hitarea-y)
w (+ h extra-hitarea-y)))
(.lineStyle border (:frame-border styles/sizes) (:frame-border styles/colors) 0.5 0.5)
(.drawRect border x y w h)
(draw-frame-name highlight frame-name x y)
Expand Down

0 comments on commit 5bf5ec8

Please sign in to comment.