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

module Graphics.Cairo.Drawing.CairoT.Basic (
	cairoCreate,
	cairoSetSourceRgb, cairoSetSourceRgba, cairoSetSource, cairoSetSourceSurface,
	cairoStroke, cairoStrokePreserve, cairoStrokeExtents, cairoInStroke,
	cairoFill, cairoFillPreserve, cairoFillExtents, cairoInFill,
	cairoPaint, cairoPaintWithAlpha,
	cairoMask, cairoMaskSurface,

	CairoExtents(..),
	pattern CairoExtentsLeftTopWidthHeight, cairoExtentsLeft, cairoExtentsTop, cairoExtentsWidth, cairoExtentsHeight
	) where

import Foreign.Ptr
import Foreign.ForeignPtr hiding (newForeignPtr, addForeignPtrFinalizer)
import Foreign.Concurrent
import Foreign.Marshal
import Foreign.Storable
import Foreign.C.Types
import Control.Monad.Primitive
import Control.Concurrent.STM
import Data.Int

import Graphics.Cairo.Surfaces.CairoSurfaceT.Internal
import Graphics.Cairo.Exception
import Graphics.Cairo.Drawing.Extents

import Data.Color
import Data.CairoContext

import Graphics.Cairo.Drawing.CairoPatternT.Basic



cairoCreate :: (PrimMonad m, IsCairoSurfaceT sr) =>
	sr s (PrimState m) -> m (CairoT r (PrimState m))
cairoCreate :: forall (m :: * -> *) (sr :: * -> * -> *) s r.
(PrimMonad m, IsCairoSurfaceT sr) =>
sr s (PrimState m) -> m (CairoT r (PrimState m))
cairoCreate sr s (PrimState m)
sr_ = IO (CairoT r (PrimState m)) -> m (CairoT r (PrimState m))
forall (m :: * -> *) a. PrimMonad m => IO a -> m a
unsafeIOToPrim do
	cr <- ForeignPtr (CairoSurfaceT s (PrimState m))
-> (Ptr (CairoSurfaceT s (PrimState m))
    -> IO (Ptr (CairoT r (PrimState m))))
-> IO (Ptr (CairoT r (PrimState m)))
forall a b. ForeignPtr a -> (Ptr a -> IO b) -> IO b
withForeignPtr ForeignPtr (CairoSurfaceT s (PrimState m))
sr Ptr (CairoSurfaceT s (PrimState m))
-> IO (Ptr (CairoT r (PrimState m)))
forall s ps r. Ptr (CairoSurfaceT s ps) -> IO (Ptr (CairoT r ps))
c_cairo_create IO (Ptr (CairoT r (PrimState m)))
-> (Ptr (CairoT r (PrimState m)) -> IO (CairoT r (PrimState m)))
-> IO (CairoT r (PrimState m))
forall a b. IO a -> (a -> IO b) -> IO b
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= \Ptr (CairoT r (PrimState m))
pcr ->
		ForeignPtr (CairoT r (PrimState m)) -> CairoT r (PrimState m)
forall r s. ForeignPtr (CairoT r s) -> CairoT r s
CairoT (ForeignPtr (CairoT r (PrimState m)) -> CairoT r (PrimState m))
-> IO (ForeignPtr (CairoT r (PrimState m)))
-> IO (CairoT r (PrimState m))
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Ptr (CairoT r (PrimState m))
-> IO () -> IO (ForeignPtr (CairoT r (PrimState m)))
forall a. Ptr a -> IO () -> IO (ForeignPtr a)
newForeignPtr Ptr (CairoT r (PrimState m))
pcr (do
			STM () -> IO ()
forall a. STM a -> IO a
atomically (TChan () -> STM ()
forall a. TChan a -> STM a
readTChan (TChan () -> STM ()) -> STM (TChan ()) -> STM ()
forall (m :: * -> *) a b. Monad m => (a -> m b) -> m a -> m b
=<< STM (TChan ())
ck)
			String -> IO ()
putStrLn String
"begin CairoT destroy"
			Ptr (CairoT r (PrimState m)) -> IO ()
forall r s. Ptr (CairoT r s) -> IO ()
c_cairo_destroy Ptr (CairoT r (PrimState m))
pcr
			String -> IO ()
putStrLn String
"end CairoT destroy")
	cr <$ raiseIfError cr
	where
	CairoSurfaceT ForeignPtr (CairoSurfaceT s (PrimState m))
