module Typograffiti.Glyph where
import Linear
data CharSize = CharSize
{ charSizeWidth :: Int
, charSizeHeight :: Int
, charSizeWidthDPI :: Int
, charSizeHeightDPI :: Int
} deriving (Show, Eq, Ord)
data GlyphSize = GlyphSizeByChar CharSize
| GlyphSizeInPixels Int Int
deriving (Show, Eq, Ord)
pixelWidth :: GlyphSize -> Float
pixelWidth (GlyphSizeInPixels w h)
| w == 0 = fromIntegral h
| otherwise = fromIntegral w
pixelWidth (GlyphSizeByChar (CharSize w h xdpi ydpi)) =
let dpi = if xdpi == 0 then ydpi else xdpi
sz = if w == 0 then h else w
in fromIntegral sz * fromIntegral dpi / 72
pixelHeight :: GlyphSize -> Float
pixelHeight (GlyphSizeInPixels w h)
| h == 0 = fromIntegral w
| otherwise = fromIntegral h
pixelHeight (GlyphSizeByChar (CharSize w h xdpi ydpi)) =
let dpi = if ydpi == 0 then xdpi else ydpi
sz = if h == 0 then w else h
in fromIntegral sz * fromIntegral dpi / 72
data GlyphMetrics = GlyphMetrics
{ glyphTexBB :: (V2 Int, V2 Int)
, glyphTexSize :: V2 Int
, glyphSize :: V2 Int
, glyphHoriBearing :: V2 Int
, glyphVertBearing :: V2 Int
, glyphAdvance :: V2 Int
} deriving (Show, Eq)