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

module Graphics.Cairo.Drawing.CairoT.Clip where

import Foreign.Ptr
import Foreign.C.Types
import Foreign.Marshal
import Foreign.Storable
import Control.Monad.Primitive
import Data.Int
import Data.CairoContext
import Graphics.Cairo.Drawing.Extents



cairoClip, cairoClipPreserve :: PrimMonad m => CairoT r (PrimState m) -> m ()
cairoClip :: forall (m :: * -> *) r.
PrimMonad m =>
CairoT r (PrimState m) -> m ()
cairoClip = (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_clip)
cairoClipPreserve :: forall (m :: * -> *) r.
PrimMonad m =>
CairoT r (PrimState m) -> m ()
cairoClipPreserve = (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_clip_preserve)

foreign import ccall "cairo_clip" c_cairo_clip :: Ptr (CairoT r s) -> IO ()

foreign import ccall "cairo_clip_preserve" c_cairo_clip_preserve :: Ptr (CairoT r s) -> IO ()

cairoClipExtents :: PrimMonad m => CairoT r (PrimState m) -> m CairoExtents
cairoClipExtents :: forall (m :: * -> *) r.
PrimMonad m =>
CairoT r (PrimState m) -> m CairoExtents
cairoClipExtents = (CairoT r (PrimState m)
 -> (Ptr (CairoT r (PrimState m)) -> IO CairoExtents)
 -> m CairoExtents)
-> (Ptr (CairoT r (PrimState m)) -> IO CairoExtents)
-> CairoT r (PrimState m)
-> m CairoExtents
forall a b c. (a -> b -> c) -> b -> a -> c
flip CairoT r (PrimState m)
-> (Ptr (CairoT r (PrimState m)) -> IO CairoExtents)
-> m CairoExtents
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))
pcr -> (Ptr CDouble -> IO CairoExtents) -> IO CairoExtents
forall a b. Storable a => (Ptr a -> IO b) -> IO b
alloca \Ptr CDouble
x1 -> (Ptr CDouble -> IO CairoExtents) -> IO CairoExtents
forall a b. Storable a => (Ptr a -> IO b) -> IO b
alloca \Ptr CDouble
y1 -> (Ptr CDouble -> IO CairoExtents) -> IO CairoExtents
forall a b. Storable a => (Ptr a -> IO b) -> IO b
alloca \Ptr CDouble
x2 -> (Ptr CDouble -> IO CairoExtents) -> IO CairoExtents
forall a b. Storable a => (Ptr a -> IO b) -> IO b
alloca \Ptr CDouble
y2 -> do
	Ptr (CairoT r (PrimState m))
-> Ptr CDouble
-> Ptr CDouble
-> Ptr CDouble
-> Ptr CDouble
-> IO ()
forall r s.
Ptr (CairoT r s)
-> Ptr CDouble
-> Ptr CDouble
-> Ptr CDouble
-> Ptr CDouble
-> IO ()
c_cairo_clip_extents Ptr (CairoT r (PrimState m))
pcr Ptr CDouble
x1 Ptr CDouble
y1 Ptr CDouble
x2 Ptr CDouble
y2
	CDouble -> CDouble -> CDouble -> CDouble -> CairoExtents
CairoExtentsLeftTopRightBottom (CDouble -> CDouble -> CDouble -> CDouble -> CairoExtents)
-> IO CDouble -> IO (CDouble -> CDouble -> CDouble -> CairoExtents)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Ptr CDouble -> IO CDouble
forall a. Storable a => Ptr a -> IO a
peek Ptr CDouble
x1 IO (CDouble -> CDouble -> CDouble -> CairoExtents)
-> IO CDouble -> IO (CDouble -> CDouble -> CairoExtents)
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Ptr CDouble -> IO CDouble
forall a. Storable a => Ptr a -> IO a
peek Ptr CDouble
y1 IO (CDouble -> CDouble -> CairoExtents)
-> IO CDouble -> IO (CDouble -> CairoExtents)
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Ptr CDouble -> IO CDouble
forall a. Storable a => Ptr a -> IO a
peek Ptr CDouble
x2 IO (CDouble -> CairoExtents) -> IO CDouble -> IO CairoExtents
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Ptr CDouble -> IO CDouble
forall a. Storable a => Ptr a -> IO a
peek Ptr CDouble
y2

foreign import ccall "cairo_clip_extents" c_cairo_clip_extents ::
	Ptr (CairoT r s) -> Ptr CDouble -> Ptr CDouble -> Ptr CDouble -> Ptr CDouble -> IO ()

cairoInClip :: PrimMonad m => CairoT r (PrimState m) -> CDouble -> CDouble -> m Bool
cairoInClip :: forall (m :: * -> *) r.
PrimMonad m =>
CairoT r (PrimState m) -> CDouble -> CDouble -> m Bool
cairoInClip CairoT r (PrimState m)
cr CDouble
x CDouble
y = CairoT r (PrimState m)
-> (Ptr (CairoT r (PrimState m)) -> IO Bool) -> m Bool
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 -> (Int32 -> Int32 -> Bool
forall a. Eq a => a -> a -> Bool
/= Int32
0) (Int32 -> Bool) -> IO Int32 -> IO Bool
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Ptr (CairoT r (PrimState m)) -> CDouble -> CDouble -> IO Int32
forall r s. Ptr (CairoT r s) -> CDouble -> CDouble -> IO Int32
c_cairo_in_clip Ptr (CairoT r (PrimState m))
pcr CDouble
x CDouble
y

foreign import ccall "cairo_in_clip" c_cairo_in_clip ::
	Ptr (CairoT r s) -> CDouble -> CDouble -> IO Int32
{-# LINE 38 "src/Graphics/Cairo/Drawing/CairoT/Clip.hsc" #-}

cairoResetClip :: PrimMonad m => CairoT r (PrimState m) -> m ()
cairoResetClip :: forall (m :: * -> *) r.
PrimMonad m =>
CairoT r (PrimState m) -> m ()
cairoResetClip = (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_reset_clip)

foreign import ccall "cairo_reset_clip" c_cairo_reset_clip ::
	Ptr (CairoT r s) -> IO ()