sr = sr s (PrimState m) -> CairoSurfaceT s (PrimState m)
forall s ps. sr s ps -> CairoSurfaceT s ps
forall (sr :: * -> * -> *) s ps.
IsCairoSurfaceT sr =>
sr s ps -> CairoSurfaceT s ps
toCairoSurfaceT sr s (PrimState m)
sr_
	ck :: STM (TChan ())
ck = sr s (PrimState m) -> STM (TChan ())
forall s ps. sr s ps -> STM (TChan ())
forall (sr :: * -> * -> *) s ps.
IsCairoSurfaceT sr =>
sr s ps -> STM (TChan ())
cairoSurfaceTFinishChecker sr s (PrimState m)
sr_

foreign import ccall "cairo_create"
	c_cairo_create :: Ptr (CairoSurfaceT s ps) -> IO (Ptr (CairoT r ps))
foreign import ccall "cairo_destroy" c_cairo_destroy :: Ptr (CairoT r s) -> IO ()

cairoSetSourceRgb :: PrimMonad m => CairoT r (PrimState m) -> Rgb CDouble -> m ()
cairoSetSourceRgb :: forall (m :: * -> *) r.
PrimMonad m =>
CairoT r (PrimState m) -> Rgb CDouble -> m ()
cairoSetSourceRgb CairoT r (PrimState m)
cr (RgbDouble CDouble
r CDouble
g CDouble
b) =
	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 -> IO ()
forall r s.
Ptr (CairoT r s) -> CDouble -> CDouble -> CDouble -> IO ()
c_cairo_set_source_rgb Ptr (CairoT r (PrimState m))
pcr CDouble
r CDouble
g CDouble
b

foreign import ccall "cairo_set_source_rgb" c_cairo_set_source_rgb ::
	Ptr (CairoT r s) -> CDouble -> CDouble -> CDouble -> IO ()

cairoSetSourceRgba :: PrimMonad m => CairoT r (PrimState m) -> Rgba CDouble -> m ()
cairoSetSourceRgba :: forall (m :: * -> *) r.
PrimMonad m =>
CairoT r (PrimState m) -> Rgba CDouble -> m ()
cairoSetSourceRgba CairoT r (PrimState m)
cr (RgbaDouble CDouble
r CDouble
g CDouble
b CDouble
a) =
	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 -> IO ()
forall r s.
Ptr (CairoT r s)
-> CDouble -> CDouble -> CDouble -> CDouble -> IO ()
c_cairo_set_source_rgba Ptr (CairoT r (PrimState m))
pcr CDouble
r CDouble
g CDouble
b CDouble
a

foreign import ccall "cairo_set_source_rgba" c_cairo_set_source_rgba ::
	Ptr (CairoT r s) -> CDouble -> CDouble -> CDouble -> CDouble -> IO ()

cairoSetSource :: (PrimMonad m, IsCairoPatternT pt) => CairoT r s -> pt s -> m ()
cairoSetSource :: forall (m :: * -> *) (pt :: * -> *) r s.
(PrimMonad m, IsCairoPatternT pt) =>
CairoT r s -> pt s -> m ()
cairoSetSource cr :: CairoT r s
cr@(CairoT ForeignPtr (CairoT r s)
fcr) (pt s -> CairoPatternT s
forall s. pt s -> CairoPatternT s
forall (pt :: * -> *) s.
IsCairoPatternT pt =>
pt s -> CairoPatternT s
toCairoPatternT -> CairoPatternT ForeignPtr (CairoPatternT s)
fpt) = IO () -> m ()
forall (m :: * -> *) a. PrimMonad m => IO a -> m a
unsafeIOToPrim do
	ForeignPtr (CairoT r s) -> (Ptr (CairoT r s) -> IO ()) -> IO ()
