module Graphics.Proc.Lib.Typography.Display(
{-
	loadFont, text, textFont,
	getCurrentFont, onFont, setFontSize
-}
) where

{-
import Graphics.Rendering.FTGL
import Codec.Binary.UTF8.String

import Graphics.Proc.Core
import Graphics.Proc.Lib.Transform

loadFont :: String -> Pio Font
loadFont fontName = liftIO $ do
	font <- createTextureFont fontName
	fsetFontCharMap font (marshalCharMap EncodingUnicode)    
	return font

text :: String -> P2 -> Pio ()
text str p = do
	onFont $ \fontSpec -> 
				local $ do				
					translate p
					local $ do
						scale (fontSizeFactor fontSpec *^ (1, -1))					
						liftIO $ renderFont (fontCurrent fontSpec) (encodeString str) Side                        

fontSizeFactor fontSpec = fromIntegral (fontSize fontSpec) / fromIntegral (fontInitSize fontSpec)

textFont :: Font -> Int -> Pio ()
textFont font size = do
    modifyStatePio $ \st -> st { globalFont = Just (FontSpec font size size) }
    onFont $ \fontSpec -> liftIO $ do
        _ <- setFontFaceSize (fontCurrent fontSpec) size size
        return ()

-----------------------------------------------
-- Raw Fonts

getCurrentFont :: Pio (Maybe FontSpec)
getCurrentFont = readStatePio globalFont

onFont :: (FontSpec -> Pio ()) -> Pio ()
onFont act = do
	mfont <- getCurrentFont
	case mfont of
		Just font -> act font
		Nothing -> liftIO $ print "Font is not set"

setFontSize :: FontSpec -> Int -> Pio ()
setFontSize fontSpec size = modifyStatePio $ \st -> 
    	let font = globalFont st
            font' = fmap (\x -> x { fontSize = size }) font
        in  st { globalFont = font' }
-}