{-# LANGUAGE RecordWildCards #-}
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
data Border m n = Border {
Border m n -> m
top :: m, Border m n -> m
bottom :: m, Border m n -> n
left :: n, Border m n -> n
right :: n
} deriving Border m n -> Border m n -> Bool
(Border m n -> Border m n -> Bool)
-> (Border m n -> Border m n -> Bool) -> Eq (Border m n)
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
mapX :: (n -> nn) -> Border m n -> Border m nn
mapY :: (m -> mm) -> Border m n -> Border mm n
mapX :: (n -> nn) -> Border m n -> Border m nn
mapX cb :: n -> nn
cb self :: Border m n
self = Border m n
self { left :: nn
left = n -> nn
cb (n -> nn) -> n -> nn
forall a b. (a -> b) -> a -> b
$ Border m n -> n
forall m n. Border m n -> n
left Border m n
self, right :: nn
right = n -> nn
cb (n -> nn) -> n -> nn
forall a b. (a -> b) -> a -> b
$ Border m n -> n
forall m n. Border m n -> n
right Border m n
self }
mapY :: (m -> mm) -> Border m n -> Border mm n
mapY cb :: m -> mm
cb self :: Border m n
self = Border m n
self { top :: mm
top = m -> mm
cb (m -> mm) -> m -> mm
forall a b. (a -> b) -> a -> b
$ Border m n -> m
forall m n. Border m n -> m
top Border m n
self, bottom :: mm
bottom = m -> mm
cb (m -> mm) -> m -> mm
forall a b. (a -> b) -> a -> b
$ Border m n -> m
forall m n. Border m n -> m
bottom Border m n
self }
data Size m n = Size {Size m n -> n
inline :: n, Size m n -> m
block :: m} deriving (Size m n -> Size m n -> Bool
(Size m n -> Size m n -> Bool)
-> (Size m n -> Size m n -> Bool) -> Eq (Size m n)
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
[Size m n] -> ShowS
Size m n -> String
(Int -> Size m n -> ShowS)
-> (Size m n -> String) -> ([Size m n] -> ShowS) -> Show (Size m n)
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)
mapSizeY :: (m -> mm) -> Size m n -> Size mm n
mapSizeY :: (m -> mm) -> Size m n -> Size mm n
mapSizeY cb :: m -> mm
cb self :: Size m n
self = n -> mm -> Size mm n
forall m n. n -> m -> Size m n
Size (Size m n -> n
forall m n. Size m n -> n
inline Size m n
self) (m -> mm
cb (m -> mm) -> m -> mm
forall a b. (a -> b) -> a -> b
$ Size m n -> m
forall m n. Size m n -> m
block Size m n
self)
mapSizeX :: (n -> nn) -> Size m n -> Size m nn
mapSizeX :: (n -> nn) -> Size m n -> Size m nn
mapSizeX cb :: n -> nn
cb self :: Size m n
self = nn -> m -> Size m nn
forall m n. n -> m -> Size m n
Size (n -> nn
cb (n -> nn) -> n -> nn
forall a b. (a -> b) -> a -> b
$ Size m n -> n
forall m n. Size m n -> n
inline Size m n
self) (Size m n -> m
forall m n. Size m n -> m
block Size m n
self)
data PaddedBox m n = PaddedBox {
PaddedBox m n -> Size m n
min :: Size m n,
PaddedBox m n -> Size m n
max :: Size m n,
PaddedBox m n -> Size Double Double
nat :: Size Double Double,
PaddedBox m n -> Size m n
size :: Size m n,
PaddedBox m n -> Border m n
padding :: Border m n,
PaddedBox m n -> Border m n
border :: Border m n,
PaddedBox m n -> Border m n
margin :: Border m n
} deriving PaddedBox m n -> PaddedBox m n -> Bool
(PaddedBox m n -> PaddedBox m n -> Bool)
-> (PaddedBox m n -> PaddedBox m n -> Bool) -> Eq (PaddedBox m n)
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
zeroBox :: PaddedBox Double Double
zeroBox :: PaddedBox Double Double
zeroBox = PaddedBox :: forall m n.
Size m n
-> Size m n
-> Size Double Double
-> Size m n
-> Border m n
-> Border m n
-> Border m n
-> PaddedBox m n
PaddedBox {
min :: Size Double Double
min = Double -> Double -> Size Double Double
forall m n. n -> m -> Size m n
Size 0 0,
max :: Size Double Double
max = Double -> Double -> Size Double Double
forall m n. n -> m -> Size m n
Size 0 0,
nat :: Size Double Double
nat = Double -> Double -> Size Double Double
forall m n. n -> m -> Size m n
Size 0 0,
size :: Size Double Double
size = Double -> Double -> Size Double Double
forall m n. n -> m -> Size m n
Size 0 0,
padding :: Border Double Double
padding = Double -> Double -> Double -> Double -> Border Double Double
forall m n. m -> m -> n -> n -> Border m n
Border 0 0 0 0,
border :: Border Double Double
border = Double -> Double -> Double -> Double -> Border Double Double
forall m n. m -> m -> n -> n -> Border m n
Border 0 0 0 0,
margin :: Border Double Double
margin = Double -> Double -> Double -> Double -> Border Double Double
forall m n. m -> m -> n -> n -> Border m n
Border 0 0 0 0
}
lengthBox :: PaddedBox Length Length
lengthBox :: PaddedBox Length Length
lengthBox = PaddedBox :: forall m n.
Size m n
-> Size m n
-> Size Double Double
-> Size m n
-> Border m n
-> Border m n
-> Border m n
-> PaddedBox m n
PaddedBox {
min :: Size Length Length
min = Length -> Length -> Size Length Length
forall m n. n -> m -> Size m n
Size Length
Auto Length
Auto,
max :: Size Length Length
max = Length -> Length -> Size Length Length
forall m n. n -> m -> Size m n
Size Length
Auto Length
Auto,
nat :: Size Double Double
nat = Double -> Double -> Size Double Double
forall m n. n -> m -> Size m n
Size 0 0,
size :: Size Length Length
size = Length -> Length -> Size Length Length
forall m n. n -> m -> Size m n
Size Length
Auto Length
Auto,
padding :: Border Length Length
padding = Length -> Length -> Length -> Length -> Border Length Length
forall m n. m -> m -> n -> n -> Border m n
Border Length
forall a. Zero a => a
zero Length
forall a. Zero a => a
zero Length
forall a. Zero a => a
zero Length
forall a. Zero a => a
zero,
border :: Border Length Length
border = Length -> Length -> Length -> Length -> Border Length Length
forall m n. m -> m -> n -> n -> Border m n
Border Length
forall a. Zero a => a
zero Length
forall a. Zero a => a
zero Length
forall a. Zero a => a
zero Length
forall a. Zero a => a
zero,
margin :: Border Length Length
margin = Length -> Length -> Length -> Length -> Border Length Length
forall m n. m -> m -> n -> n -> Border m n
Border Length
forall a. Zero a => a
zero Length
forall a. Zero a => a
zero Length
forall a. Zero a => a
zero Length
forall a. Zero a => a
zero
}
mapX' :: (n -> nn) -> PaddedBox m n -> PaddedBox m nn
mapX' :: (n -> nn) -> PaddedBox m n -> PaddedBox m nn
mapX' cb :: n -> nn
cb PaddedBox {..} = PaddedBox :: forall m n.
Size m n
-> Size m n
-> Size Double Double
-> Size m n
-> Border m n
-> Border m n
-> Border m n
-> PaddedBox m n
PaddedBox {
min :: Size m nn
min = nn -> m -> Size m nn
forall m n. n -> m -> Size m n
Size (n -> nn
cb (n -> nn) -> n -> nn
forall a b. (a -> b) -> a -> b
$ Size m n -> n
forall m n. Size m n -> n
inline Size m n
min) (Size m n -> m
forall m n. Size m n -> m
block Size m n
min),
size :: Size m nn
size = nn -> m -> Size m nn
forall m n. n -> m -> Size m n
Size (n -> nn
cb (n -> nn) -> n -> nn
forall a b. (a -> b) -> a -> b
$ Size m n -> n
forall m n. Size m n -> n
inline Size m n
size) (Size m n -> m
forall m n. Size m n -> m
block Size m n
size),
nat :: Size Double Double
nat = Double -> Double -> Size Double Double
forall m n. n -> m -> Size m n
Size 0 0,
max :: Size m nn
max = nn -> m -> Size m nn
forall m n. n -> m -> Size m n
Size (n -> nn
cb (n -> nn) -> n -> nn
forall a b. (a -> b) -> a -> b
$ Size m n -> n
forall m n. Size m n -> n
inline Size m n
max) (Size m n -> m
forall m n. Size m n -> m
block Size m n
max),
padding :: Border m nn
padding = (n -> nn) -> Border m n -> Border m nn
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 = (n -> nn) -> Border m n -> Border m nn
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 = (n -> nn) -> Border m n -> Border m nn
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' :: (m -> mm) -> PaddedBox m n -> PaddedBox mm n
mapY' cb :: m -> mm
cb PaddedBox {..} = PaddedBox :: forall m n.
Size m n
-> Size m n
-> Size Double Double
-> Size m n
-> Border m n
-> Border m n
-> Border m n
-> PaddedBox m n
PaddedBox {
min :: Size mm n
min = n -> mm -> Size mm n
forall m n. n -> m -> Size m n
Size (Size m n -> n
forall m n. Size m n -> n
inline Size m n
min) (m -> mm
cb (m -> mm) -> m -> mm
forall a b. (a -> b) -> a -> b
$ Size m n -> m
forall m n. Size m n -> m
block Size m n
min),
size :: Size mm n
size = n -> mm -> Size mm n
forall m n. n -> m -> Size m n
Size (Size m n -> n
forall m n. Size m n -> n
inline Size m n
size) (m -> mm
cb (m -> mm) -> m -> mm
forall a b. (a -> b) -> a -> b
$ Size m n -> m
forall m n. Size m n -> m
block Size m n
size),
nat :: Size Double Double
nat = Double -> Double -> Size Double Double
forall m n. n -> m -> Size m n
Size 0 0,
max :: Size mm n
max = n -> mm -> Size mm n
forall m n. n -> m -> Size m n
Size (Size m n -> n
forall m n. Size m n -> n
inline Size m n
max) (m -> mm
cb (m -> mm) -> m -> mm
forall a b. (a -> b) -> a -> b
$ Size m n -> m
forall m n. Size m n -> m
block Size m n
max),
padding :: Border mm n
padding = (m -> mm) -> Border m n -> Border mm n
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 = (m -> mm) -> Border m n -> Border mm n
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 = (m -> mm) -> Border m n -> Border mm n
forall m mm n. (m -> mm) -> Border m n -> Border mm n
mapY m -> mm
cb Border m n
margin
}
width :: PaddedBox m n -> n
width PaddedBox {..} = Border m n -> n
forall m n. Border m n -> n
left Border m n
margin n -> n -> n
forall a. Num a => a -> a -> a
+ Border m n -> n
forall m n. Border m n -> n
left Border m n
border n -> n -> n
forall a. Num a => a -> a -> a
+ Border m n -> n
forall m n. Border m n -> n
left Border m n
padding n -> n -> n
forall a. Num a => a -> a -> a
+
Size m n -> n
forall m n. Size m n -> n
inline Size m n
size n -> n -> n
forall a. Num a => a -> a -> a
+ Border m n -> n
forall m n. Border m n -> n
right Border m n
padding n -> n -> n
forall a. Num a => a -> a -> a
+ Border m n -> n
forall m n. Border m n -> n
right Border m n
border n -> n -> n
forall a. Num a => a -> a -> a
+ Border m n -> n
forall m n. Border m n -> n
right Border m n
margin
height :: PaddedBox m n -> m
height PaddedBox {..} = Border m n -> m
forall m n. Border m n -> m
top Border m n
margin m -> m -> m
forall a. Num a => a -> a -> a
+ Border m n -> m
forall m n. Border m n -> m
top Border m n
border m -> m -> m
forall a. Num a => a -> a -> a
+ Border m n -> m
forall m n. Border m n -> m
top Border m n
padding m -> m -> m
forall a. Num a => a -> a -> a
+
Size m n -> m
forall m n. Size m n -> m
block Size m n
size m -> m -> m
forall a. Num a => a -> a -> a
+ Border m n -> m
forall m n. Border m n -> m
bottom Border m n
padding m -> m -> m
forall a. Num a => a -> a -> a
+ Border m n -> m
forall m n. Border m n -> m
bottom Border m n
border m -> m -> m
forall a. Num a => a -> a -> a
+ Border m n -> m
forall m n. Border m n -> m
bottom Border m n
margin
minWidth :: PaddedBox m n -> n
minWidth PaddedBox {..} = Border m n -> n
forall m n. Border m n -> n
left Border m n
margin n -> n -> n
forall a. Num a => a -> a -> a
+ Border m n -> n
forall m n. Border m n -> n
left Border m n
border n -> n -> n
forall a. Num a => a -> a -> a
+ Border m n -> n
forall m n. Border m n -> n
left Border m n
padding n -> n -> n
forall a. Num a => a -> a -> a
+
Size m n -> n
forall m n. Size m n -> n
inline Size m n
min n -> n -> n
forall a. Num a => a -> a -> a
+ Border m n -> n
forall m n. Border m n -> n
right Border m n
padding n -> n -> n
forall a. Num a => a -> a -> a
+ Border m n -> n
forall m n. Border m n -> n
right Border m n
border n -> n -> n
forall a. Num a => a -> a -> a
+ Border m n -> n
forall m n. Border m n -> n
right Border m n
margin
minHeight :: PaddedBox m n -> m
minHeight PaddedBox {..} = Border m n -> m
forall m n. Border m n -> m
top Border m n
margin m -> m -> m
forall a. Num a => a -> a -> a
+ Border m n -> m
forall m n. Border m n -> m
top Border m n
border m -> m -> m
forall a. Num a => a -> a -> a
+ Border m n -> m
forall m n. Border m n -> m
top Border m n
padding m -> m -> m
forall a. Num a => a -> a -> a
+
Size m n -> m
forall m n. Size m n -> m
block Size m n
min m -> m -> m
forall a. Num a => a -> a -> a
+ Border m n -> m
forall m n. Border m n -> m
bottom Border m n
padding m -> m -> m
forall a. Num a => a -> a -> a
+ Border m n -> m
forall m n. Border m n -> m
bottom Border m n
border m -> m -> m
forall a. Num a => a -> a -> a
+ Border m n -> m
forall m n. Border m n -> m
bottom Border m n
margin
maxWidth :: PaddedBox m n -> n
maxWidth PaddedBox {..} = Border m n -> n
forall m n. Border m n -> n
left Border m n
margin n -> n -> n
forall a. Num a => a -> a -> a
+ Border m n -> n
forall m n. Border m n -> n
left Border m n
border n -> n -> n
forall a. Num a => a -> a -> a
+ Border m n -> n
forall m n. Border m n -> n
left Border m n
padding n -> n -> n
forall a. Num a => a -> a -> a
+
Size m n -> n
forall m n. Size m n -> n
inline Size m n
max n -> n -> n
forall a. Num a => a -> a -> a
+ Border m n -> n
forall m n. Border m n -> n
right Border m n
padding n -> n -> n
forall a. Num a => a -> a -> a
+ Border m n -> n
forall m n. Border m n -> n
right Border m n
border n -> n -> n
forall a. Num a => a -> a -> a
+ Border m n -> n
forall m n. Border m n -> n
right Border m n
margin
maxHeight :: PaddedBox m n -> m
maxHeight PaddedBox {..} = Border m n -> m
forall m n. Border m n -> m
top Border m n
margin m -> m -> m
forall a. Num a => a -> a -> a
+ Border m n -> m
forall m n. Border m n -> m
top Border m n
border m -> m -> m
forall a. Num a => a -> a -> a
+ Border m n -> m
forall m n. Border m n -> m
top Border m n
padding m -> m -> m
forall a. Num a => a -> a -> a
+
Size m n -> m
forall m n. Size m n -> m
block Size m n
max m -> m -> m
forall a. Num a => a -> a -> a
+ Border m n -> m
forall m n. Border m n -> m
bottom Border m n
padding m -> m -> m
forall a. Num a => a -> a -> a
+ Border m n -> m
forall m n. Border m n -> m
bottom Border m n
border m -> m -> m
forall a. Num a => a -> a -> a
+ Border m n -> m
forall m n. Border m n -> m
bottom Border m n
margin
leftSpace :: PaddedBox m n -> n
leftSpace PaddedBox {..} = Border m n -> n
forall m n. Border m n -> n
left Border m n
margin n -> n -> n
forall a. Num a => a -> a -> a
+ Border m n -> n
forall m n. Border m n -> n
left Border m n
border n -> n -> n
forall a. Num a => a -> a -> a
+ Border m n -> n
forall m n. Border m n -> n
left Border m n
padding
rightSpace :: PaddedBox m n -> n
rightSpace PaddedBox {..} = Border m n -> n
forall m n. Border m n -> n
right Border m n
margin n -> n -> n
forall a. Num a => a -> a -> a
+ Border m n -> n
forall m n. Border m n -> n
right Border m n
border n -> n -> n
forall a. Num a => a -> a -> a
+ Border m n -> n
forall m n. Border m n -> n
right Border m n
padding
topSpace :: PaddedBox m n -> m
topSpace PaddedBox {..} = Border m n -> m
forall m n. Border m n -> m
top Border m n
margin m -> m -> m
forall a. Num a => a -> a -> a
+ Border m n -> m
forall m n. Border m n -> m
top Border m n
border m -> m -> m
forall a. Num a => a -> a -> a
+ Border m n -> m
forall m n. Border m n -> m
top Border m n
padding
bottomSpace :: PaddedBox m n -> m
bottomSpace PaddedBox {..} = Border m n -> m
forall m n. Border m n -> m
bottom Border m n
margin m -> m -> m
forall a. Num a => a -> a -> a
+ Border m n -> m
forall m n. Border m n -> m
bottom Border m n
border m -> m -> m
forall a. Num a => a -> a -> a
+ Border m n -> m
forall m n. Border m n -> m
bottom Border m n
padding
hSpace :: PaddedBox m n -> n
hSpace self :: PaddedBox m n
self = PaddedBox m n -> n
forall n m. Num n => PaddedBox m n -> n
leftSpace PaddedBox m n
self n -> n -> n
forall a. Num a => a -> a -> a
+ PaddedBox m n -> n
forall n m. Num n => PaddedBox m n -> n
rightSpace PaddedBox m n
self
vSpace :: PaddedBox m n -> m
vSpace self :: PaddedBox m n
self = PaddedBox m n -> m
forall m n. Num m => PaddedBox m n -> m
topSpace PaddedBox m n
self m -> m -> m
forall a. Num a => a -> a -> a
+ PaddedBox m n -> m
forall m n. Num m => PaddedBox m n -> m
bottomSpace PaddedBox m n
self
data Length = Pixels Double
| Percent Double
| Auto
| Preferred
| Min
deriving Length -> Length -> Bool
(Length -> Length -> Bool)
-> (Length -> Length -> Bool) -> Eq Length
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
lowerLength :: Double -> Length -> Double
lowerLength :: Double -> Length -> Double
lowerLength _ (Pixels x :: Double
x) = Double
x
lowerLength outerwidth :: Double
outerwidth (Percent x :: Double
x) = Double
x Double -> Double -> Double
forall a. Num a => a -> a -> a
* Double
outerwidth
lowerLength _ _ = 0
mapAuto :: Double -> Length -> Length
mapAuto x :: Double
x Auto = Double -> Length
Pixels Double
x
mapAuto x :: Double
x Preferred = Double -> Length
Pixels Double
x
mapAuto x :: Double
x Min = Double -> Length
Pixels Double
x
mapAuto _ x :: Length
x = Length
x
class Zero a where
zero :: a
instance Zero Double where zero :: Double
zero = 0
instance Zero Length where zero :: Length
zero = Double -> Length
Pixels 0
instance (Zero m, Zero n) => Zero (PaddedBox m n) where
zero :: PaddedBox m n
zero = PaddedBox :: forall m n.
Size m n
-> Size m n
-> Size Double Double
-> Size m n
-> Border m n
-> Border m n
-> Border m n
-> PaddedBox m n
PaddedBox {
min :: Size m n
min = n -> m -> Size m n
forall m n. n -> m -> Size m n
Size n
forall a. Zero a => a
zero m
forall a. Zero a => a
zero,
max :: Size m n
max = n -> m -> Size m n
forall m n. n -> m -> Size m n
Size n
forall a. Zero a => a
zero m
forall a. Zero a => a
zero,
nat :: Size Double Double
nat = Double -> Double -> Size Double Double
forall m n. n -> m -> Size m n
Size 0 0,
size :: Size m n
size = n -> m -> Size m n
forall m n. n -> m -> Size m n
Size n
forall a. Zero a => a
zero m
forall a. Zero a => a
zero,
padding :: Border m n
padding = m -> m -> n -> n -> Border m n
forall m n. m -> m -> n -> n -> Border m n
Border m
forall a. Zero a => a
zero m
forall a. Zero a => a
zero n
forall a. Zero a => a
zero n
forall a. Zero a => a
zero,
border :: Border m n
border = m -> m -> n -> n -> Border m n
forall m n. m -> m -> n -> n -> Border m n
Border m
forall a. Zero a => a
zero m
forall a. Zero a => a
zero n
forall a. Zero a => a
zero n
forall a. Zero a => a
zero,
margin :: Border m n
margin = m -> m -> n -> n -> Border m n
forall m n. m -> m -> n -> n -> Border m n
Border m
forall a. Zero a => a
zero m
forall a. Zero a => a
zero n
forall a. Zero a => a
zero n
forall a. Zero a => a
zero
}
class CastDouble a where
fromDouble :: Double -> a
toDouble :: a -> Double
instance CastDouble Double where
fromDouble :: Double -> Double
fromDouble = Double -> Double
forall a. a -> a
id
toDouble :: Double -> Double
toDouble = Double -> Double
forall a. a -> a
id
instance CastDouble Length where
fromDouble :: Double -> Length
fromDouble = Double -> Length
Pixels
toDouble :: Length -> Double
toDouble = Double -> Length -> Double
lowerLength 0