forall a b. ForeignPtr a -> (Ptr a -> IO b) -> IO b
withForeignPtr ForeignPtr (CairoT r s)
fcr \Ptr (CairoT r s)
pcr -> ForeignPtr (CairoPatternT s)
-> (Ptr (CairoPatternT s) -> IO ()) -> IO ()
forall a b. ForeignPtr a -> (Ptr a -> IO b) -> IO b
withForeignPtr ForeignPtr (CairoPatternT s)
fpt \Ptr (CairoPatternT s)
ppt -> Ptr (CairoT r s) -> Ptr (CairoPatternT s) -> IO ()
forall r s. Ptr (CairoT r s) -> Ptr (CairoPatternT s) -> IO ()
c_cairo_set_source Ptr (CairoT r s)
pcr Ptr (CairoPatternT s)
ppt IO () -> IO () -> IO ()
forall a b. IO a -> IO b -> IO b
forall (m :: * -> *) a b. Monad m => m a -> m b -> m b
>> CairoT r s -> IO ()
forall r s. CairoT r s -> IO ()
raiseIfError CairoT r s
cr
	ForeignPtr (CairoT r s) -> IO () -> IO ()
forall a. ForeignPtr a -> IO () -> IO ()
addForeignPtrFinalizer ForeignPtr (CairoT r s)
fcr (IO () -> IO ()) -> IO () -> IO ()
forall a b. (a -> b) -> a -> b
$ ForeignPtr (CairoPatternT s) -> IO ()
forall a. ForeignPtr a -> IO ()
touchForeignPtr ForeignPtr (CairoPatternT s)
fpt

foreign import ccall "cairo_set_source" c_cairo_set_source ::
	Ptr (CairoT r s) -> Ptr (CairoPatternT s) -> IO ()

cairoSetSourceSurface :: (PrimMonad m, IsCairoSurfaceT sr) =>
	CairoT r ps -> sr s ps -> CDouble -> CDouble -> m ()
cairoSetSourceSurface :: forall (m :: * -> *) (sr :: * -> * -> *) r ps s.
(PrimMonad m, IsCairoSurfaceT sr) =>
CairoT r ps -> sr s ps -> CDouble -> CDouble -> m ()
cairoSetSourceSurface (CairoT ForeignPtr (CairoT r ps)
fcr) (sr s ps -> CairoSurfaceT s ps
forall s ps. sr s ps -> CairoSurfaceT s ps
forall (sr :: * -> * -> *) s ps.
IsCairoSurfaceT sr =>
sr s ps -> CairoSurfaceT s ps
toCairoSurfaceT -> CairoSurfaceT ForeignPtr (CairoSurfaceT s ps)
fsr) 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
$ ForeignPtr (CairoT r ps) -> (Ptr (CairoT r ps) -> IO ()) -> IO ()
forall a b. ForeignPtr a -> (Ptr a -> IO b) -> IO b
withForeignPtr ForeignPtr (CairoT r ps)
fcr \Ptr (CairoT r ps)
cr -> ForeignPtr (CairoSurfaceT s ps)
-> (Ptr (CairoSurfaceT s ps) -> IO ()) -> IO ()
forall a b. ForeignPtr a -> (Ptr a -> IO b) -> IO b
withForeignPtr ForeignPtr (CairoSurfaceT s ps)
fsr \Ptr (CairoSurfaceT s ps)
sr -> Ptr (CairoT r ps)
-> Ptr (CairoSurfaceT s ps) -> CDouble -> CDouble -> IO ()
forall r ps s.
Ptr (CairoT r ps)
-> Ptr (CairoSurfaceT s ps) -> CDouble -> CDouble -> IO ()
c_cairo_set_source_surface Ptr (CairoT r ps)
cr Ptr (CairoSurfaceT s ps)
sr CDouble
x CDouble
y

foreign import ccall "cairo_set_source_surface" c_cairo_set_source_surface ::
	Ptr (CairoT r ps) -> Ptr (CairoSurfaceT s ps) -> CDouble -> CDouble -> IO ()

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

foreign import ccall "cairo_stroke" c_cairo_stroke :: Ptr (CairoT r s) -> IO ()

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

foreign import ccall "cairo_stroke_preserve" c_cairo_stroke_preserve :: Ptr (CairoT r s) -> IO ()

