packages feed

minilight-lua-0.1.0.0: src/MiniLight/FigureDSL.hs

{-# LANGUAGE OverloadedStrings #-}
module MiniLight.FigureDSL where

import Control.Monad
import qualified Data.Config.Font as Font
import qualified Data.Text as T
import Data.Word (Word8)
import MiniLight
import qualified SDL
import qualified SDL.Vect as Vect
import Foreign.Lua

data FigureDSL
  = Empty
  | Translate (Vect.V2 Int) FigureDSL
  | Clip (Vect.V2 Int) (Vect.V2 Int) FigureDSL
  | Picture FilePath
  | Text (Vect.V4 Word8) T.Text
  deriving (Show, Read)

instance Peekable FigureDSL where
  peek = fmap read . peek

instance Pushable FigureDSL where
  push = push . show

construct :: FigureDSL -> MiniLight (Maybe Figure)
construct dsl = case dsl of
  Empty           -> return $ Just emptyFigure
  Translate p fig -> fmap (fmap (translate p)) $ construct fig
  Clip p q fig ->
    fmap (fmap (clip (SDL.Rectangle (Vect.P p) q))) $ construct fig
  Picture path -> fmap Just $ picture path
  Text color t -> do
    font <- Font.loadFontFrom
      $ Font.Config (FontDescriptor "IPAGothic" (FontStyle False False)) 24 0
    fmap Just $ text font color t