{-# LANGUAGE BlockArguments #-}
{-# OPTIONS_GHC -Wall -fno-warn-tabs #-}

module Graphics.Cairo.Drawing.Paths.CopyAppend where

import Foreign.Ptr
import Foreign.ForeignPtr
import Control.Monad.Primitive
import Data.CairoContext
import Graphics.Cairo.Drawing.Paths.CairoPathT

cairoCopyPath :: PrimMonad m => CairoT r (PrimState m) -> m CairoPathT
cairoCopyPath :: forall (m :: * -> *) r.
PrimMonad m =>
CairoT r (PrimState m) -> m CairoPathT
cairoCopyPath (CairoT ForeignPtr (CairoT r (PrimState m))
fcr) = IO CairoPathT -> m CairoPathT
forall (m :: * -> *) a. PrimMonad m => IO a -> m a
unsafeIOToPrim
	(IO CairoPathT -> m CairoPathT) -> IO CairoPathT -> m CairoPathT
forall a b. (a -> b) -> a -> b
$ ForeignPtr (CairoT r (PrimState m))
-> (Ptr (CairoT r (PrimState m)) -> IO CairoPathT) -> IO CairoPathT
forall a b. ForeignPtr a -> (Ptr a -> IO b) -> IO b
withForeignPtr ForeignPtr (CairoT r (PrimState m))
fcr \Ptr (CairoT r (PrimState m))
pcr -> Ptr CairoPathT -> IO CairoPathT
mkCairoPathT (Ptr CairoPathT -> IO CairoPathT)
-> IO (Ptr CairoPathT) -> IO CairoPathT
forall (m :: * -> *) a b. Monad m => (a -> m b) -> m a -> m b
=<< Ptr (CairoT r (PrimState m)) -> IO (Ptr CairoPathT)
forall r s. Ptr (CairoT r s) -> IO (Ptr CairoPathT)
c_cairo_copy_path Ptr (CairoT r (PrimState m))
pcr

foreign import ccall "cairo_copy_path" c_cairo_copy_path ::
	Ptr (CairoT r s) -> IO (Ptr CairoPathT)

cairoCopyPathFlat :: PrimMonad m => CairoT r (PrimState m) -> m CairoPathT
cairoCopyPathFlat :: forall (m :: * -> *) r.
PrimMonad m =>
CairoT r (PrimState m) -> m CairoPathT
cairoCopyPathFlat (CairoT ForeignPtr (CairoT r (PrimState m))
fcr) = IO CairoPathT -> m CairoPathT
forall (m :: * -> *) a. PrimMonad m => IO a -> m a
unsafeIOToPrim
	(IO CairoPathT -> m CairoPathT) -> IO CairoPathT -> m CairoPathT
forall a b. (a -> b) -> a -> b
$ ForeignPtr (CairoT r (PrimState m))
-> (Ptr (CairoT r (PrimState m)) -> IO CairoPathT) -> IO CairoPathT
forall a b. ForeignPtr a -> (Ptr a -> IO b) -> IO b
withForeignPtr ForeignPtr (CairoT r (PrimState m))
fcr \Ptr (CairoT r (PrimState m))
pcr -> Ptr CairoPathT -> IO CairoPathT
mkCairoPathT (Ptr CairoPathT -> IO CairoPathT)
-> IO (Ptr CairoPathT) -> IO CairoPathT
forall (m :: * -> *) a b. Monad m => (a -> m b) -> m a -> m b
=<< Ptr (CairoT r (PrimState m)) -> IO (Ptr CairoPathT)
forall r s. Ptr (CairoT r s) -> IO (Ptr CairoPathT)
c_cairo_copy_path_flat Ptr (CairoT r (PrimState m))
pcr

foreign import ccall "cairo_copy_path_flat" c_cairo_copy_path_flat ::
	Ptr (CairoT r s) -> IO (Ptr CairoPathT)

cairoAppendPath :: PrimMonad m =>
	CairoT r (PrimState m) -> CairoPathT -> m ()
cairoAppendPath :: forall (m :: * -> *) r.
PrimMonad m =>
CairoT r (PrimState m) -> CairoPathT -> m ()
cairoAppendPath (CairoT ForeignPtr (CairoT r (PrimState m))
fcr) CairoPathT
pth = 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))
pcr -> CairoPathT -> (Ptr CairoPathT -> IO ()) -> IO ()
forall a. CairoPathT -> (Ptr CairoPathT -> IO a) -> IO a
withCairoPathT CairoPathT
pth \Ptr CairoPathT
ppth ->
		Ptr (CairoT r (PrimState m)) -> Ptr CairoPathT -> IO ()
forall r s. Ptr (CairoT r s) -> Ptr CairoPathT -> IO ()
c_cairo_append_path Ptr (CairoT r (PrimState m))
pcr Ptr CairoPathT
ppth

foreign import ccall "cairo_append_path" c_cairo_append_path ::
	Ptr (CairoT r s) -> Ptr CairoPathT -> IO ()