diff --git a/src/bean/area.cljs b/src/bean/area.cljs index 5b3fa46..0033a0f 100644 --- a/src/bean/area.cljs +++ b/src/bean/area.cljs @@ -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) diff --git a/src/bean/frames.cljs b/src/bean/frames.cljs index afc5184..8e277a8 100644 --- a/src/bean/frames.cljs +++ b/src/bean/frames.cljs @@ -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 #{}})) @@ -194,7 +197,8 @@ (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]}]] @@ -202,7 +206,9 @@ (< 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)) diff --git a/src/bean/grid.cljs b/src/bean/grid.cljs index cd6f0aa..3774f8b 100644 --- a/src/bean/grid.cljs +++ b/src/bean/grid.cljs @@ -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) diff --git a/src/bean/ui/views/sheet.cljs b/src/bean/ui/views/sheet.cljs index 57142a8..af81f5c 100644 --- a/src/bean/ui/views/sheet.cljs +++ b/src/bean/ui/views/sheet.cljs @@ -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)