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

module Graphics.Cairo.Drawing.Paths.Relative where

import Foreign.Ptr
import Foreign.C.Types
import Control.Monad.Primitive
import Data.CairoContext
import Graphics.Cairo.Exception

cairoRelMoveTo :: PrimMonad m => CairoT r (PrimState m) -> CDouble -> CDouble -> m ()
cairoRelMoveTo :: forall (m :: * -> *) r.
PrimMonad m =>
CairoT r (PrimState m) -> CDouble -> CDouble -> m ()
cairoRelMoveTo CairoT r (PrimState m)
cr CDouble
dx CDouble
dy = do
	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 -> Ptr (CairoT r (PrimState m)) -> CDouble -> CDouble -> IO ()
forall r s. Ptr (CairoT r s) -> CDouble -> CDouble -> IO ()
c_cairo_rel_move_to Ptr (CairoT r (PrimState m))
pcr CDouble
dx CDouble
dy
	IO () -> m ()
forall (m :: * -> *) a. PrimMonad m => IO a -> m a
unsafeIOToPrim (IO () -> m ()) -> IO () -> m ()
forall a b. (a -> b) -> a -> b
$ CairoT r (PrimState m) -> IO ()
forall r s. CairoT r s -> IO ()
raiseIfError CairoT r (PrimState m)
cr

foreign import ccall "cairo_rel_move_to" c_cairo_rel_move_to ::
	Ptr (CairoT r s) -> CDouble -> CDouble -> IO ()

cairoRelLineTo :: PrimMonad m => CairoT r (PrimState m) -> CDouble -> CDouble -> m ()
cairoRelLineTo :: forall (m :: * -> *) r.
PrimMonad m =>
CairoT r (PrimState m) -> CDouble -> CDouble -> m ()
cairoRelLineTo CairoT r (PrimState m)
cr CDouble
x CDouble
y = do
	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 -> Ptr (CairoT r (PrimState m)) -> CDouble -> CDouble -> IO ()
forall r s. Ptr (CairoT r s) -> CDouble -> CDouble -> IO ()
c_cairo_rel_line_to Ptr (CairoT r (PrimState m))
pcr CDouble
x CDouble
y
	IO () -> m ()
forall (m :: * -> *) a. PrimMonad m => IO a -> m a
unsafeIOToPrim (IO () -> m ()) -> IO () -> m ()
forall a b. (a -> b) -> a -> b
$ CairoT r (PrimState m) -> IO ()
forall r s. CairoT r s -> IO ()
raiseIfError CairoT r (PrimState m)
cr

foreign import ccall "cairo_rel_line_to" c_cairo_rel_line_to ::
	Ptr (CairoT r s) -> CDouble -> CDouble -> IO ()

cairoRelCurveTo :: PrimMonad m => CairoT r (PrimState m) -> CDouble -> CDouble ->
	CDouble -> CDouble ->
	CDouble -> CDouble -> m ()
cairoRelCurveTo :: forall (m :: * -> *) r.
PrimMonad m =>
CairoT r (PrimState m)
-> CDouble
-> CDouble
-> CDouble
-> CDouble
-> CDouble
-> CDouble
-> m ()
cairoRelCurveTo CairoT r (PrimState m)
cr CDouble
dx1 CDouble
dy1 CDouble
dx2 CDouble
dy2 CDouble
dx3 CDouble
dy3 = do
	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 -> Ptr (CairoT r (PrimState m))
-> CDouble
-> CDouble
-> CDouble
-> CDouble
-> CDouble
-> CDouble
-> IO ()
forall r s.
Ptr (CairoT r s)
-> CDouble
-> CDouble
-> CDouble
-> CDouble
-> CDouble
-> CDouble
-> IO ()
c_cairo_rel_curve_to Ptr (CairoT r (PrimState m))
pcr CDouble
dx1 CDouble
dy1 CDouble
dx2 CDouble
dy2 CDouble
dx3 CDouble
dy3
	IO () -> m ()
forall (m :: * -> *) a. PrimMonad m => IO a -> m a
unsafeIOToPrim (IO () -> m ()) -> IO () -> m ()
forall a b. (a -> b) -> a -> b
$ CairoT r (PrimState m) -> IO ()
forall r s. CairoT r s -> IO ()
raiseIfError CairoT r (PrimState m)
cr

foreign import ccall "cairo_rel_curve_to" c_cairo_rel_curve_to ::
	Ptr (CairoT r s) -> CDouble -> CDouble ->
		CDouble -> CDouble ->
		CDouble -> CDouble -> IO ()