packages feed

simple-cairo-0.1.0.5: 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 = (`withCairoT` 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 cr@(CairoT fcr) = unsafeIOToPrim $ withForeignPtr fcr c_cairo_pop_group_to_source <* raiseIfError 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 (CairoT fcr) = unsafeIOToPrim $ makeCairoPatternT =<< withForeignPtr fcr c_cairo_pop_group