module Geomancy.Layout.Alignment where
import Geomancy
newtype Alignment = Alignment Vec2
deriving (Alignment -> Alignment -> Bool
(Alignment -> Alignment -> Bool)
-> (Alignment -> Alignment -> Bool) -> Eq Alignment
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: Alignment -> Alignment -> Bool
== :: Alignment -> Alignment -> Bool
$c/= :: Alignment -> Alignment -> Bool
/= :: Alignment -> Alignment -> Bool
Eq, Eq Alignment
Eq Alignment =>
(Alignment -> Alignment -> Ordering)
-> (Alignment -> Alignment -> Bool)
-> (Alignment -> Alignment -> Bool)
-> (Alignment -> Alignment -> Bool)
-> (Alignment -> Alignment -> Bool)
-> (Alignment -> Alignment -> Alignment)
-> (Alignment -> Alignment -> Alignment)
-> Ord Alignment
Alignment -> Alignment -> Bool
Alignment -> Alignment -> Ordering
Alignment -> Alignment -> Alignment
forall a.
Eq a =>
(a -> a -> Ordering)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> a)
-> (a -> a -> a)
-> Ord a
$ccompare :: Alignment -> Alignment -> Ordering
compare :: Alignment -> Alignment -> Ordering
$c< :: Alignment -> Alignment -> Bool
< :: Alignment -> Alignment -> Bool
$c<= :: Alignment -> Alignment -> Bool
<= :: Alignment -> Alignment -> Bool
$c> :: Alignment -> Alignment -> Bool
> :: Alignment -> Alignment -> Bool
$c>= :: Alignment -> Alignment -> Bool
>= :: Alignment -> Alignment -> Bool
$cmax :: Alignment -> Alignment -> Alignment
max :: Alignment -> Alignment -> Alignment
$cmin :: Alignment -> Alignment -> Alignment
min :: Alignment -> Alignment -> Alignment
Ord, Int -> Alignment -> ShowS
[Alignment] -> ShowS
Alignment -> String
(Int -> Alignment -> ShowS)
-> (Alignment -> String)
-> ([Alignment] -> ShowS)
-> Show Alignment
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> Alignment -> ShowS
showsPrec :: Int -> Alignment -> ShowS
$cshow :: Alignment -> String
show :: Alignment -> String
$cshowList :: [Alignment] -> ShowS
showList :: [Alignment] -> ShowS
Show)
deriving newtype (Integer -> Alignment
Alignment -> Alignment
Alignment -> Alignment -> Alignment
(Alignment -> Alignment -> Alignment)
-> (Alignment -> Alignment -> Alignment)
-> (Alignment -> Alignment -> Alignment)
-> (Alignment -> Alignment)
-> (Alignment -> Alignment)
-> (Alignment -> Alignment)
-> (Integer -> Alignment)
-> Num Alignment
forall a.
(a -> a -> a)
-> (a -> a -> a)
-> (a -> a -> a)
-> (a -> a)
-> (a -> a)
-> (a -> a)
-> (Integer -> a)
-> Num a
$c+ :: Alignment -> Alignment -> Alignment
+ :: Alignment -> Alignment -> Alignment
$c- :: Alignment -> Alignment -> Alignment
- :: Alignment -> Alignment -> Alignment
$c* :: Alignment -> Alignment -> Alignment
* :: Alignment -> Alignment -> Alignment
$cnegate :: Alignment -> Alignment
negate :: Alignment -> Alignment
$cabs :: Alignment -> Alignment
abs :: Alignment -> Alignment
$csignum :: Alignment -> Alignment
signum :: Alignment -> Alignment
$cfromInteger :: Integer -> Alignment
fromInteger :: Integer -> Alignment
Num)
leftTop :: Alignment
leftTop :: Alignment
leftTop = Vec2 -> Alignment
Alignment (Vec2 -> Alignment) -> Vec2 -> Alignment
forall a b. (a -> b) -> a -> b
$ Float -> Float -> Vec2
vec2 Float
Begin Float
Begin
leftMiddle :: Alignment
leftMiddle :: Alignment
leftMiddle = Vec2 -> Alignment
Alignment (Vec2 -> Alignment) -> Vec2 -> Alignment
forall a b. (a -> b) -> a -> b
$ Float -> Float -> Vec2
vec2 Float
Begin Float
Middle
leftBottom :: Alignment
leftBottom :: Alignment
leftBottom = Vec2 -> Alignment
Alignment (Vec2 -> Alignment) -> Vec2 -> Alignment
forall a b. (a -> b) -> a -> b
$ Float -> Float -> Vec2
vec2 Float
Begin Float
End
centerTop :: Alignment
centerTop :: Alignment
centerTop = Vec2 -> Alignment
Alignment (Vec2 -> Alignment) -> Vec2 -> Alignment
forall a b. (a -> b) -> a -> b
$ Float -> Float -> Vec2
vec2 Float
Middle Float
Begin
center :: Alignment
center :: Alignment
center = Vec2 -> Alignment
Alignment (Vec2 -> Alignment) -> Vec2 -> Alignment
forall a b. (a -> b) -> a -> b
$ Float -> Float -> Vec2
vec2 Float
Middle Float
Middle
centerBottom :: Alignment
centerBottom :: Alignment
centerBottom = Vec2 -> Alignment
Alignment (Vec2 -> Alignment) -> Vec2 -> Alignment
forall a b. (a -> b) -> a -> b
$ Float -> Float -> Vec2
vec2 Float
Middle Float
End
rightTop :: Alignment
rightTop :: Alignment
rightTop = Vec2 -> Alignment
Alignment (Vec2 -> Alignment) -> Vec2 -> Alignment
forall a b. (a -> b) -> a -> b
$ Float -> Float -> Vec2
vec2 Float
End Float
Begin
rightMiddle :: Alignment
rightMiddle :: Alignment
rightMiddle = Vec2 -> Alignment
Alignment (Vec2 -> Alignment) -> Vec2 -> Alignment
forall a b. (a -> b) -> a -> b
$ Float -> Float -> Vec2
vec2 Float
End Float
Middle
rightBottom :: Alignment
rightBottom :: Alignment
rightBottom = Vec2 -> Alignment
Alignment (Vec2 -> Alignment) -> Vec2 -> Alignment
forall a b. (a -> b) -> a -> b
$ Float -> Float -> Vec2
vec2 Float
End Float
End
type Origin = Float
pattern Begin :: Origin
pattern $mBegin :: forall {r}. Float -> ((# #) -> r) -> ((# #) -> r) -> r
$bBegin :: Float
Begin = 0.0
pattern Middle :: Origin
pattern $mMiddle :: forall {r}. Float -> ((# #) -> r) -> ((# #) -> r) -> r
$bMiddle :: Float
Middle = 0.5
pattern End :: Origin
pattern $mEnd :: forall {r}. Float -> ((# #) -> r) -> ((# #) -> r) -> r
$bEnd :: Float
End = 1.0
{-# INLINE placeSize1d #-}
placeSize1d :: Origin -> Float -> Float -> (Float, Float)
placeSize1d :: Float -> Float -> Float -> (Float, Float)
placeSize1d Float
origin Float
size Float
target = (Float
before, Float
after)
where
leftovers :: Float
leftovers = Float
target Float -> Float -> Float
forall a. Num a => a -> a -> a
- Float
size
before :: Float
before = Float
leftovers Float -> Float -> Float
forall a. Num a => a -> a -> a
* Float
origin
after :: Float
after = Float
leftovers Float -> Float -> Float
forall a. Num a => a -> a -> a
- Float
before