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

module Graphics.Cairo.Drawing.CairoT (
	-- * Basic
	cairoCreate,
	-- * Push and Pop Group
	cairoPushGroup, cairoPopGroup, cairoPopGroupToSource,
	-- * Set Source
	cairoSetSourceRgb, cairoSetSourceRgba, cairoSetSource, cairoSetSourceSurface,
	-- * Set Attribute
	cairoSetLineWidth,
	-- * Verb
	cairoFill, cairoMask, cairoPaint, cairoPaintWithAlpha,
	cairoStroke, cairoStrokePreserve, cairoStrokeExtents,
	) where

import Foreign.Ptr
import Foreign.ForeignPtr
import Control.Monad.Primitive

import Graphics.Cairo.Exception

import Graphics.Cairo.Drawing.CairoT.Basic
import Graphics.Cairo.Drawing.CairoT.Setting

import Data.CairoContext

import Graphics.Cairo.Drawing.CairoPatternT.Basic

foreign import ccall "cairo_push_group" c_cairo_push_group ::
	Ptr (CairoT r s) -> IO ()

cairoPushGroup :: PrimMonad m => CairoT r (PrimState m) -> m ()
cairoPushGroup :: forall (m :: * -> *) r.
PrimMonad m =>
CairoT r (PrimState m) -> m ()
cairoPushGroup = (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` Ptr (CairoT r (PrimState m)) -> IO ()
forall r s. Ptr (CairoT r s) -> IO ()
c_cairo_push_group)

foreign import ccall "cairo_pop_group_to_source" c_cairo_pop_group_to_source ::
	Ptr (CairoT r s) -> IO ()

cairoPopGroupToSource :: PrimMonad m => CairoT r (PrimState m) -> m ()
cairoPopGroupToSource :: forall (m :: * -> *) r.
PrimMonad m =>
CairoT r (PrimState m) -> m ()
cairoPopGroupToSource cr :: CairoT r (PrimState m)
cr@(CairoT ForeignPtr (CairoT r (PrimState m))
fcr) = IO () -> m ()
forall (m :: * -> *) a. PrimMonad m => IO a -> m a
unsafeIOToPrim (IO () -> m ()) -> IO () -> m ()
forall a b. (a -> b) -> a -> b
$ ForeignPtr (CairoT r (PrimState m))
-> (Ptr (CairoT r (PrimState m)) -> IO ()) -> IO ()
forall a b. ForeignPtr a -> (Ptr a -> IO b) -> IO b
withForeignPtr ForeignPtr (CairoT r (PrimState m))
fcr Ptr (CairoT r (PrimState m)) -> IO ()
forall r s. Ptr (CairoT r s) -> IO ()
c_cairo_pop_group_to_source IO () -> IO () -> IO ()
forall a b. IO a -> IO b -> IO a
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f a
<* CairoT r (PrimState m) -> IO ()
forall r s. CairoT r s -> IO ()
raiseIfError CairoT r (PrimState m)
cr

foreign import ccall "cairo_pop_group" c_cairo_pop_group ::
	Ptr (CairoT r s) -> IO (Ptr (CairoPatternT s))

cairoPopGroup :: PrimMonad m => CairoT r s -> m (CairoPatternT s)
cairoPopGroup :: forall (m :: * -> *) r s.
PrimMonad m =>
CairoT r s -> m (CairoPatternT s)
cairoPopGroup (CairoT ForeignPtr (CairoT r s)
fcr) = IO (CairoPatternT s) -> m (CairoPatternT s)
forall (m :: * -> *) a. PrimMonad m => IO a -> m a
unsafeIOToPrim (IO (CairoPatternT s) -> m (CairoPatternT s))
-> IO (CairoPatternT s) -> m (CairoPatternT s)
forall a b. (a -> b) -> a -> b
$ Ptr (CairoPatternT s) -> IO (CairoPatternT s)
forall s. Ptr (CairoPatternT s) -> IO (CairoPatternT s)
makeCairoPatternT (Ptr (CairoPatternT s) -> IO (CairoPatternT s))
-> IO (Ptr (CairoPatternT s)) -> IO (CairoPatternT s)
forall (m :: * -> *) a b. Monad m => (a -> m b) -> m a -> m b
=<< ForeignPtr (CairoT r s)
-> (Ptr (CairoT r s) -> IO (Ptr (CairoPatternT s)))
-> IO (Ptr (CairoPatternT s))
forall a b. ForeignPtr a -> (Ptr a -> IO b) -> IO b
withForeignPtr ForeignPtr (CairoT r s)
fcr Ptr (CairoT r s) -> IO (Ptr (CairoPatternT s))
forall r s. Ptr (CairoT r s) -> IO (Ptr (CairoPatternT s))
c_cairo_pop_group