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

module Graphics.Cairo.Drawing.Regions where

import Foreign.Ptr
import Foreign.ForeignPtr hiding (newForeignPtr)
import Foreign.Concurrent
import Foreign.C.Types
import Control.Monad.Primitive

import Graphics.Cairo.Exception
import Graphics.Cairo.Utilities.Types



newtype CairoRegionT s = CairoRegionT (ForeignPtr (CairoRegionT s)) deriving Int -> CairoRegionT s -> ShowS
[CairoRegionT s] -> ShowS
CairoRegionT s -> String
(Int -> CairoRegionT s -> ShowS)
-> (CairoRegionT s -> String)
-> ([CairoRegionT s] -> ShowS)
-> Show (CairoRegionT s)
forall s. Int -> CairoRegionT s -> ShowS
forall s. [CairoRegionT s] -> ShowS
forall s. CairoRegionT s -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: forall s. Int -> CairoRegionT s -> ShowS
showsPrec :: Int -> CairoRegionT s -> ShowS
$cshow :: forall s. CairoRegionT s -> String
show :: CairoRegionT s -> String
$cshowList :: forall s. [CairoRegionT s] -> ShowS
showList :: [CairoRegionT s] -> ShowS
Show

makeCairoRegionT :: Ptr (CairoRegionT s) -> IO (CairoRegionT s)
makeCairoRegionT :: forall s. Ptr (CairoRegionT s) -> IO (CairoRegionT s)
makeCairoRegionT Ptr (CairoRegionT s)
p = ForeignPtr (CairoRegionT s) -> CairoRegionT s
forall s. ForeignPtr (CairoRegionT s) -> CairoRegionT s
CairoRegionT (ForeignPtr (CairoRegionT s) -> CairoRegionT s)
-> IO (ForeignPtr (CairoRegionT s)) -> IO (CairoRegionT s)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Ptr (CairoRegionT s) -> IO () -> IO (ForeignPtr (CairoRegionT s))
forall a. Ptr a -> IO () -> IO (ForeignPtr a)
newForeignPtr Ptr (CairoRegionT s)
p (Ptr (CairoRegionT s) -> IO ()
forall s. Ptr (CairoRegionT s) -> IO ()
c_cairo_region_destroy Ptr (CairoRegionT s)
p)

foreign import ccall "cairo_region_destroy" c_cairo_region_destroy ::
	Ptr (CairoRegionT s) -> IO ()

foreign import ccall "cairo_region_create" c_cairo_region_create :: IO (Ptr (CairoRegionT s))

cairoRegionCreate :: PrimMonad m => m (CairoRegionT (PrimState m))
cairoRegionCreate :: forall (m :: * -> *). PrimMonad m => m (CairoRegionT (PrimState m))
cairoRegionCreate = IO (CairoRegionT (PrimState m)) -> m (CairoRegionT (PrimState m))
forall (m :: * -> *) a. PrimMonad m => IO a -> m a
unsafeIOToPrim do
	r <- Ptr (CairoRegionT (PrimState m)) -> IO (CairoRegionT (PrimState m))
forall s. Ptr (CairoRegionT s) -> IO (CairoRegionT s)
makeCairoRegionT (Ptr (CairoRegionT (PrimState m))
 -> IO (CairoRegionT (PrimState m)))
-> IO (Ptr (CairoRegionT (PrimState m)))
-> IO (CairoRegionT (PrimState m))
forall (m :: * -> *) a b. Monad m => (a -> m b) -> m a -> m b
=<< IO (Ptr (CairoRegionT (PrimState m)))
forall s. IO (Ptr (CairoRegionT s))
c_cairo_region_create
	r <$ raiseIfErrorRegion r

foreign import ccall "cairo_region_create_rectangle" c_cairo_region_create_rectangle ::
	Ptr CairoRectangleIntT -> IO (Ptr (CairoRegionT s))

cairoRegionCreateRectangle :: PrimMonad m => CairoRectangleIntT -> m (CairoRegionT (PrimState m))
cairoRegionCreateRectangle :: forall (m :: * -> *).
PrimMonad m =>
CairoRectangleIntT -> m (CairoRegionT (PrimState m))
cairoRegionCreateRectangle (CairoRectangleIntT_ ForeignPtr CairoRectangleIntT
fr) = IO (CairoRegionT (PrimState m)) -> m (CairoRegionT (PrimState m))
forall (m :: * -> *) a. PrimMonad m => IO a -> m a
unsafeIOToPrim (IO (CairoRegionT (PrimState m)) -> m (CairoRegionT (PrimState m)))
-> IO (CairoRegionT (PrimState m))
-> m (CairoRegionT (PrimState m))
forall a b. (a -> b) -> a -> b
$ ForeignPtr CairoRectangleIntT
-> (Ptr CairoRectangleIntT -> IO (CairoRegionT (PrimState m)))
-> IO (CairoRegionT (PrimState m))
forall a b. ForeignPtr a -> (Ptr a -> IO b) -> IO b
withForeignPtr ForeignPtr CairoRectangleIntT
fr \Ptr CairoRectangleIntT
prct -> do
	r <- Ptr (CairoRegionT (PrimState m)) -> IO (CairoRegionT (PrimState m))
