{-# LANGUAGE RecordWildCards #-} module Graphics.Layout.Box where data Border m n = Border { top :: m, bottom :: m, left :: n, right :: n } data Size m n = Size {inline :: n, block :: m} data PaddedBox m n = PaddedBox { min :: Size m n, max :: Size m n, size :: Size m n, padding :: Border m n, border :: Border m n, margin :: Border m n } width PaddedBox {..} = left margin + left border + left padding + inline size + right padding + right border + right margin height PaddedBox {..} = top margin + top border + top padding + block size + bottom padding + bottom border + bottom margin minWidth PaddedBox {..} = left margin + left border + left padding + inline min + right padding + right border + right margin minHeight PaddedBox {..} = top margin + top border + top padding + block min + bottom padding + bottom border + bottom margin data Length = Pixels Double | Percent Double | Auto | Preferred | Min