{-# LANGUAGE RecordWildCards, DeriveGeneric #-}
module Graphics.Layout.Box(Border(..), mapX, mapY,
Size(..), mapSizeX, mapSizeY,
PaddedBox(..), zeroBox, lengthBox, mapX', mapY',
width, height, minWidth, minHeight, maxWidth, maxHeight,
leftSpace, rightSpace, topSpace, bottomSpace, hSpace, vSpace,
Length(..), mapAuto, lowerLength, Zero(..), CastDouble(..)) where
import Control.DeepSeq (NFData)
import GHC.Generics (Generic)
data Border m n = Border {
forall m n. Border m n -> m
top :: m, forall m n. Border m n -> m
bottom :: m, forall m n. Border m n -> n
left :: n, forall m n. Border m n -> n
right :: n
} deriving (Border m n -> Border m n -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
forall m n. (Eq m, Eq n) => Border m n -> Border m n -> Bool
/= :: Border m n -> Border m n -> Bool
$c/= :: forall m n. (Eq m, Eq n) => Border m n -> Border m n -> Bool
== :: Border m n -> Border m n -> Bool
$c== :: forall m n. (Eq m, Eq n) => Border m n -> Border m n -> Bool
Eq, ReadPrec [Border m n]
ReadPrec (Border m n)
ReadS [Border m n]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
forall m n. (Read m, Read n) => ReadPrec [Border m n]
forall m n. (Read m, Read n) => ReadPrec (Border m n)
forall m n. (Read m, Read n) => Int -> ReadS (Border m n)
forall m n. (Read m, Read n) => ReadS [Border m n]
readListPrec :: ReadPrec [Border m n]
$creadListPrec :: forall m n. (Read m, Read n) => ReadPrec [Border m n]
readPrec :: ReadPrec (Border m n)
$creadPrec :: forall m n. (Read m, Read n) => ReadPrec (Border m n)
readList :: ReadS [Border m n]
$creadList :: forall m n. (Read m, Read n) => ReadS [Border m n]
readsPrec :: Int -> ReadS (Border m n)
$creadsPrec :: forall m n. (Read m, Read n) => Int -> ReadS (Border m n)
Read, Int -> Border m n -> ShowS
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
forall m n. (Show m, Show n) => Int -> Border m n -> ShowS
forall m n. (Show m, Show n) => [Border m n] -> ShowS
forall m n. (Show m, Show n) => Border m n -> String
showList :: [Border m n] -> ShowS
$cshowList :: forall m n. (Show m, Show n) => [Border m n] -> ShowS
show :: Border m n -> String
$cshow :: forall m n. (Show m, Show n) => Border m n -> String
showsPrec :: Int -> Border m n -> ShowS
$cshowsPrec :: forall m n. (Show m, Show n) => Int -> Border m n -> ShowS
Show, forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
forall m n x. Rep (Border m n) x -> Border m n
forall m n x. Border m n -> Rep (Border m n) x
$cto :: forall m n x. Rep (Border m n) x -> Border m n
$cfrom :: forall m n x. Border m n -> Rep (Border m n) x
Generic)
instance (NFData m, NFData n) => NFData (Border m n)
mapX :: (n -> nn) -> Border m n -> Border m nn
mapY :: (m -> mm) -> Border m n -> Border mm n
mapX :: forall n nn m. (n -> nn) -> Border m n -> Border m nn
mapX n -> nn
cb Border m n
self = Border m n
self { left :: nn
left = n -> nn
cb forall a b. (a -> b) -> a -> b
$ forall m n. Border m n -> n
left Border m n
self, right :: nn
right = n -> nn
cb forall a b. (a -> b) -> a -> b
$ forall m n. Border m n -> n
right Border m n
self }
mapY :: forall m mm n. (m -> mm) -> Border m n -> Border mm n
mapY m -> mm
cb Border m n
self = Border m n
self { top :: mm
top = m -> mm
cb forall a b. (a -> b) -> a -> b
$ forall m n. Border m n -> m
top Border m n
self, bottom :: mm
bottom = m -> mm
cb forall a b. (a -> b) -> a -> b
$ forall m n. Border m n -> m
bottom Border m n
self }
data Size m n = Size {forall m n. Size m n -> n
inline :: n, forall m n. Size m n -> m
block :: m} deriving (Size m n -> Size m n -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
forall m n. (Eq n, Eq m) => Size m n -> Size m n -> Bool
/= :: Size m n -> Size m n -> Bool
$c/= :: forall m n. (Eq n, Eq m) => Size m n -> Size m n -> Bool
== :: Size m n -> Size m n -> Bool
$c== :: forall m n. (Eq n, Eq m) => Size m n -> Size m n -> Bool
Eq, Int -> Size m n -> ShowS
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
forall m n. (Show n, Show m) => Int -> Size m n -> ShowS
forall m n. (Show n, Show m) => [Size m n] -> ShowS
forall m n. (Show n, Show m) => Size m n -> String
showList :: [Size m n] -> ShowS
$cshowList :: forall m n. (Show n, Show m) => [Size m n] -> ShowS
show :: Size m n -> String
$cshow :: forall m n. (Show n, Show m) => Size m n -> String
showsPrec :: Int -> Size m n -> ShowS
$cshowsPrec :: forall m n. (Show n, Show m) => Int -> Size m n -> ShowS
Show, ReadPrec [Size m n]
ReadPrec (Size m n)
ReadS [Size m n]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
forall m n. (Read n, Read m) => ReadPrec [Size m n]
forall m n. (Read n, Read m) => ReadPrec (Size m n)
forall m n. (Read n, Read m) => Int -> ReadS (Size m n)
forall m n. (Read n, Read m) => ReadS [Size m n]
readListPrec :: ReadPrec [Size m n]
$creadListPrec :: forall m n. (Read n, Read m) => ReadPrec [Size m n]
readPrec :: ReadPrec (Size m n)
$creadPrec :: forall m n. (Read n, Read m) => ReadPrec (Size m n)
readList :: ReadS [Size m n]
$creadList :: forall m n. (Read n, Read m) => ReadS [Size m n]
readsPrec :: Int -> ReadS (Size m n)
$creadsPrec :: forall m n. (Read n, Read m) => Int -> ReadS (Size m n)
Read, forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
forall m n x. Rep (Size m n) x -> Size m n
forall m n x. Size m n -> Rep (Size m n) x
$cto :: forall m n x. Rep (Size m n) x -> Size m n
$cfrom :: forall m n x. Size m n -> Rep (Size m n) x
Generic)
instance (NFData m, NFData n) => NFData (Size m n)
mapSizeY :: (m -> mm) -> Size m n -> Size mm n
mapSizeY :: forall m mm n. (m -> mm) -> Size m n -> Size mm n
mapSizeY m -> mm
cb Size m n
self = forall m n. n -> m -> Size m n
Size (forall m n. Size m n -> n
inline Size m n
self) (m -> mm
cb forall a b. (a -> b) -> a -> b
$ forall m n. Size m n -> m
block Size m n
self)
mapSizeX :: (n -> nn) -> Size m n -> Size m nn
mapSizeX :: forall n nn m. (n -> nn) -> Size m n -> Size m nn
mapSizeX n -> nn
cb Size m n
self = forall m n. n -> m -> Size m n
Size (n -> nn
cb forall a b. (a -> b) -> a -> b
$ forall m n. Size m n -> n
inline Size m n
self) (forall m n. Size m n -> m
block Size m n
self)
data PaddedBox m n = PaddedBox {
forall m n. PaddedBox m n -> Size m n
min :: Size m n,
forall m n. PaddedBox m n -> Size m n
max :: Size m n,
forall m n. PaddedBox m n -> Size Double Double
nat :: Size Double Double,
forall m n. PaddedBox m n -> Size m n
size :: Size m n,
forall m n. PaddedBox m n -> Border m n
padding :: Border m n,
forall m n. PaddedBox m n -> Border m n
border :: Border m n,
forall m n. PaddedBox m n -> Border m n
margin :: Border m n
} deriving (PaddedBox m n -> PaddedBox m n -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
forall m n. (Eq n, Eq m) => PaddedBox m n -> PaddedBox m n -> Bool
/= :: PaddedBox m n -> PaddedBox m n -> Bool
$c/= :: forall m n. (Eq n, Eq m) => PaddedBox m n -> PaddedBox m n -> Bool
== :: PaddedBox m n -> PaddedBox m n -> Bool
$c== :: forall m n. (Eq n, Eq m) => PaddedBox m n -> PaddedBox m n -> Bool
Eq, ReadPrec [PaddedBox m n]
ReadPrec (PaddedBox m n)
ReadS [PaddedBox m n]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
forall m n. (Read n, Read m) => ReadPrec [PaddedBox m n]
forall m n. (Read n, Read m) => ReadPrec (PaddedBox m n)
forall m n. (Read n, Read m) => Int -> ReadS (PaddedBox m n)
forall m n. (Read n, Read m) => ReadS [PaddedBox m n]
readListPrec :: ReadPrec [PaddedBox m n]
$creadListPrec :: forall m n. (Read n, Read m) => ReadPrec [PaddedBox m n]
readPrec :: ReadPrec (PaddedBox m n)
$creadPrec :: forall m n. (Read n, Read m) => ReadPrec (PaddedBox m n)
readList :: ReadS [PaddedBox m n]
$creadList :: forall m n. (Read n, Read m) => ReadS [PaddedBox m n]
readsPrec :: Int -> ReadS (PaddedBox m n)
$creadsPrec :: forall m n. (Read n, Read m) => Int -> ReadS (PaddedBox m n)
Read, Int -> PaddedBox m n -> ShowS
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
forall m n. (Show n, Show m) => Int -> PaddedBox m n -> ShowS
forall m n. (Show n, Show m) => [PaddedBox m n] -> ShowS
forall m n. (Show n, Show m) => PaddedBox m n -> String
showList :: [PaddedBox m n] -> ShowS
$cshowList :: forall m n. (Show n, Show m) => [PaddedBox m n] -> ShowS
show :: PaddedBox m n -> String
$cshow :: forall m n. (Show n, Show m) => PaddedBox m n -> String
showsPrec :: Int -> PaddedBox m n -> ShowS
$cshowsPrec :: forall m n. (Show n, Show m) => Int -> PaddedBox m n -> ShowS
Show, forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
forall m n x. Rep (PaddedBox m n) x -> PaddedBox m n
forall m n x. PaddedBox m n -> Rep (PaddedBox m n) x
$cto :: forall m n x. Rep (PaddedBox m n) x -> PaddedBox m n
$cfrom :: forall m n x. PaddedBox m n -> Rep (PaddedBox m n) x
Generic)
instance (NFData m, NFData n) => NFData (PaddedBox m n)
zeroBox :: PaddedBox Double Double
zeroBox :: PaddedBox Double Double
zeroBox = PaddedBox {
min :: Size Double Double
min = forall m n. n -> m -> Size m n
Size Double
0 Double
0,
max :: Size Double Double
max = forall m n. n -> m -> Size m n
Size Double
0 Double
0,
nat :: Size Double Double
nat = forall m n. n -> m -> Size m n
Size Double
0 Double
0,
size :: Size Double Double
size = forall m n. n -> m -> Size m n
Size Double
0 Double
0,
padding :: Border Double Double
padding = forall m n. m -> m -> n -> n -> Border m n
Border Double
0 Double
0 Double
0 Double
0,
border :: Border Double Double
border = forall m n. m -> m -> n -> n -> Border m n
Border Double
0 Double
0 Double
0 Double
0,
margin :: Border Double Double
margin = forall m n. m -> m -> n -> n -> Border m n
Border Double
0 Double
0 Double
0 Double
0
}
lengthBox :: PaddedBox Length Length
lengthBox :: PaddedBox Length Length
lengthBox = PaddedBox {
min :: Size Length Length
min = forall m n. n -> m -> Size m n
Size Length
Auto Length
Auto,
max :: Size Length Length
max = forall m n. n -> m -> Size m n
Size Length
Auto Length
Auto,
nat :: Size Double Double
nat = forall m n. n -> m -> Size m n
Size Double
0 Double
0,
size :: Size Length Length
size = forall m n. n -> m -> Size m n
Size Length
Auto Length
Auto,
padding :: Border Length Length
padding = forall m n. m -> m -> n -> n -> Border m n
Border forall a. Zero a => a
zero forall a. Zero a => a
zero forall a. Zero a => a
zero forall a. Zero a => a
zero,
border :: Border Length Length
border = forall m n. m -> m -> n -> n -> Border m n
Border forall a. Zero a => a
zero forall a. Zero a => a
zero forall a. Zero a => a
zero forall a. Zero a => a
zero,
margin :: Border Length Length
margin = forall m n. m -> m -> n -> n -> Border m n
Border forall a. Zero a => a
zero forall a. Zero a => a
zero forall a. Zero a => a
zero forall a. Zero a => a
zero
}
mapX' :: (n -> nn) -> PaddedBox m n -> PaddedBox m nn
mapX' :: forall n nn m. (n -> nn) -> PaddedBox m n -> PaddedBox m nn
mapX' n -> nn
cb PaddedBox {Size m n
Size Double Double
Border m n
margin :: Border m n
border :: Border m n
padding :: Border m n
size :: Size m n
nat :: Size Double Double
max :: Size m n
min :: Size m n
margin :: forall m n. PaddedBox m n -> Border m n
border :: forall m n. PaddedBox m n -> Border m n
padding :: forall m n. PaddedBox m n -> Border m n
size :: forall m n. PaddedBox m n -> Size m n
nat :: forall m n. PaddedBox m n -> Size Double Double
max :: forall m n. PaddedBox m n -> Size m n
min :: forall m n. PaddedBox m n -> Size m n
..} = PaddedBox {
min :: Size m nn
min = forall m n. n -> m -> Size m n
Size (n -> nn
cb forall a b. (a -> b) -> a -> b
$ forall m n. Size m n -> n
inline Size m n
min) (forall m n. Size m n -> m
block Size m n
min),
size :: Size m nn
size = forall m n. n -> m -> Size m n
Size (n -> nn
cb forall a b. (a -> b) -> a -> b
$ forall m n. Size m n -> n
inline Size m n
size) (forall m n. Size m n -> m
block Size m n
size),
nat :: Size Double Double
nat = forall m n. n -> m -> Size m n
Size Double
0 Double
0,
max :: Size m nn
max = forall m n. n -> m -> Size m n
Size (n -> nn
cb forall a b. (a -> b) -> a -> b
$ forall m n. Size m n -> n
inline Size m n
max) (forall m n. Size m n -> m
block Size m n
max),
padding :: Border m nn
padding = forall n nn m. (n -> nn) -> Border m n -> Border m nn
mapX n -> nn
cb Border m n
padding,
border :: Border m nn
border = forall n nn m. (n -> nn) -> Border m n -> Border m nn
mapX n -> nn
cb Border m n
border,
margin :: Border m nn
margin = forall n nn m. (n -> nn) -> Border m n -> Border m nn
mapX n -> nn
cb Border m n
margin
}
mapY' :: (m -> mm) -> PaddedBox m n -> PaddedBox mm n
mapY' :: forall m mm n. (m -> mm) -> PaddedBox m n -> PaddedBox mm n
mapY' m -> mm
cb PaddedBox {Size m n
Size Double Double
Border m n
margin :: Border m n
border :: Border m n
padding :: Border m n
size :: Size m n
nat :: Size Double Double
max :: Size m n
min :: Size m n
margin :: forall m n. PaddedBox m n -> Border m n
border :: forall m n. PaddedBox m n -> Border m n
padding :: forall m n. PaddedBox m n -> Border m n
size :: forall m n. PaddedBox m n -> Size m n
nat :: forall m n. PaddedBox m n -> Size Double Double
max :: forall m n. PaddedBox m n -> Size m n
min :: forall m n. PaddedBox m n -> Size m n
..} = PaddedBox {
min :: Size mm n
min = forall m n. n -> m -> Size m n
Size (forall m n. Size m n -> n
inline Size m n
min) (m -> mm
cb forall a b. (a -> b) -> a -> b
$ forall m n. Size m n -> m
block Size m n
min),
size :: Size mm n
size = forall m n. n -> m -> Size m n
Size (forall m n. Size m n -> n
inline Size m n
size) (m -> mm
cb forall a b. (a -> b) -> a -> b
$ forall m n. Size m n -> m
block Size m n
size),
nat :: Size Double Double
nat = forall m n. n -> m -> Size m n
Size Double
0 Double
0,
max :: Size mm n
max = forall m n. n -> m -> Size m n
Size (forall m n. Size m n -> n
inline Size m n
max) (m -> mm
cb forall a b. (a -> b) -> a -> b
$ forall m n. Size m n -> m
block Size m n
max),
padding :: Border mm n
padding = forall m mm n. (m -> mm) -> Border m n -> Border mm n
mapY m -> mm
cb Border m n
padding,
border :: Border mm n
border = forall m mm n. (m -> mm) -> Border m n -> Border mm n
mapY m -> mm
cb Border m n
border,
margin :: Border mm n
margin = forall m mm n. (m -> mm) -> Border m n -> Border mm n
mapY m -> mm
cb Border m n
margin
}
width :: PaddedBox m a -> a
width PaddedBox {Size m a
Size Double Double
Border m a
margin :: Border m a
border :: Border m a
padding :: Border m a
size :: Size m a
nat :: Size Double Double
max :: Size m a
min :: Size m a
margin :: forall m n. PaddedBox m n -> Border m n
border :: forall m n. PaddedBox m n -> Border m n
padding :: forall m n. PaddedBox m n -> Border m n
size :: forall m n. PaddedBox m n -> Size m n
nat :: forall m n. PaddedBox m n -> Size Double Double
max :: forall m n. PaddedBox m n -> Size m n
min :: forall m n. PaddedBox m n -> Size m n
..} = forall m n. Border m n -> n
left Border m a
margin forall a. Num a => a -> a -> a
+ forall m n. Border m n -> n
left Border m a
border forall a. Num a => a -> a -> a
+ forall m n. Border m n -> n
left Border m a
padding forall a. Num a => a -> a -> a
+
forall m n. Size m n -> n
inline Size m a
size forall a. Num a => a -> a -> a
+ forall m n. Border m n -> n
right Border m a
padding forall a. Num a => a -> a -> a
+ forall m n. Border m n -> n
right Border m a
border forall a. Num a => a -> a -> a
+ forall m n. Border m n -> n
right Border m a
margin
height :: PaddedBox a n -> a
height PaddedBox {Size a n
Size Double Double
Border a n
margin :: Border a n
border :: Border a n
padding :: Border a n
size :: Size a n
nat :: Size Double Double
max :: Size a n
min :: Size a n
margin :: forall m n. PaddedBox m n -> Border m n
border :: forall m n. PaddedBox m n -> Border m n
padding :: forall m n. PaddedBox m n -> Border m n
size :: forall m n. PaddedBox m n -> Size m n
nat :: forall m n. PaddedBox m n -> Size Double Double
max :: forall m n. PaddedBox m n -> Size m n
min :: forall m n. PaddedBox m n -> Size m n
..} = forall m n. Border m n -> m
top Border a n
margin forall a. Num a => a -> a -> a
+ forall m n. Border m n -> m
top Border a n
border forall a. Num a => a -> a -> a
+ forall m n. Border m n -> m
top Border a n
padding forall a. Num a => a -> a -> a
+
forall m n. Size m n -> m
block Size a n
size forall a. Num a => a -> a -> a
+ forall m n. Border m n -> m
bottom Border a n
padding forall a. Num a => a -> a -> a
+ forall m n. Border m n -> m
bottom Border a n
border forall a. Num a => a -> a -> a
+ forall m n. Border m n -> m
bottom Border a n
margin
minWidth :: PaddedBox m a -> a
minWidth PaddedBox {Size m a
Size Double Double
Border m a
margin :: Border m a
border :: Border m a
padding :: Border m a
size :: Size m a
nat :: Size Double Double
max :: Size m a
min :: Size m a
margin :: forall m n. PaddedBox m n -> Border m n
border :: forall m n. PaddedBox m n -> Border m n
padding :: forall m n. PaddedBox m n -> Border m n
size :: forall m n. PaddedBox m n -> Size m n
nat :: forall m n. PaddedBox m n -> Size Double Double
max :: forall m n. PaddedBox m n -> Size m n
min :: forall m n. PaddedBox m n -> Size m n
..} = forall m n. Border m n -> n
left Border m a
margin forall a. Num a => a -> a -> a
+ forall m n. Border m n -> n
left Border m a
border forall a. Num a => a -> a -> a
+ forall m n. Border m n -> n
left Border m a
padding forall a. Num a => a -> a -> a
+
forall m n. Size m n -> n
inline Size m a
min forall a. Num a => a -> a -> a
+ forall m n. Border m n -> n
right Border m a
padding forall a. Num a => a -> a -> a
+ forall m n. Border m n -> n
right Border m a
border forall a. Num a => a -> a -> a
+ forall m n. Border m n -> n
right Border m a
margin
minHeight :: PaddedBox a n -> a
minHeight PaddedBox {Size a n
Size Double Double
Border a n
margin :: Border a n
border :: Border a n
padding :: Border a n
size :: Size a n
nat :: Size Double Double
max :: Size a n
min :: Size a n
margin :: forall m n. PaddedBox m n -> Border m n
border :: forall m n. PaddedBox m n -> Border m n
padding :: forall m n. PaddedBox m n -> Border m n
size :: forall m n. PaddedBox m n -> Size m n
nat :: forall m n. PaddedBox m n -> Size Double Double
max :: forall m n. PaddedBox m n -> Size m n
min :: forall m n. PaddedBox m n -> Size m n
..} = forall m n. Border m n -> m
top Border a n
margin forall a. Num a => a -> a -> a
+ forall m n. Border m n -> m
top Border a n
border forall a. Num a => a -> a -> a
+ forall m n. Border m n -> m
top Border a n
padding forall a. Num a => a -> a -> a
+
forall m n. Size m n -> m
block Size a n
min forall a. Num a => a -> a -> a
+ forall m n. Border m n -> m
bottom Border a n
padding forall a. Num a => a -> a -> a
+ forall m n. Border m n -> m
bottom Border a n
border forall a. Num a => a -> a -> a
+ forall m n. Border m n -> m
bottom Border a n
margin
maxWidth :: PaddedBox m a -> a
maxWidth PaddedBox {Size m a
Size Double Double
Border m a
margin :: Border m a
border :: Border m a
padding :: Border m a
size :: Size m a
nat :: Size Double Double
max :: Size m a
min :: Size m a
margin :: forall m n. PaddedBox m n -> Border m n
border :: forall m n. PaddedBox m n -> Border m n
padding :: forall m n. PaddedBox m n -> Border m n
size :: forall m n. PaddedBox m n -> Size m n
nat :: forall m n. PaddedBox m n -> Size Double Double
max :: forall m n. PaddedBox m n -> Size m n
min :: forall m n. PaddedBox m n -> Size m n
..} = forall m n. Border m n -> n
left Border m a
margin forall a. Num a => a -> a -> a
+ forall m n. Border m n -> n
left Border m a
border forall a. Num a => a -> a -> a
+ forall m n. Border m n -> n
left Border m a
padding forall a. Num a => a -> a -> a
+
forall m n. Size m n -> n
inline Size m a
max forall a. Num a => a -> a -> a
+ forall m n. Border m n -> n
right Border m a
padding forall a. Num a => a -> a -> a
+ forall m n. Border m n -> n
right Border m a
border forall a. Num a => a -> a -> a
+ forall m n. Border m n -> n
right Border m a
margin
maxHeight :: PaddedBox a n -> a
maxHeight PaddedBox {Size a n
Size Double Double
Border a n
margin :: Border a n
border :: Border a n
padding :: Border a n
size :: Size a n
nat :: Size Double Double
max :: Size a n
min :: Size a n
margin :: forall m n. PaddedBox m n -> Border m n
border :: forall m n. PaddedBox m n -> Border m n
padding :: forall m n. PaddedBox m n -> Border m n
size :: forall m n. PaddedBox m n -> Size m n
nat :: forall m n. PaddedBox m n -> Size Double Double
max :: forall m n. PaddedBox m n -> Size m n
min :: forall m n. PaddedBox m n -> Size m n
..} = forall m n. Border m n -> m
top Border a n
margin forall a. Num a => a -> a -> a
+ forall m n. Border m n -> m
top Border a n
border forall a. Num a => a -> a -> a
+ forall m n. Border m n -> m
top Border a n
padding forall a. Num a => a -> a -> a
+
forall m n. Size m n -> m
block Size a n
max forall a. Num a => a -> a -> a
+ forall m n. Border m n -> m
bottom Border a n
padding forall a. Num a => a -> a -> a
+ forall m n. Border m n -> m
bottom Border a n
border forall a. Num a => a -> a -> a
+ forall m n. Border m n -> m
bottom Border a n
margin
leftSpace :: PaddedBox m a -> a
leftSpace PaddedBox {Size m a
Size Double Double
Border m a
margin :: Border m a
border :: Border m a
padding :: Border m a
size :: Size m a
nat :: Size Double Double
max :: Size m a
min :: Size m a
margin :: forall m n. PaddedBox m n -> Border m n
border :: forall m n. PaddedBox m n -> Border m n
padding :: forall m n. PaddedBox m n -> Border m n
size :: forall m n. PaddedBox m n -> Size m n
nat :: forall m n. PaddedBox m n -> Size Double Double
max :: forall m n. PaddedBox m n -> Size m n
min :: forall m n. PaddedBox m n -> Size m n
..} = forall m n. Border m n -> n
left Border m a
margin forall a. Num a => a -> a -> a
+ forall m n. Border m n -> n
left Border m a
border forall a. Num a => a -> a -> a
+ forall m n. Border m n -> n
left Border m a
padding
rightSpace :: PaddedBox m a -> a
rightSpace PaddedBox {Size m a
Size Double Double
Border m a
margin :: Border m a
border :: Border m a
padding :: Border m a
size :: Size m a
nat :: Size Double Double
max :: Size m a
min :: Size m a
margin :: forall m n. PaddedBox m n -> Border m n
border :: forall m n. PaddedBox m n -> Border m n
padding :: forall m n. PaddedBox m n -> Border m n
size :: forall m n. PaddedBox m n -> Size m n
nat :: forall m n. PaddedBox m n -> Size Double Double
max :: forall m n. PaddedBox m n -> Size m n
min :: forall m n. PaddedBox m n -> Size m n
..} = forall m n. Border m n -> n
right Border m a
margin forall a. Num a => a -> a -> a
+ forall m n. Border m n -> n
right Border m a
border forall a. Num a => a -> a -> a
+ forall m n. Border m n -> n
right Border m a
padding
topSpace :: PaddedBox a n -> a
topSpace PaddedBox {Size a n
Size Double Double
Border a n
margin :: Border a n
border :: Border a n
padding :: Border a n
size :: Size a n
nat :: Size Double Double
max :: Size a n
min :: Size a n
margin :: forall m n. PaddedBox m n -> Border m n
border :: forall m n. PaddedBox m n -> Border m n
padding :: forall m n. PaddedBox m n -> Border m n
size :: forall m n. PaddedBox m n -> Size m n
nat :: forall m n. PaddedBox m n -> Size Double Double
max :: forall m n. PaddedBox m n -> Size m n
min :: forall m n. PaddedBox m n -> Size m n
..} = forall m n. Border m n -> m
top Border a n
margin forall a. Num a => a -> a -> a
+ forall m n. Border m n -> m
top Border a n
border forall a. Num a => a -> a -> a
+ forall m n. Border m n -> m
top Border a n
padding
bottomSpace :: PaddedBox a n -> a
bottomSpace PaddedBox {Size a n
Size Double Double
Border a n
margin :: Border a n
border :: Border a n
padding :: Border a n
size :: Size a n
nat :: Size Double Double
max :: Size a n
min :: Size a n
margin :: forall m n. PaddedBox m n -> Border m n
border :: forall m n. PaddedBox m n -> Border m n
padding :: forall m n. PaddedBox m n -> Border m n
size :: forall m n. PaddedBox m n -> Size m n
nat :: forall m n. PaddedBox m n -> Size Double Double
max :: forall m n. PaddedBox m n -> Size m n
min :: forall m n. PaddedBox m n -> Size m n
..} = forall m n. Border m n -> m
bottom Border a n
margin forall a. Num a => a -> a -> a
+ forall m n. Border m n -> m
bottom Border a n
border forall a. Num a => a -> a -> a
+ forall m n. Border m n -> m
bottom Border a n
padding
hSpace :: PaddedBox m a -> a
hSpace PaddedBox m a
self = forall {a} {m}. Num a => PaddedBox m a -> a
leftSpace PaddedBox m a
self forall a. Num a => a -> a -> a
+ forall {a} {m}. Num a => PaddedBox m a -> a
rightSpace PaddedBox m a
self
vSpace :: PaddedBox a n -> a
vSpace PaddedBox a n
self = forall {a} {n}. Num a => PaddedBox a n -> a
topSpace PaddedBox a n
self forall a. Num a => a -> a -> a
+ forall {a} {n}. Num a => PaddedBox a n -> a
bottomSpace PaddedBox a n
self
data Length = Pixels Double
| Percent Double
| Auto
| Preferred
| Min
deriving (Length -> Length -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: Length -> Length -> Bool
$c/= :: Length -> Length -> Bool
== :: Length -> Length -> Bool
$c== :: Length -> Length -> Bool
Eq, ReadPrec [Length]
ReadPrec Length
Int -> ReadS Length
ReadS [Length]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [Length]
$creadListPrec :: ReadPrec [Length]
readPrec :: ReadPrec Length
$creadPrec :: ReadPrec Length
readList :: ReadS [Length]
$creadList :: ReadS [Length]
readsPrec :: Int -> ReadS Length
$creadsPrec :: Int -> ReadS Length
Read, Int -> Length -> ShowS
[Length] -> ShowS
Length -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [Length] -> ShowS
$cshowList :: [Length] -> ShowS
show :: Length -> String
$cshow :: Length -> String
showsPrec :: Int -> Length -> ShowS
$cshowsPrec :: Int -> Length -> ShowS
Show, forall x. Rep Length x -> Length
forall x. Length -> Rep Length x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep Length x -> Length
$cfrom :: forall x. Length -> Rep Length x
Generic)
instance NFData Length
lowerLength :: Double -> Length -> Double
lowerLength :: Double -> Length -> Double
lowerLength Double
_ (Pixels Double
x) = Double
x
lowerLength Double
outerwidth (Percent Double
x) = Double
x forall a. Num a => a -> a -> a
* Double
outerwidth
lowerLength Double
_ Length
_ = Double
0
mapAuto :: Double -> Length -> Length
mapAuto Double
x Length
Auto = Double -> Length
Pixels Double
x
mapAuto Double
x Length
Preferred = Double -> Length
Pixels Double
x
mapAuto Double
x Length
Min = Double -> Length
Pixels Double
x
mapAuto Double
_ Length
x = Length
x
class Zero a where
zero :: a
instance Zero Double where zero :: Double
zero = Double
0
instance Zero Length where zero :: Length
zero = Double -> Length
Pixels Double
0
instance (Zero m, Zero n) => Zero (PaddedBox m n) where
zero :: PaddedBox m n
zero = PaddedBox {
min :: Size m n
min = forall m n. n -> m -> Size m n
Size forall a. Zero a => a
zero forall a. Zero a => a
zero,
max :: Size m n
max = forall m n. n -> m -> Size m n
Size forall a. Zero a => a
zero forall a. Zero a => a
zero,
nat :: Size Double Double
nat = forall m n. n -> m -> Size m n
Size Double
0 Double
0,
size :: Size m n
size = forall m n. n -> m -> Size m n
Size forall a. Zero a => a
zero forall a. Zero a => a
zero,
padding :: Border m n
padding = forall m n. m -> m -> n -> n -> Border m n
Border forall a. Zero a => a
zero forall a. Zero a => a
zero forall a. Zero a => a
zero forall a. Zero a => a
zero,
border :: Border m n
border = forall m n. m -> m -> n -> n -> Border m n
Border forall a. Zero a => a
zero forall a. Zero a => a
zero forall a. Zero a => a
zero forall a. Zero a => a
zero,
margin :: Border m n
margin = forall m n. m -> m -> n -> n -> Border m n
Border forall a. Zero a => a
zero forall a. Zero a => a
zero forall a. Zero a => a
zero forall a. Zero a => a
zero
}
instance (Zero m, Zero n) => Zero (Border m n) where
zero :: Border m n
zero = forall m n. m -> m -> n -> n -> Border m n
Border forall a. Zero a => a
zero forall a. Zero a => a
zero forall a. Zero a => a
zero forall a. Zero a => a
zero
class CastDouble a where
fromDouble :: Double -> a
toDouble :: a -> Double
instance CastDouble Double where
fromDouble :: Double -> Double
fromDouble = forall a. a -> a
id
toDouble :: Double -> Double
toDouble = forall a. a -> a
id
instance CastDouble Length where
fromDouble :: Double -> Length
fromDouble = Double -> Length
Pixels
toDouble :: Length -> Double
toDouble = Double -> Length -> Double
lowerLength Double
0