Mercurial > hg > indyvon
changeset 163:dc3ed475c6d6
Added views/border-box.
author | Mikhail Kryshen <mikhail@kryshen.net> |
---|---|
date | Mon, 24 Nov 2014 02:17:54 +0300 |
parents | 4aa8979938ee |
children | d91a7e0388da |
files | src/indyvon/views.clj |
diffstat | 1 files changed, 45 insertions(+), 0 deletions(-) [+] |
line diff
1.1 --- a/src/indyvon/views.clj Mon Nov 24 02:09:13 2014 +0300 1.2 +++ b/src/indyvon/views.clj Mon Nov 24 02:17:54 2014 +0300 1.3 @@ -165,6 +165,51 @@ 1.4 (defn vbox-proportional [& contents] 1.5 (vbox* true contents)) 1.6 1.7 +(defrecord BorderBox [north west south east center] 1.8 + View 1.9 + (render! [_] 1.10 + (let [w *width* 1.11 + h *height* 1.12 + t (height (geometry north) w) 1.13 + b (height (geometry south) w) 1.14 + ch (- h t b) 1.15 + l (width (geometry west) ch) 1.16 + r (width (geometry east) ch) 1.17 + cw (- w l r)] 1.18 + (draw! north 0 0 w t) 1.19 + (draw! west 0 t l ch) 1.20 + (draw! south 0 (- h b) w b) 1.21 + (draw! east (- w r) t r ch) 1.22 + (draw! center l t cw ch))) 1.23 + (geometry [_] 1.24 + (let [ng (geometry north) 1.25 + wg (geometry west) 1.26 + sg (geometry south) 1.27 + eg (geometry east) 1.28 + cg (geometry center) 1.29 + cw (width cg) 1.30 + ch (max (height cg) (height wg) (height eg)) 1.31 + l (width wg ch) 1.32 + r (width eg ch) 1.33 + w (max (+ cw l r) (width ng) (width sg)) 1.34 + t (height ng w) 1.35 + b (height sg w) 1.36 + h (+ ch t b)] 1.37 + (->Size w h)))) 1.38 + 1.39 +(defn border-box 1.40 + "reginonviews => region-key view 1.41 + Returns a View that organizes specified Views in five 1.42 + regions (:north, :south, :east, :west, and 1.43 + :center). Each region may contain no more than one View." 1.44 + [& regionviews] 1.45 + (let [regions (apply array-map regionviews)] 1.46 + (->BorderBox (:north regions empty-view) 1.47 + (:west regions empty-view) 1.48 + (:south regions empty-view) 1.49 + (:east regions empty-view) 1.50 + (:center regions empty-view)))) 1.51 + 1.52 (defn- re-split [^java.util.regex.Pattern re s] 1.53 (seq (.split re s))) 1.54