module Render where
import Foreign
import Point
import qualified Graphics.UI.SDL as SDL
import qualified Graphics.UI.SDL.TTF as TTF
type FontName = FilePath
renderChar :: FontName -> Size -> Char -> IO [Point]
renderChar fn size ch = do
font <- TTF.openFont fn size
Just textImage <- TTF.tryRenderGlyphSolid font ch white
let width = SDL.surfaceGetWidth textImage
height = SDL.surfaceGetHeight textImage
pixels <- SDL.surfaceGetPixels textImage
vals <- peekArray (width * height) (castPtr pixels)
let points = [ MkPoint x y | y <- [0..(height1)], x <- [0..(width1)] ]
return [ pt | (pt, v) <- points `zip` vals, v > (0 :: Word8) ]
white :: SDL.Color
white = SDL.Color 255 255 255
showPixels :: SDL.Surface -> IO String
showPixels surface = do
pixels <- SDL.surfaceGetPixels surface
let width = SDL.surfaceGetWidth surface
height = SDL.surfaceGetHeight surface
format = SDL.surfaceGetPixelFormat surface
bpp <- SDL.pixelFormatGetBytesPerPixel format
vals <- peekArray (fromEnum bpp * width * height) (castPtr pixels)
let part [] = []
part xs = let (r, rs) = splitAt width xs in (r:part rs)
return . unlines $ map (map (\x -> if x > (0 :: Word8) then '*' else ' ')) (part vals)