module Graphics.UI.SDL.TTF.Render
( tryRenderTextSolid
, renderTextSolid
, tryRenderUTF8Solid
, renderUTF8Solid
, tryRenderGlyphSolid
, renderGlyphSolid
, tryRenderTextShaded
, renderTextShaded
, tryRenderUTF8Shaded
, renderUTF8Shaded
, tryRenderGlyphShaded
, renderGlyphShaded
, tryRenderTextBlended
, renderTextBlended
, tryRenderUTF8Blended
, renderUTF8Blended
, tryRenderGlyphBlended
, renderGlyphBlended
) where
import Graphics.UI.SDL.TTF.Types
import Graphics.UI.SDL.General
import Graphics.UI.SDL.Video
import Graphics.UI.SDL.Color
import Graphics.UI.SDL.Types
import Foreign
import Foreign.C
import Data.Char
renderOneColor :: (Ptr FontStruct -> CString -> Ptr Color -> IO (Ptr SurfaceStruct))
-> Font -> String -> Color -> IO (Maybe Surface)
renderOneColor render font text color
= withForeignPtr font $ \fontPtr ->
withCString text $ \cString ->
with color $ \colorPtr ->
do image <- render fontPtr cString colorPtr
if image == nullPtr
then return Nothing
else fmap Just (mkFinalizedSurface image)
renderTwoColor :: (Ptr FontStruct -> CString -> Ptr Color -> Ptr Color -> IO (Ptr SurfaceStruct))
-> Font -> String -> Color -> Color -> IO (Maybe Surface)
renderTwoColor render font text color1 color2
= withForeignPtr font $ \fontPtr ->
withCString text $ \cString ->
with color1 $ \colorPtr1 ->
with color2 $ \colorPtr2 ->
do image <- render fontPtr cString colorPtr1 colorPtr2
if image == nullPtr
then return Nothing
else fmap Just (mkFinalizedSurface image)
foreign import ccall unsafe "renderTextSolid" ttfRenderTextSolid
:: Ptr FontStruct -> CString -> Ptr Color -> IO (Ptr SurfaceStruct)
tryRenderTextSolid :: Font -> String -> Color -> IO (Maybe Surface)
tryRenderTextSolid = renderOneColor ttfRenderTextSolid
renderTextSolid :: Font -> String -> Color -> IO Surface
renderTextSolid font text color
= unwrapMaybe "TTF_RenderText_Solid" (tryRenderTextSolid font text color)
foreign import ccall unsafe "renderUTF8Solid" ttfRenderUTF8Solid
:: Ptr FontStruct -> CString -> Ptr Color -> IO (Ptr SurfaceStruct)
tryRenderUTF8Solid :: Font -> String -> Color -> IO (Maybe Surface)
tryRenderUTF8Solid = renderOneColor ttfRenderUTF8Solid
renderUTF8Solid :: Font -> String -> Color -> IO Surface
renderUTF8Solid font text color
= unwrapMaybe "TTF_RenderUTF8_Solid" (tryRenderUTF8Solid font text color)
foreign import ccall unsafe "renderGlyphSolid" renderGlyphSolid
:: Ptr FontStruct -> Word16 -> Ptr Color -> IO (Ptr SurfaceStruct)
tryRenderGlyphSolid :: Font -> Char -> Color -> IO (Maybe Surface)
tryRenderGlyphSolid font ch fg
= withForeignPtr font $ \fontPtr ->
with fg $ \color ->
do image <- renderGlyphSolid fontPtr (fromIntegral (ord ch)) color
if image == nullPtr
then return Nothing
else fmap Just (mkFinalizedSurface image)
foreign import ccall unsafe "renderTextShaded" ttfRenderTextShaded
:: Ptr FontStruct -> CString -> Ptr Color -> Ptr Color -> IO (Ptr SurfaceStruct)
tryRenderTextShaded :: Font -> String -> Color -> Color -> IO (Maybe Surface)
tryRenderTextShaded = renderTwoColor ttfRenderTextShaded
renderTextShaded :: Font -> String -> Color -> Color -> IO Surface
renderTextShaded font text fg bg
= unwrapMaybe "TTF_RenderText_Shaded" (tryRenderTextShaded font text fg bg)
foreign import ccall unsafe "renderUTF8Shaded" ttfRenderUTF8Shaded
:: Ptr FontStruct -> CString -> Ptr Color -> Ptr Color -> IO (Ptr SurfaceStruct)
tryRenderUTF8Shaded :: Font -> String -> Color -> Color -> IO (Maybe Surface)
tryRenderUTF8Shaded = renderTwoColor ttfRenderUTF8Shaded
renderUTF8Shaded :: Font -> String -> Color -> Color -> IO Surface
renderUTF8Shaded font text fg bg
= unwrapMaybe "TTF_RenderUTF8_Shaded" (tryRenderUTF8Shaded font text fg bg)
foreign import ccall unsafe "renderGlyphShaded" renderGlyphShaded
:: Ptr FontStruct -> Word16 -> Ptr Color -> Ptr Color -> IO (Ptr SurfaceStruct)
tryRenderGlyphShaded :: Font -> Char -> Color -> Color -> IO (Maybe Surface)
tryRenderGlyphShaded font ch fg bg
= withForeignPtr font $ \fontPtr ->
with fg $ \fgPtr ->
with bg $ \bgPtr ->
do image <- renderGlyphShaded fontPtr (fromIntegral (ord ch)) fgPtr bgPtr
if image == nullPtr
then return Nothing
else fmap Just (mkFinalizedSurface image)
foreign import ccall unsafe "renderTextBlended" ttfRenderTextBlended
:: Ptr FontStruct -> CString -> Ptr Color -> IO (Ptr SurfaceStruct)
tryRenderTextBlended :: Font -> String -> Color -> IO (Maybe Surface)
tryRenderTextBlended = renderOneColor ttfRenderTextBlended
renderTextBlended :: Font -> String -> Color -> IO Surface
renderTextBlended font text color
= unwrapMaybe "TTF_RenderText_Blended" (tryRenderTextBlended font text color)
foreign import ccall unsafe "renderUTF8Blended" ttfRenderUTF8Blended
:: Ptr FontStruct -> CString -> Ptr Color -> IO (Ptr SurfaceStruct)
tryRenderUTF8Blended :: Font -> String -> Color -> IO (Maybe Surface)
tryRenderUTF8Blended = renderOneColor ttfRenderUTF8Blended
renderUTF8Blended :: Font -> String -> Color -> IO Surface
renderUTF8Blended font text color
= unwrapMaybe "TTF_RenderUTF8_Blended" (tryRenderUTF8Blended font text color)
foreign import ccall unsafe "renderGlyphBlended" renderGlyphBlended
:: Ptr FontStruct -> Word16 -> Ptr Color -> IO (Ptr SurfaceStruct)
tryRenderGlyphBlended :: Font -> Char -> Color -> IO (Maybe Surface)
tryRenderGlyphBlended font ch fg
= withForeignPtr font $ \fontPtr ->
with fg $ \color ->
do image <- renderGlyphBlended fontPtr (fromIntegral (ord ch)) color
if image == nullPtr
then return Nothing
else fmap Just (mkFinalizedSurface image)