cairoStrokeExtents :: PrimMonad m => CairoT r (PrimState m) -> m CairoExtents
cairoStrokeExtents :: forall (m :: * -> *) r.
PrimMonad m =>
CairoT r (PrimState m) -> m CairoExtents
cairoStrokeExtents = (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_stroke_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_stroke_extents" c_cairo_stroke_extents ::
	Ptr (CairoT r s) -> Ptr CDouble -> Ptr CDouble -> Ptr CDouble -> Ptr CDouble -> IO ()

cairoInStroke :: PrimMonad m => CairoT r (PrimState m) -> CDouble -> CDouble -> m Bool
cairoInStroke :: forall (m :: * -> *) r.
PrimMonad m =>
CairoT r (PrimState m) -> CDouble -> CDouble -> m Bool
cairoInStroke 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_stroke Ptr (CairoT r (PrimState m))
pcr CDouble
x CDouble
y

foreign import ccall "cairo_in_stroke" c_cairo_in_stroke ::
	Ptr (CairoT r s) -> CDouble -> CDouble -> IO Int32
{-# LINE 109 "src/Graphics/Cairo/Drawing/CairoT/Basic.hsc" #-}

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

foreign import ccall "cairo_fill" c_cairo_fill :: Ptr (CairoT r s) -> IO ()

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

foreign import ccall "cairo_fill_preserve" c_cairo_fill_preserve :: Ptr (CairoT r s) -> IO ()

cairoFillExtents :: PrimMonad m => CairoT r (PrimState m) -> m CairoExtents
cairoFillExtents :: forall (m :: * -> *) r.
PrimMonad m =>
CairoT r (PrimState m) -> m CairoExtents
cairoFillExtents = (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_fill_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_fill_extents" c_cairo_fill_extents ::
	Ptr (CairoT r s) -> Ptr CDouble -> Ptr CDouble -> Ptr CDouble -> Ptr CDouble -> IO ()

cairoInFill :: PrimMonad m => CairoT r (PrimState m) -> CDouble -> CDouble -> m Bool
cairoInFill :: forall (m :: * -> *) r.
PrimMonad m =>
CairoT r (PrimState m) -> CDouble -> CDouble -> m Bool
cairoInFill 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_fill Ptr (CairoT r (PrimState m))
pcr CDouble
x CDouble
y

foreign import ccall "cairo_in_fill" c_cairo_in_fill ::
	Ptr (CairoT r s) -> CDouble -> CDouble -> IO Int32
{-# LINE 133 "src/Graphics/Cairo/Drawing/CairoT/Basic.hsc" #-}

cairoPaint :: PrimMonad m => CairoT r (PrimState m) -> m ()
cairoPaint :: forall (m :: * -> *) r.
PrimMonad m =>
CairoT r (PrimState m) -> m ()
cairoPaint CairoT r (PrimState m)
cr = 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)) -> IO ()
forall r s. Ptr (CairoT r s) -> IO ()
c_cairo_paint Ptr (CairoT r (PrimState m))
pcr IO () -> IO () -> IO ()
forall a b. IO a -> IO b -> IO b
forall (m :: * -> *) a b. Monad m => m a -> m b -> m b
>> CairoT r (PrimState m) -> IO ()
forall r s. CairoT r s -> IO ()
raiseIfError CairoT r (PrimState m)
cr

foreign import ccall "cairo_paint" c_cairo_paint :: Ptr (CairoT r s) -> IO ()

cairoPaintWithAlpha :: PrimMonad m => CairoT r (PrimState m) -> CDouble -> m ()
cairoPaintWithAlpha :: forall (m :: * -> *) r.
PrimMonad m =>
CairoT r (PrimState m) -> CDouble -> m ()
cairoPaintWithAlpha CairoT r (PrimState m)
cr CDouble
a = 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 -> IO ()
forall r s. Ptr (CairoT r s) -> CDouble -> IO ()
c_cairo_paint_with_alpha Ptr (CairoT r (PrimState m))
pcr CDouble
a

foreign import ccall "cairo_paint_with_alpha" c_cairo_paint_with_alpha ::
	Ptr (CairoT r s) -> CDouble -> IO ()

cairoMask :: (PrimMonad m, IsCairoPatternT pt) => CairoT r s -> pt s -> m ()
cairoMask :: forall (m :: * -> *) (pt :: * -> *) r s.
(PrimMonad m, IsCairoPatternT pt) =>
CairoT r s -> pt s -> m ()
cairoMask cr :: CairoT r s
cr@(CairoT ForeignPtr (CairoT r s)
fcr) (pt s -> CairoPatternT s
forall s. pt s -> CairoPatternT s
forall (pt :: * -> *) s.
IsCairoPatternT pt =>
pt s -> CairoPatternT s
toCairoPatternT -> CairoPatternT ForeignPtr (CairoPatternT s)
fpt) = 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 s) -> (Ptr (CairoT r s) -> IO ()) -> IO ()
forall a b. ForeignPtr a -> (Ptr a -> IO b) -> IO b
withForeignPtr ForeignPtr (CairoT r s)
fcr \Ptr (CairoT r s)
pcr -> ForeignPtr (CairoPatternT s)
-> (Ptr (CairoPatternT s) -> IO ()) -> IO ()
forall a b. ForeignPtr a -> (Ptr a -> IO b) -> IO b
withForeignPtr ForeignPtr (CairoPatternT s)
fpt (Ptr (CairoT r s) -> Ptr (CairoPatternT s) -> IO ()
forall r s. Ptr (CairoT r s) -> Ptr (CairoPatternT s) -> IO ()
c_cairo_mask Ptr (CairoT r s)
pcr) IO () -> IO () -> IO ()
forall a b. IO a -> IO b -> IO b
forall (m :: * -> *) a b. Monad m => m a -> m b -> m b
>> CairoT r s -> IO ()
forall r s. CairoT r s -> IO ()
raiseIfError CairoT r s
cr

foreign import ccall "cairo_mask" c_cairo_mask ::
	Ptr (CairoT r s) -> Ptr (CairoPatternT s) -> IO ()

cairoMaskSurface :: (PrimMonad m, IsCairoSurfaceT sr) => CairoT r ps -> sr s ps -> CDouble -> CDouble -> m ()
cairoMaskSurface :: forall (m :: * -> *) (sr :: * -> * -> *) r ps s.
(PrimMonad m, IsCairoSurfaceT sr) =>
CairoT r ps -> sr s ps -> CDouble -> CDouble -> m ()
cairoMaskSurface (CairoT ForeignPtr (CairoT r ps)
fcr) (sr s ps -> CairoSurfaceT s ps
forall s ps. sr s ps -> CairoSurfaceT s ps
forall (sr :: * -> * -> *) s ps.
IsCairoSurfaceT sr =>
sr s ps -> CairoSurfaceT s ps
toCairoSurfaceT -> CairoSurfaceT ForeignPtr (CairoSurfaceT s ps)
fsr) 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
$ ForeignPtr (CairoT r ps) -> (Ptr (CairoT r ps) -> IO ()) -> IO ()
forall a b. ForeignPtr a -> (Ptr a -> IO b) -> IO b
withForeignPtr ForeignPtr (CairoT r ps)
fcr \Ptr (CairoT r ps)
cr -> ForeignPtr (CairoSurfaceT s ps)
-> (Ptr (CairoSurfaceT s ps) -> IO ()) -> IO ()
forall a b. ForeignPtr a -> (Ptr a -> IO b) -> IO b
withForeignPtr ForeignPtr (CairoSurfaceT s ps)
fsr \Ptr (CairoSurfaceT s ps)
sr -> Ptr (CairoT r ps)
-> Ptr (CairoSurfaceT s ps) -> CDouble -> CDouble -> IO ()
forall r ps s.
Ptr (CairoT r ps)
-> Ptr (CairoSurfaceT s ps) -> CDouble -> CDouble -> IO ()
c_cairo_mask_surface Ptr (CairoT r ps)
cr Ptr (CairoSurfaceT s ps)
sr CDouble
x CDouble
y

foreign import ccall "cairo_mask_surface" c_cairo_mask_surface ::
	Ptr (CairoT r ps) -> Ptr (CairoSurfaceT s ps) -> CDouble -> CDouble -> IO ()