content: 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' }
  -}
  