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