{-# LINE 1 "src/Graphics/Cairo/Drawing/Text.hsc" #-}
{-# LANGUAGE BlockArguments #-}
{-# OPTIONS_GHC -Wall -fno-warn-tabs #-}

module Graphics.Cairo.Drawing.Text (
	cairoSelectFontFace, cairoSetFontSize, cairoShowText, cairoTextExtents
	) where

import Foreign.Ptr
import Foreign.Marshal
import Foreign.Storable
import Foreign.C
import Control.Monad.Primitive
import Data.Word

import qualified Data.ByteString as BS
import qualified Data.Text as T
import qualified Data.Text.Encoding as T

import Graphics.Cairo.Types
import Graphics.Cairo.Values

import Data.CairoContext



foreign import ccall "cairo_select_font_face" c_cairo_select_font_face ::
	Ptr (CairoT r s) -> CString ->
	Word32 -> Word32 -> IO ()
{-# LINE 29 "src/Graphics/Cairo/Drawing/Text.hsc" #-}

cairoSelectFontFace :: PrimMonad m =>
	CairoT r (PrimState m) -> T.Text -> CairoFontSlantT -> CairoFontWeightT -> m ()
cairoSelectFontFace :: forall (m :: * -> *) r.
PrimMonad m =>
CairoT r (PrimState m)
-> Text -> CairoFontSlantT -> CairoFontWeightT -> m ()
cairoSelectFontFace CairoT r (PrimState m)
cr Text
ff (CairoFontSlantT Word32
sl) (CairoFontWeightT Word32
wt) =
	CairoT r (PrimState m)
-> (Ptr (CairoT r (PrimState m)) -> IO ()) -> m ()
forall (m :: * -> *) r a.
PrimMonad m =>
CairoT r (PrimState m)
-> (Ptr (CairoT r (PrimState m)) -> IO a) -> m a
withCairoT CairoT r (PrimState m)
cr \Ptr (CairoT r (PrimState m))
pcr -> Text -> (CString -> IO ()) -> IO ()
forall a. Text -> (CString -> IO a) -> IO a
encode Text
ff \CString
cs ->
		Ptr (CairoT r (PrimState m))
-> CString -> Word32 -> Word32 -> IO ()
forall r s.
Ptr (CairoT r s) -> CString -> Word32 -> Word32 -> IO ()
c_cairo_select_font_face Ptr (CairoT r (PrimState m))
pcr CString
cs Word32
sl Word32
wt

foreign import ccall "cairo_set_font_size" c_cairo_set_font_size ::
	Ptr (CairoT r s) -> Double -> IO ()
{-# LINE 38 "src/Graphics/Cairo/Drawing/Text.hsc" #-}

cairoSetFontSize :: PrimMonad m => CairoT r (PrimState m) -> Double -> m ()
{-# LINE 40 "src/Graphics/Cairo/Drawing/Text.hsc" #-}
cairoSetFontSize cr fs = withCairoT cr \pcr -> c_cairo_set_font_size pcr fs

foreign import ccall "cairo_text_extents" c_cairo_text_extents ::
	Ptr (CairoT r s) -> CString -> Ptr CairoTextExtentsT -> IO ()

cairoTextExtents :: PrimMonad m => CairoT r (PrimState m) -> T.Text -> m CairoTextExtentsT
cairoTextExtents :: forall (m :: * -> *) r.
PrimMonad m =>
CairoT r (PrimState m) -> Text -> m CairoTextExtentsT
cairoTextExtents CairoT r (PrimState m)
cr Text
t = CairoT r (PrimState m)
-> (Ptr (CairoT r (PrimState m)) -> IO CairoTextExtentsT)
-> m CairoTextExtentsT
forall (m :: * -> *) r a.
PrimMonad m =>
CairoT r (PrimState m)
-> (Ptr (CairoT r (PrimState m)) -> IO a) -> m a
withCairoT CairoT r (PrimState m)
cr \Ptr (CairoT r (PrimState m))
pcr ->
	Text -> (CString -> IO CairoTextExtentsT) -> IO CairoTextExtentsT
forall a. Text -> (CString -> IO a) -> IO a
encode Text
t \CString
cs -> (Ptr CairoTextExtentsT -> IO CairoTextExtentsT)
-> IO CairoTextExtentsT
forall a b. Storable a => (Ptr a -> IO b) -> IO b
alloca \Ptr CairoTextExtentsT
p -> Ptr (CairoT r (PrimState m))
-> CString -> Ptr CairoTextExtentsT -> IO ()
forall r s.
Ptr (CairoT r s) -> CString -> Ptr CairoTextExtentsT -> IO ()
c_cairo_text_extents Ptr (CairoT r (PrimState m))
pcr CString
cs Ptr CairoTextExtentsT
p IO () -> IO CairoTextExtentsT -> IO CairoTextExtentsT
forall a b. IO a -> IO b -> IO b
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> Ptr CairoTextExtentsT -> IO CairoTextExtentsT
forall a. Storable a => Ptr a -> IO a
peek Ptr CairoTextExtentsT
p

encode :: T.Text -> (CString -> IO a) -> IO a
encode :: forall a. Text -> (CString -> IO a) -> IO a
encode Text
t = ByteString -> (CString -> IO a) -> IO a
forall a. ByteString -> (CString -> IO a) -> IO a
BS.useAsCString (ByteString -> (CString -> IO a) -> IO a)
-> ByteString -> (CString -> IO a) -> IO a
forall a b. (a -> b) -> a -> b
$ Text -> ByteString
T.encodeUtf8 Text
t

foreign import ccall "cairo_show_text" c_cairo_show_text ::
	Ptr (CairoT r s) -> CString -> IO ()

cairoShowText :: PrimMonad m => CairoT r (PrimState m) -> T.Text -> m ()
cairoShowText :: forall (m :: * -> *) r.
PrimMonad m =>
CairoT r (PrimState m) -> Text -> m ()
cairoShowText CairoT r (PrimState m)
cr Text
t = CairoT r (PrimState m)
-> (Ptr (CairoT r (PrimState m)) -> IO ()) -> m ()
forall (m :: * -> *) r a.
PrimMonad m =>
CairoT r (PrimState m)
-> (Ptr (CairoT r (PrimState m)) -> IO a) -> m a
withCairoT CairoT r (PrimState m)
cr \Ptr (CairoT r (PrimState m))
pcr -> Text -> (CString -> IO ()) -> IO ()
forall a. Text -> (CString -> IO a) -> IO a
encode Text
t \CString
cs -> Ptr (CairoT r (PrimState m)) -> CString -> IO ()
forall r s. Ptr (CairoT r s) -> CString -> IO ()
c_cairo_show_text Ptr (CairoT r (PrimState m))
pcr CString
cs