packages feed

geomancy-layout-0.1: src/Geomancy/Layout/Alignment.hs

module Geomancy.Layout.Alignment where

import Geomancy

-- | @left/center/right@ & @top/middle/bottom@
type Alignment = Vec2

leftTop :: Alignment
leftTop = vec2 Begin Begin

leftMiddle :: Alignment
leftMiddle = vec2 Begin Middle

leftBottom :: Alignment
leftBottom = vec2 Begin End

centerTop :: Alignment
centerTop = vec2 Middle Begin

center :: Alignment
center = vec2 Middle Middle

centerBottom :: Alignment
centerBottom = vec2 Middle End

rightTop :: Alignment
rightTop = vec2 End Begin

rightMiddle :: Alignment
rightMiddle = vec2 End Middle

rightBottom :: Alignment
rightBottom = vec2 End End

type Origin = Float

pattern Begin :: Origin
pattern Begin = 0.0

pattern Middle :: Origin
pattern Middle = 0.5

pattern End :: Origin
pattern End = 1.0

{- | Distribute size difference according to origin.

@
(before, after) = placeSize1d _origin size target
before + size + after === target

placeBegin = placeSize1d 0
(0.0, 1.0) = placeBegin 1.0 2.0

placeMiddle = placeSize1d 0.5
(1.0, 1.0) = placeMiddle 1.0 3.0

placeEnd = placeSize1d 1.0
(1.0, 0.0) = placeEnd 1.0 2.0
@
-}
{-# INLINE placeSize1d #-}
placeSize1d :: Origin -> Float -> Float -> (Float, Float)
placeSize1d origin size target = (before, after)
  where
    leftovers = target - size
    before = leftovers * origin
    after = leftovers - before