forall s. Ptr (CairoRegionT s) -> IO (CairoRegionT s)
makeCairoRegionT (Ptr (CairoRegionT (PrimState m))
 -> IO (CairoRegionT (PrimState m)))
-> IO (Ptr (CairoRegionT (PrimState m)))
-> IO (CairoRegionT (PrimState m))
forall (m :: * -> *) a b. Monad m => (a -> m b) -> m a -> m b
=<< Ptr CairoRectangleIntT -> IO (Ptr (CairoRegionT (PrimState m)))
forall s. Ptr CairoRectangleIntT -> IO (Ptr (CairoRegionT s))
c_cairo_region_create_rectangle Ptr CairoRectangleIntT
prct
	r <$ raiseIfErrorRegion r

cairoRegionNumRectangles :: PrimMonad m => CairoRegionT (PrimState m) -> m CInt
cairoRegionNumRectangles :: forall (m :: * -> *).
PrimMonad m =>
CairoRegionT (PrimState m) -> m CInt
cairoRegionNumRectangles (CairoRegionT ForeignPtr (CairoRegionT (PrimState m))
frg) =
	IO CInt -> m CInt
forall (m :: * -> *) a. PrimMonad m => IO a -> m a
unsafeIOToPrim (IO CInt -> m CInt) -> IO CInt -> m CInt
forall a b. (a -> b) -> a -> b
$ ForeignPtr (CairoRegionT (PrimState m))
-> (Ptr (CairoRegionT (PrimState m)) -> IO CInt) -> IO CInt
forall a b. ForeignPtr a -> (Ptr a -> IO b) -> IO b
withForeignPtr ForeignPtr (CairoRegionT (PrimState m))
frg Ptr (CairoRegionT (PrimState m)) -> IO CInt
forall s. Ptr (CairoRegionT s) -> IO CInt
c_cairo_region_num_rectangles

foreign import ccall "cairo_region_num_rectangles"
	c_cairo_region_num_rectangles :: Ptr (CairoRegionT s) -> IO CInt

cairoRegionGetRectangle :: PrimMonad m => CairoRegionT (PrimState m) -> CInt ->
	CairoRectangleIntTPrim (PrimState m) -> m ()
cairoRegionGetRectangle :: forall (m :: * -> *).
PrimMonad m =>
CairoRegionT (PrimState m)
-> CInt -> CairoRectangleIntTPrim (PrimState m) -> m ()
cairoRegionGetRectangle rg :: CairoRegionT (PrimState m)
rg@(CairoRegionT ForeignPtr (CairoRegionT (PrimState m))
frg) CInt
n (CairoRectangleIntTPrim ForeignPtr CairoRectangleIntT
frc) =
	IO () -> m ()
forall (m :: * -> *) a. PrimMonad m => IO a -> m a
unsafeIOToPrim
		(IO () -> m ()) -> IO () -> m ()
forall a b. (a -> b) -> a -> b
$ ForeignPtr (CairoRegionT (PrimState m))
-> (Ptr (CairoRegionT (PrimState m)) -> IO ()) -> IO ()
forall a b. ForeignPtr a -> (Ptr a -> IO b) -> IO b
withForeignPtr ForeignPtr (CairoRegionT (PrimState m))
frg \Ptr (CairoRegionT (PrimState m))
prg -> ForeignPtr CairoRectangleIntT
-> (Ptr CairoRectangleIntT -> IO ()) -> IO ()
forall a b. ForeignPtr a -> (Ptr a -> IO b) -> IO b
withForeignPtr ForeignPtr CairoRectangleIntT
frc \Ptr CairoRectangleIntT
prc -> do
			Ptr (CairoRegionT (PrimState m))
-> CInt -> Ptr CairoRectangleIntT -> IO ()
forall s.
Ptr (CairoRegionT s) -> CInt -> Ptr CairoRectangleIntT -> IO ()
c_cairo_region_get_rectangle Ptr (CairoRegionT (PrimState m))
prg CInt
n Ptr CairoRectangleIntT
prc
			CairoRegionT (PrimState m) -> IO ()
forall s. CairoRegionT s -> IO ()
raiseIfErrorRegion CairoRegionT (PrimState m)
rg

foreign import ccall "cairo_region_get_rectangle"
	c_cairo_region_get_rectangle ::
		Ptr (CairoRegionT s) -> CInt -> Ptr CairoRectangleIntT -> IO ()