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

module Graphics.Cairo.Drawing.CairoPatternT.Mesh where

import Foreign.Ptr
import Foreign.ForeignPtr hiding (newForeignPtr)
import Foreign.Concurrent
import Foreign.Marshal
import Foreign.Storable
import Foreign.C.Types
import Control.Monad
import Control.Monad.Primitive
import Data.Word
import Data.Maybe
import Data.Color

import Graphics.Cairo.Exception
import Graphics.Cairo.Drawing.Paths.CairoPathT



import Graphics.Cairo.Drawing.CairoPatternT.Basic

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

instance IsCairoPatternT CairoPatternMeshT where
	toCairoPatternT :: forall s. CairoPatternMeshT s -> CairoPatternT s
toCairoPatternT = CairoPatternMeshT s -> CairoPatternT s
forall s. CairoPatternMeshT s -> CairoPatternT s
CairoPatternTMesh

pattern CairoPatternTMesh :: CairoPatternMeshT s -> CairoPatternT s
pattern $mCairoPatternTMesh :: forall {r} {s}.
CairoPatternT s -> (CairoPatternMeshT s -> r) -> ((# #) -> r) -> r
$bCairoPatternTMesh :: forall s. CairoPatternMeshT s -> CairoPatternT s
CairoPatternTMesh pt <- (cairoPatternMeshT -> Just pt) where
	CairoPatternTMesh (CairoPatternMeshT ForeignPtr (CairoPatternT s)
fpt) = ForeignPtr (CairoPatternT s) -> CairoPatternT s
forall s. ForeignPtr (CairoPatternT s) -> CairoPatternT s
CairoPatternT ForeignPtr (CairoPatternT s)
fpt

cairoPatternMeshT :: CairoPatternT s -> Maybe (CairoPatternMeshT s)
cairoPatternMeshT :: forall s. CairoPatternT s -> Maybe (CairoPatternMeshT s)
cairoPatternMeshT pt :: CairoPatternT s
pt@(CairoPatternT ForeignPtr (CairoPatternT s)
fpt) = case CairoPatternT s -> CairoPatternTypeT
forall s. CairoPatternT s -> CairoPatternTypeT
cairoPatternGetType CairoPatternT s
pt of
	CairoPatternTypeT
CairoPatternTypeMesh -> CairoPatternMeshT s -> Maybe (CairoPatternMeshT s)
forall a. a -> Maybe a
Just (CairoPatternMeshT s -> Maybe (CairoPatternMeshT s))
-> CairoPatternMeshT s -> Maybe (CairoPatternMeshT s)
forall a b. (a -> b) -> a -> b
$ ForeignPtr (CairoPatternT s) -> CairoPatternMeshT s
forall s. ForeignPtr (CairoPatternT s) -> CairoPatternMeshT s
CairoPatternMeshT ForeignPtr (CairoPatternT s)
fpt
	CairoPatternTypeT
_ -> Maybe (CairoPatternMeshT s)
forall a. Maybe a
Nothing

cairoPatternCreateMesh :: PrimMonad m => m (CairoPatternMeshT (PrimState m))
cairoPatternCreateMesh :: forall (m :: * -> *).
PrimMonad m =>
m (CairoPatternMeshT (PrimState m))
cairoPatternCreateMesh = IO (CairoPatternMeshT (PrimState m))
-> m (CairoPatternMeshT (PrimState m))
forall (m :: * -> *) a. PrimMonad m => IO a -> m a
unsafeIOToPrim do
	p <- IO (Ptr (CairoPatternT (PrimState m)))
forall s. IO (Ptr (CairoPatternT s))
c_cairo_pattern_create_mesh
	CairoPatternMeshT <$> newForeignPtr p (c_cairo_pattern_destroy p)

foreign import ccall "cairo_pattern_create_mesh" c_cairo_pattern_create_mesh ::
	IO (Ptr (CairoPatternT s))

data Color = ColorRgb (Rgb CDouble) | ColorRgba (Rgba CDouble) deriving Int -> Color -> ShowS
[Color] -> ShowS
Color -> String
(Int -> Color -> ShowS)
-> (Color -> String) -> ([Color] -> ShowS) -> Show Color
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> Color -> ShowS
showsPrec :: Int -> Color -> ShowS
$cshow :: Color -> String
show :: Color -> String
$cshowList :: [Color] -> ShowS
showList :: [Color] -> ShowS
Show

data Point = Point CDouble CDouble deriving Int -> Point -> ShowS
[Point] -> ShowS
Point -> String
(Int -> Point -> ShowS)
-> (Point -> String) -> ([Point] -> ShowS) -> Show Point
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> Point -> ShowS
showsPrec :: Int -> Point -> ShowS
$cshow :: Point -> String
show :: Point -> String
$cshowList :: [Point] -> ShowS
showList :: [Point] -> ShowS
Show

cairoMeshPatternAddPatchDefaultControlPoints3 :: PrimMonad m => CairoPatternMeshT (PrimState m) ->
	MoveTo -> LineCurveTo -> LineCurveTo -> CloseTo ->
	Color -> Color -> Color -> m ()
cairoMeshPatternAddPatchDefaultControlPoints3 :: forall (m :: * -> *).
PrimMonad m =>
CairoPatternMeshT (PrimState m)
-> MoveTo
-> LineCurveTo
-> LineCurveTo
-> CloseTo
-> Color
-> Color
-> Color
-> m ()
cairoMeshPatternAddPatchDefaultControlPoints3 CairoPatternMeshT (PrimState m)
pt MoveTo
mv LineCurveTo
lc1 LineCurveTo
lc2 CloseTo
cls Color
c0 Color
c1 Color
c2 = do
	CairoPatternMeshT (PrimState m) -> m ()
forall (m :: * -> *).
PrimMonad m =>
CairoPatternMeshT (PrimState m) -> m ()
cairoMeshPatternBeginPatch CairoPatternMeshT (PrimState m)
pt
	CairoPatternMeshT (PrimState m) -> MoveTo -> m ()
forall (m :: * -> *).
PrimMonad m =>
CairoPatternMeshT (PrimState m) -> MoveTo -> m ()
cairoMeshPatternMoveTo CairoPatternMeshT (PrimState m)
pt MoveTo
mv
	CairoPatternMeshT (PrimState m) -> LineCurveTo -> m ()
forall (m :: * -> *).
PrimMonad m =>
CairoPatternMeshT (PrimState m) -> LineCurveTo -> m ()
cairoMeshPatternLineTo CairoPatternMeshT (PrimState m)
pt (LineCurveTo -> m ()) -> [LineCurveTo] -> m ()
forall (t :: * -> *) (m :: * -> *) a b.
(Foldable t, Monad m) =>
(a -> m b) -> t a -> m ()
`mapM_` [LineCurveTo
lc1, LineCurveTo
lc2]
	CairoPatternMeshT (PrimState m) -> MoveTo -> CloseTo -> m ()
forall (m :: * -> *).
PrimMonad m =>
CairoPatternMeshT (PrimState m) -> MoveTo -> CloseTo -> m ()
cairoMeshPatternCloseTo CairoPatternMeshT (PrimState m)
pt MoveTo
mv CloseTo
cls
	(CUInt -> Color -> m ()) -> [CUInt] -> [Color] -> m ()
forall (m :: * -> *) a b c.
Applicative m =>
(a -> b -> m c) -> [a] -> [b] -> m ()
zipWithM_ (CairoPatternMeshT (PrimState m) -> CUInt -> Color -> m ()
forall (m :: * -> *).
PrimMonad m =>
CairoPatternMeshT (PrimState m) -> CUInt -> Color -> m ()
cairoMeshPatternSetCornerColor CairoPatternMeshT (PrimState m)
pt) [CUInt
0 ..] [Color
c0, Color
c1, Color
c2]
	CairoPatternMeshT (PrimState m) -> m ()
forall (m :: * -> *).
PrimMonad m =>
CairoPatternMeshT (PrimState m) -> m ()
cairoMeshPatternEndPatch CairoPatternMeshT (PrimState m)
pt

cairoMeshPatternAddPatchDefaultControlPoints :: PrimMonad m =>
	CairoPatternMeshT (PrimState m) ->
	MoveTo -> LineCurveTo -> LineCurveTo -> LineCurveTo -> CloseTo ->
	Color -> Color -> Color -> Color -> m ()
cairoMeshPatternAddPatchDefaultControlPoints :: forall (m :: * -> *).
PrimMonad m =>
CairoPatternMeshT (PrimState m)
-> MoveTo
-> LineCurveTo
-> LineCurveTo
-> LineCurveTo
-> CloseTo
-> Color
-> Color
-> Color
-> Color
-> m ()
cairoMeshPatternAddPatchDefaultControlPoints CairoPatternMeshT (PrimState m)
pt MoveTo
mv LineCurveTo
lc1 LineCurveTo
lc2 LineCurveTo
lc3 CloseTo
cls Color
c0 Color
c1 Color
c2 Color
c3 = do
	CairoPatternMeshT (PrimState m) -> m ()
forall (m :: * -> *).
PrimMonad m =>
CairoPatternMeshT (PrimState m) -> m ()
cairoMeshPatternBeginPatch CairoPatternMeshT (PrimState m)
pt
	CairoPatternMeshT (PrimState m) -> MoveTo -> m ()
forall (m :: * -> *).
PrimMonad m =>
CairoPatternMeshT (PrimState m) -> MoveTo -> m ()
cairoMeshPatternMoveTo CairoPatternMeshT (PrimState m)
pt MoveTo
mv
	CairoPatternMeshT (PrimState m) -> LineCurveTo -> m ()
forall (m :: * -> *).
PrimMonad m =>
CairoPatternMeshT (PrimState m) -> LineCurveTo -> m ()
cairoMeshPatternLineTo CairoPatternMeshT (PrimState m)
pt (LineCurveTo -> m ()) -> [LineCurveTo] -> m ()
forall (t :: * -> *) (m :: * -> *) a b.
(Foldable t, Monad m) =>
(a -> m b) -> t a -> m ()
`mapM_` [LineCurveTo
lc1, LineCurveTo
lc2, LineCurveTo
lc3]
	CairoPatternMeshT (PrimState m) -> MoveTo -> CloseTo -> m ()
forall (m :: * -> *).
PrimMonad m =>
CairoPatternMeshT (PrimState m) -> MoveTo -> CloseTo -> m ()
cairoMeshPatternCloseTo CairoPatternMeshT (PrimState m)
pt MoveTo
mv CloseTo
cls
	(CUInt -> Color -> m ()) -> [CUInt] -> [Color] -> m ()
forall (m :: * -> *) a b c.
Applicative m =>
(a -> b -> m c) -> [a] -> [b] -> m ()
zipWithM_ (CairoPatternMeshT (PrimState m) -> CUInt -> Color -> m ()
forall (m :: * -> *).
PrimMonad m =>
CairoPatternMeshT (PrimState m) -> CUInt -> Color -> m ()
cairoMeshPatternSetCornerColor CairoPatternMeshT (PrimState m)
pt) [CUInt
0 ..] [Color
c0, Color
c1, Color
c2, Color
c3]
	CairoPatternMeshT (PrimState m) -> m ()
forall (m :: * -> *).
PrimMonad m =>
CairoPatternMeshT (PrimState m) -> m ()
cairoMeshPatternEndPatch CairoPatternMeshT (PrimState m)
pt

cairoMeshPatternAddPatch :: PrimMonad m => CairoPatternMeshT (PrimState m) ->
	MoveTo -> LineCurveTo -> LineCurveTo -> LineCurveTo -> CloseTo ->
	Color -> Color -> Color -> Color ->
	Maybe Point -> Maybe Point -> Maybe Point -> Maybe Point -> m ()
cairoMeshPatternAddPatch :: forall (m :: * -> *).
PrimMonad m =>
CairoPatternMeshT (PrimState m)
-> MoveTo
-> LineCurveTo
-> LineCurveTo
-> LineCurveTo
-> CloseTo
-> Color
-> Color
-> Color
-> Color
-> Maybe Point
-> Maybe Point
-> Maybe Point
-> Maybe Point
-> m ()
cairoMeshPatternAddPatch CairoPatternMeshT (PrimState m)
pt MoveTo
mv LineCurveTo
lc1 LineCurveTo
lc2 LineCurveTo
lc3 CloseTo
cls Color
c0 Color
c1 Color
c2 Color
c3 Maybe Point
cp0 Maybe Point
cp1 Maybe Point
cp2 Maybe Point
cp3 = do
	CairoPatternMeshT (PrimState m) -> m ()
forall (m :: * -> *).
PrimMonad m =>
CairoPatternMeshT (PrimState m) -> m ()
cairoMeshPatternBeginPatch CairoPatternMeshT (PrimState m)
pt
	CairoPatternMeshT (PrimState m) -> MoveTo -> m ()
forall (m :: * -> *).
PrimMonad m =>
CairoPatternMeshT (PrimState m) -> MoveTo -> m ()
cairoMeshPatternMoveTo CairoPatternMeshT (PrimState m)
pt MoveTo
mv
	CairoPatternMeshT (PrimState m) -> LineCurveTo -> m ()
forall (m :: * -> *).
PrimMonad m =>
CairoPatternMeshT (PrimState m) -> LineCurveTo -> m ()
cairoMeshPatternLineTo CairoPatternMeshT (PrimState m)
pt (LineCurveTo -> m ()) -> [LineCurveTo] -> m ()
forall (t :: * -> *) (m :: * -> *) a b.
(Foldable t, Monad m) =>
(a -> m b) -> t a -> m ()
`mapM_` [LineCurveTo
lc1, LineCurveTo
lc2, LineCurveTo
lc3]
	CairoPatternMeshT (PrimState m) -> MoveTo -> CloseTo -> m ()
forall (m :: * -> *).
PrimMonad m =>
CairoPatternMeshT (PrimState m) -> MoveTo -> CloseTo -> m ()
cairoMeshPatternCloseTo CairoPatternMeshT (PrimState m)
pt MoveTo
mv CloseTo
cls
	(CUInt -> Color -> m ()) -> [CUInt] -> [Color] -> m ()
forall (m :: * -> *) a b c.
Applicative m =>
(a -> b -> m c) -> [a] -> [b] -> m ()
zipWithM_ (CairoPatternMeshT (PrimState m) -> CUInt -> Color -> m ()
forall (m :: * -> *).
PrimMonad m =>
CairoPatternMeshT (PrimState m) -> CUInt -> Color -> m ()
cairoMeshPatternSetCornerColor CairoPatternMeshT (PrimState m)
pt) [CUInt
0 ..] [Color
c0, Color
c1, Color
c2, Color
c3]
	(CUInt -> Maybe Point -> m ()) -> [CUInt] -> [Maybe Point] -> m ()
forall (m :: * -> *) a b c.
Applicative m =>
(a -> b -> m c) -> [a] -> [b] -> m ()
zipWithM_ (CairoPatternMeshT (PrimState m) -> CUInt -> Maybe Point -> m ()
forall (m :: * -> *).
PrimMonad m =>
CairoPatternMeshT (PrimState m) -> CUInt -> Maybe Point -> m ()
cairoMeshPatternSetControlPointMaybe CairoPatternMeshT (PrimState m)
pt) [CUInt
0 ..] [Maybe Point
cp0, Maybe Point
cp1, Maybe Point
cp2, Maybe Point
cp3]
	CairoPatternMeshT (PrimState m) -> m ()
forall (m :: * -> *).
PrimMonad m =>
CairoPatternMeshT (PrimState m) -> m ()
cairoMeshPatternEndPatch CairoPatternMeshT (PrimState m)
pt

cairoMeshPatternBeginPatch :: PrimMonad m => CairoPatternMeshT (PrimState m) -> m ()
cairoMeshPatternBeginPatch :: forall (m :: * -> *).
PrimMonad m =>
CairoPatternMeshT (PrimState m) -> m ()
cairoMeshPatternBeginPatch (CairoPatternMeshT ForeignPtr (CairoPatternT (PrimState m))
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 (CairoPatternT (PrimState m))
-> (Ptr (CairoPatternT (PrimState m)) -> IO ()) -> IO ()
forall a b. ForeignPtr a -> (Ptr a -> IO b) -> IO b
withForeignPtr ForeignPtr (CairoPatternT (PrimState m))
fpt Ptr (CairoPatternT (PrimState m)) -> IO ()
forall s. Ptr (CairoPatternT s) -> IO ()
c_cairo_mesh_pattern_begin_patch

foreign import ccall "cairo_mesh_pattern_begin_patch" c_cairo_mesh_pattern_begin_patch ::
	Ptr (CairoPatternT s) -> IO ()

cairoMeshPatternEndPatch :: PrimMonad m => CairoPatternMeshT (PrimState m) -> m ()
cairoMeshPatternEndPatch :: forall (m :: * -> *).
PrimMonad m =>
CairoPatternMeshT (PrimState m) -> m ()
cairoMeshPatternEndPatch (CairoPatternMeshT ForeignPtr (CairoPatternT (PrimState m))
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 (CairoPatternT (PrimState m))
-> (Ptr (CairoPatternT (PrimState m)) -> IO ()) -> IO ()
forall a b. ForeignPtr a -> (Ptr a -> IO b) -> IO b
withForeignPtr ForeignPtr (CairoPatternT (PrimState m))
fpt Ptr (CairoPatternT (PrimState m)) -> IO ()
forall s. Ptr (CairoPatternT s) -> IO ()
c_cairo_mesh_pattern_end_patch

foreign import ccall "cairo_mesh_pattern_end_patch" c_cairo_mesh_pattern_end_patch ::
	Ptr (CairoPatternT s) -> IO ()

cairoMeshPatternMoveTo :: PrimMonad m =>
	CairoPatternMeshT (PrimState m) -> MoveTo -> m ()
cairoMeshPatternMoveTo :: forall (m :: * -> *).
PrimMonad m =>
CairoPatternMeshT (PrimState m) -> MoveTo -> m ()
cairoMeshPatternMoveTo (CairoPatternMeshT ForeignPtr (CairoPatternT (PrimState m))
fpt) (MoveTo 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 (CairoPatternT (PrimState m))
-> (Ptr (CairoPatternT (PrimState m)) -> IO ()) -> IO ()
forall a b. ForeignPtr a -> (Ptr a -> IO b) -> IO b
withForeignPtr ForeignPtr (CairoPatternT (PrimState m))
fpt \Ptr (CairoPatternT (PrimState m))
ppt -> Ptr (CairoPatternT (PrimState m)) -> CDouble -> CDouble -> IO ()
forall s. Ptr (CairoPatternT s) -> CDouble -> CDouble -> IO ()
c_cairo_mesh_pattern_move_to Ptr (CairoPatternT (PrimState m))
ppt CDouble
x CDouble
y

foreign import ccall "cairo_mesh_pattern_move_to" c_cairo_mesh_pattern_move_to ::
	Ptr (CairoPatternT s) -> CDouble -> CDouble -> IO ()

cairoMeshPatternLineTo :: PrimMonad m =>
	CairoPatternMeshT (PrimState m) -> LineCurveTo -> m ()
cairoMeshPatternLineTo :: forall (m :: * -> *).
PrimMonad m =>
CairoPatternMeshT (PrimState m) -> LineCurveTo -> m ()
cairoMeshPatternLineTo (CairoPatternMeshT ForeignPtr (CairoPatternT (PrimState m))
fpt) = \case
	LineTo 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 (CairoPatternT (PrimState m))
-> (Ptr (CairoPatternT (PrimState m)) -> IO ()) -> IO ()
forall a b. ForeignPtr a -> (Ptr a -> IO b) -> IO b
withForeignPtr ForeignPtr (CairoPatternT (PrimState m))
fpt \Ptr (CairoPatternT (PrimState m))
ppt -> Ptr (CairoPatternT (PrimState m)) -> CDouble -> CDouble -> IO ()
forall s. Ptr (CairoPatternT s) -> CDouble -> CDouble -> IO ()
c_cairo_mesh_pattern_line_to Ptr (CairoPatternT (PrimState m))
ppt CDouble
x CDouble
y
	CurveTo CDouble
x1  CDouble
y1 CDouble
x2 CDouble
y2 CDouble
x3 CDouble
y3 -> IO () -> m ()
forall (m :: * -> *) a. PrimMonad m => IO a -> m a
unsafeIOToPrim
		(IO () -> m ()) -> IO () -> m ()
forall a b. (a -> b) -> a -> b
$ ForeignPtr (CairoPatternT (PrimState m))
-> (Ptr (CairoPatternT (PrimState m)) -> IO ()) -> IO ()
forall a b. ForeignPtr a -> (Ptr a -> IO b) -> IO b
withForeignPtr ForeignPtr (CairoPatternT (PrimState m))
fpt \Ptr (CairoPatternT (PrimState m))
ppt -> Ptr (CairoPatternT (PrimState m))
-> CDouble
-> CDouble
-> CDouble
-> CDouble
-> CDouble
-> CDouble
-> IO ()
forall s.
Ptr (CairoPatternT s)
-> CDouble
-> CDouble
-> CDouble
-> CDouble
-> CDouble
-> CDouble
-> IO ()
c_cairo_mesh_pattern_curve_to Ptr (CairoPatternT (PrimState m))
ppt CDouble
x1 CDouble
y1 CDouble
x2 CDouble
y2 CDouble
x3 CDouble
y3

cairoMeshPatternCloseTo :: PrimMonad m =>
	CairoPatternMeshT (PrimState m) -> MoveTo -> CloseTo -> m ()
cairoMeshPatternCloseTo :: forall (m :: * -> *).
PrimMonad m =>
CairoPatternMeshT (PrimState m) -> MoveTo -> CloseTo -> m ()
cairoMeshPatternCloseTo (CairoPatternMeshT ForeignPtr (CairoPatternT (PrimState m))
fpt) (MoveTo CDouble
x0 CDouble
y0) CloseTo
cls =
	IO () -> m ()
forall (m :: * -> *) a. PrimMonad m => IO a -> m a
unsafeIOToPrim (IO () -> m ()) -> IO () -> m ()
forall a b. (a -> b) -> a -> b
$ ForeignPtr (CairoPatternT (PrimState m))
-> (Ptr (CairoPatternT (PrimState m)) -> IO ()) -> IO ()
forall a b. ForeignPtr a -> (Ptr a -> IO b) -> IO b
withForeignPtr ForeignPtr (CairoPatternT (PrimState m))
fpt \Ptr (CairoPatternT (PrimState m))
ppt -> case CloseTo
cls of
		CloseTo
CloseLineTo -> () -> IO ()
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure ()
		CloseCurveTo CDouble
x1 CDouble
y1 CDouble
x2 CDouble
y2 -> Ptr (CairoPatternT (PrimState m))
-> CDouble
-> CDouble
-> CDouble
-> CDouble
-> CDouble
-> CDouble
-> IO ()
forall s.
Ptr (CairoPatternT s)
-> CDouble
-> CDouble
-> CDouble
-> CDouble
-> CDouble
-> CDouble
-> IO ()
c_cairo_mesh_pattern_curve_to Ptr (CairoPatternT (PrimState m))
ppt CDouble
x1 CDouble
y1 CDouble
x2 CDouble
y2 CDouble
x0 CDouble
y0

foreign import ccall "cairo_mesh_pattern_line_to" c_cairo_mesh_pattern_line_to ::
	Ptr (CairoPatternT s) -> CDouble -> CDouble -> IO ()

foreign import ccall "cairo_mesh_pattern_curve_to" c_cairo_mesh_pattern_curve_to ::
	Ptr (CairoPatternT s) ->
	CDouble -> CDouble -> CDouble -> CDouble -> CDouble -> CDouble -> IO ()

cairoMeshPatternSetControlPointMaybe :: PrimMonad m =>
	CairoPatternMeshT (PrimState m) -> CUInt -> Maybe Point -> m ()
cairoMeshPatternSetControlPointMaybe :: forall (m :: * -> *).
PrimMonad m =>
CairoPatternMeshT (PrimState m) -> CUInt -> Maybe Point -> m ()
cairoMeshPatternSetControlPointMaybe (CairoPatternMeshT ForeignPtr (CairoPatternT (PrimState m))
fpt) CUInt
i = \case
	Maybe Point
Nothing -> () -> m ()
forall a. a -> m a
forall (f :: * -> *) a. Applicative f => a -> f a
pure ()
	Just (Point 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 (CairoPatternT (PrimState m))
-> (Ptr (CairoPatternT (PrimState m)) -> IO ()) -> IO ()
forall a b. ForeignPtr a -> (Ptr a -> IO b) -> IO b
withForeignPtr ForeignPtr (CairoPatternT (PrimState m))
fpt \Ptr (CairoPatternT (PrimState m))
ppt -> Ptr (CairoPatternT (PrimState m))
-> CUInt -> CDouble -> CDouble -> IO ()
forall s.
Ptr (CairoPatternT s) -> CUInt -> CDouble -> CDouble -> IO ()
c_cairo_mesh_pattern_set_control_point Ptr (CairoPatternT (PrimState m))
ppt CUInt
i CDouble
x CDouble
y

foreign import ccall "cairo_mesh_pattern_set_control_point" c_cairo_mesh_pattern_set_control_point ::
	Ptr (CairoPatternT s) -> CUInt -> CDouble -> CDouble -> IO ()

cairoMeshPatternSetCornerColor :: PrimMonad m =>
	CairoPatternMeshT (PrimState m) -> CUInt -> Color -> m ()
cairoMeshPatternSetCornerColor :: forall (m :: * -> *).
PrimMonad m =>
CairoPatternMeshT (PrimState m) -> CUInt -> Color -> m ()
cairoMeshPatternSetCornerColor (CairoPatternMeshT ForeignPtr (CairoPatternT (PrimState m))
fpt) CUInt
i Color
c =
	IO () -> m ()
forall (m :: * -> *) a. PrimMonad m => IO a -> m a
unsafeIOToPrim (IO () -> m ()) -> IO () -> m ()
forall a b. (a -> b) -> a -> b
$ ForeignPtr (CairoPatternT (PrimState m))
-> (Ptr (CairoPatternT (PrimState m)) -> IO ()) -> IO ()
forall a b. ForeignPtr a -> (Ptr a -> IO b) -> IO b
withForeignPtr ForeignPtr (CairoPatternT (PrimState m))
fpt \Ptr (CairoPatternT (PrimState m))
ppt -> case Color
c of
		ColorRgb (RgbDouble CDouble
r CDouble
g CDouble
b) -> Ptr (CairoPatternT (PrimState m))
-> CUInt -> CDouble -> CDouble -> CDouble -> IO ()
forall s.
Ptr (CairoPatternT s)
-> CUInt -> CDouble -> CDouble -> CDouble -> IO ()
c_cairo_mesh_pattern_set_corner_color_rgb Ptr (CairoPatternT (PrimState m))
ppt CUInt
i CDouble
r CDouble
g CDouble
b
		ColorRgba (RgbaDouble CDouble
r CDouble
g CDouble
b CDouble
a) -> Ptr (CairoPatternT (PrimState m))
-> CUInt -> CDouble -> CDouble -> CDouble -> CDouble -> IO ()
forall s.
Ptr (CairoPatternT s)
-> CUInt -> CDouble -> CDouble -> CDouble -> CDouble -> IO ()
c_cairo_mesh_pattern_set_corner_color_rgba Ptr (CairoPatternT (PrimState m))
ppt CUInt
i CDouble
r CDouble
g CDouble
b CDouble
a

foreign import ccall "cairo_mesh_pattern_set_corner_color_rgb" c_cairo_mesh_pattern_set_corner_color_rgb ::
	Ptr (CairoPatternT s) -> CUInt -> CDouble -> CDouble -> CDouble -> IO ()

foreign import ccall "cairo_mesh_pattern_set_corner_color_rgba" c_cairo_mesh_pattern_set_corner_color_rgba ::
	Ptr (CairoPatternT s) -> CUInt -> CDouble -> CDouble -> CDouble -> CDouble -> IO ()

cairoMeshPatternGetPatchCount :: PrimMonad m =>
	CairoPatternMeshT (PrimState m) -> m CUInt
cairoMeshPatternGetPatchCount :: forall (m :: * -> *).
PrimMonad m =>
CairoPatternMeshT (PrimState m) -> m CUInt
cairoMeshPatternGetPatchCount (CairoPatternMeshT ForeignPtr (CairoPatternT (PrimState m))
fpt) =
	IO CUInt -> m CUInt
forall (m :: * -> *) a. PrimMonad m => IO a -> m a
unsafeIOToPrim (IO CUInt -> m CUInt) -> IO CUInt -> m CUInt
forall a b. (a -> b) -> a -> b
$ ForeignPtr (CairoPatternT (PrimState m))
-> (Ptr (CairoPatternT (PrimState m)) -> IO CUInt) -> IO CUInt
forall a b. ForeignPtr a -> (Ptr a -> IO b) -> IO b
withForeignPtr ForeignPtr (CairoPatternT (PrimState m))
fpt \Ptr (CairoPatternT (PrimState m))
ppt -> (Ptr CUInt -> IO CUInt) -> IO CUInt
forall a b. Storable a => (Ptr a -> IO b) -> IO b
alloca \Ptr CUInt
cnt -> do
		Word32 -> IO ()
cairoStatusToThrowError (Word32 -> IO ()) -> IO Word32 -> IO ()
forall (m :: * -> *) a b. Monad m => (a -> m b) -> m a -> m b
=<< Ptr (CairoPatternT (PrimState m)) -> Ptr CUInt -> IO Word32
forall s. Ptr (CairoPatternT s) -> Ptr CUInt -> IO Word32
c_cairo_mesh_pattern_get_patch_count Ptr (CairoPatternT (PrimState m))
ppt Ptr CUInt
cnt
		Ptr CUInt -> IO CUInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CUInt
cnt

foreign import ccall "cairo_mesh_pattern_get_patch_count" c_cairo_mesh_pattern_get_patch_count ::
	Ptr (CairoPatternT s) -> Ptr CUInt -> IO Word32
{-# LINE 164 "src/Graphics/Cairo/Drawing/CairoPatternT/Mesh.hsc" #-}

cairoMeshPatternGetPath :: PrimMonad m =>
	CairoPatternMeshT (PrimState m) -> CUInt -> m CairoPatchPathT
cairoMeshPatternGetPath :: forall (m :: * -> *).
PrimMonad m =>
CairoPatternMeshT (PrimState m) -> CUInt -> m CairoPatchPathT
cairoMeshPatternGetPath (CairoPatternMeshT ForeignPtr (CairoPatternT (PrimState m))
fpt) CUInt
i =
	IO CairoPatchPathT -> m CairoPatchPathT
forall (m :: * -> *) a. PrimMonad m => IO a -> m a
unsafeIOToPrim (IO CairoPatchPathT -> m CairoPatchPathT)
-> IO CairoPatchPathT -> m CairoPatchPathT
forall a b. (a -> b) -> a -> b
$ ForeignPtr (CairoPatternT (PrimState m))
-> (Ptr (CairoPatternT (PrimState m)) -> IO CairoPatchPathT)
-> IO CairoPatchPathT
forall a b. ForeignPtr a -> (Ptr a -> IO b) -> IO b
withForeignPtr ForeignPtr (CairoPatternT (PrimState m))
fpt \Ptr (CairoPatternT (PrimState m))
ppt ->
		Ptr CairoPathT -> IO CairoPatchPathT
mkCairoPatchPathT (Ptr CairoPathT -> IO CairoPatchPathT)
-> IO (Ptr CairoPathT) -> IO CairoPatchPathT
forall (m :: * -> *) a b. Monad m => (a -> m b) -> m a -> m b
=<< Ptr (CairoPatternT (PrimState m)) -> CUInt -> IO (Ptr CairoPathT)
forall s. Ptr (CairoPatternT s) -> CUInt -> IO (Ptr CairoPathT)
c_cairo_mesh_pattern_get_path Ptr (CairoPatternT (PrimState m))
ppt CUInt
i

foreign import ccall "cairo_mesh_pattern_get_path" c_cairo_mesh_pattern_get_path ::
	Ptr (CairoPatternT s) -> CUInt -> IO (Ptr CairoPathT)

cairoMeshPatternGetControlPoint :: PrimMonad m =>
	CairoPatternMeshT (PrimState m) -> CUInt -> CUInt -> m Point
cairoMeshPatternGetControlPoint :: forall (m :: * -> *).
PrimMonad m =>
CairoPatternMeshT (PrimState m) -> CUInt -> CUInt -> m Point
cairoMeshPatternGetControlPoint (CairoPatternMeshT ForeignPtr (CairoPatternT (PrimState m))
fpt) CUInt
i CUInt
j =
	IO Point -> m Point
forall (m :: * -> *) a. PrimMonad m => IO a -> m a
unsafeIOToPrim (IO Point -> m Point) -> IO Point -> m Point
forall a b. (a -> b) -> a -> b
$ ForeignPtr (CairoPatternT (PrimState m))
-> (Ptr (CairoPatternT (PrimState m)) -> IO Point) -> IO Point
forall a b. ForeignPtr a -> (Ptr a -> IO b) -> IO b
withForeignPtr ForeignPtr (CairoPatternT (PrimState m))
fpt \Ptr (CairoPatternT (PrimState m))
ppt -> (Ptr CDouble -> IO Point) -> IO Point
forall a b. Storable a => (Ptr a -> IO b) -> IO b
alloca \Ptr CDouble
x -> (Ptr CDouble -> IO Point) -> IO Point
forall a b. Storable a => (Ptr a -> IO b) -> IO b
alloca \Ptr CDouble
y -> do
		Word32 -> IO ()
cairoStatusToThrowError (Word32 -> IO ()) -> IO Word32 -> IO ()
forall (m :: * -> *) a b. Monad m => (a -> m b) -> m a -> m b
=<< Ptr (CairoPatternT (PrimState m))
-> CUInt -> CUInt -> Ptr CDouble -> Ptr CDouble -> IO Word32
forall s.
Ptr (CairoPatternT s)
-> CUInt -> CUInt -> Ptr CDouble -> Ptr CDouble -> IO Word32
c_cairo_mesh_pattern_get_control_point Ptr (CairoPatternT (PrimState m))
ppt CUInt
i CUInt
j Ptr CDouble
x Ptr CDouble
y
		CDouble -> CDouble -> Point
Point (CDouble -> CDouble -> Point)
-> IO CDouble -> IO (CDouble -> Point)
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
x IO (CDouble -> Point) -> IO CDouble -> IO Point
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
y

foreign import ccall "cairo_mesh_pattern_get_control_point" c_cairo_mesh_pattern_get_control_point ::
	Ptr (CairoPatternT s) -> CUInt -> CUInt -> Ptr CDouble -> Ptr CDouble -> IO Word32
{-# LINE 183 "src/Graphics/Cairo/Drawing/CairoPatternT/Mesh.hsc" #-}

cairoMeshPatternGetCornerColorRgba :: PrimMonad m =>
	CairoPatternMeshT (PrimState m) -> CUInt -> CUInt -> m (Rgba CDouble)
cairoMeshPatternGetCornerColorRgba :: forall (m :: * -> *).
PrimMonad m =>
CairoPatternMeshT (PrimState m)
-> CUInt -> CUInt -> m (Rgba CDouble)
cairoMeshPatternGetCornerColorRgba (CairoPatternMeshT ForeignPtr (CairoPatternT (PrimState m))
fpt) CUInt
i CUInt
j =
	IO (Rgba CDouble) -> m (Rgba CDouble)
forall (m :: * -> *) a. PrimMonad m => IO a -> m a
unsafeIOToPrim (IO (Rgba CDouble) -> m (Rgba CDouble))
-> IO (Rgba CDouble) -> m (Rgba CDouble)
forall a b. (a -> b) -> a -> b
$ ForeignPtr (CairoPatternT (PrimState m))
-> (Ptr (CairoPatternT (PrimState m)) -> IO (Rgba CDouble))
-> IO (Rgba CDouble)
forall a b. ForeignPtr a -> (Ptr a -> IO b) -> IO b
withForeignPtr ForeignPtr (CairoPatternT (PrimState m))
fpt \Ptr (CairoPatternT (PrimState m))
ppt -> (Ptr CDouble -> IO (Rgba CDouble)) -> IO (Rgba CDouble)
forall a b. Storable a => (Ptr a -> IO b) -> IO b
alloca \Ptr CDouble
r -> (Ptr CDouble -> IO (Rgba CDouble)) -> IO (Rgba CDouble)
forall a b. Storable a => (Ptr a -> IO b) -> IO b
alloca \Ptr CDouble
g -> (Ptr CDouble -> IO (Rgba CDouble)) -> IO (Rgba CDouble)
forall a b. Storable a => (Ptr a -> IO b) -> IO b
alloca \Ptr CDouble
b -> (Ptr CDouble -> IO (Rgba CDouble)) -> IO (Rgba CDouble)
forall a b. Storable a => (Ptr a -> IO b) -> IO b
alloca \Ptr CDouble
a -> do
		Word32 -> IO ()
cairoStatusToThrowError (Word32 -> IO ()) -> IO Word32 -> IO ()
forall (m :: * -> *) a b. Monad m => (a -> m b) -> m a -> m b
=<< Ptr (CairoPatternT (PrimState m))
-> CUInt
-> CUInt
-> Ptr CDouble
-> Ptr CDouble
-> Ptr CDouble
-> Ptr CDouble
-> IO Word32
forall s.
Ptr (CairoPatternT s)
-> CUInt
-> CUInt
-> Ptr CDouble
-> Ptr CDouble
-> Ptr CDouble
-> Ptr CDouble
-> IO Word32
c_cairo_mesh_pattern_get_corner_color_rgba Ptr (CairoPatternT (PrimState m))
ppt CUInt
i CUInt
j Ptr CDouble
r Ptr CDouble
g Ptr CDouble
b Ptr CDouble
a
		Maybe (Rgba CDouble) -> Rgba CDouble
forall a. HasCallStack => Maybe a -> a
fromJust (Maybe (Rgba CDouble) -> Rgba CDouble)
-> IO (Maybe (Rgba CDouble)) -> IO (Rgba CDouble)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> (CDouble -> CDouble -> CDouble -> CDouble -> Maybe (Rgba CDouble)
forall d. (Ord d, Num d) => d -> d -> d -> d -> Maybe (Rgba d)
rgbaDouble (CDouble -> CDouble -> CDouble -> CDouble -> Maybe (Rgba CDouble))
-> IO CDouble
-> IO (CDouble -> CDouble -> CDouble -> Maybe (Rgba CDouble))
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
r IO (CDouble -> CDouble -> CDouble -> Maybe (Rgba CDouble))
-> IO CDouble -> IO (CDouble -> CDouble -> Maybe (Rgba CDouble))
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
g IO (CDouble -> CDouble -> Maybe (Rgba CDouble))
-> IO CDouble -> IO (CDouble -> Maybe (Rgba CDouble))
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
b IO (CDouble -> Maybe (Rgba CDouble))
-> IO CDouble -> IO (Maybe (Rgba CDouble))
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
a)

foreign import ccall "cairo_mesh_pattern_get_corner_color_rgba" c_cairo_mesh_pattern_get_corner_color_rgba ::
	Ptr (CairoPatternT s) -> CUInt -> CUInt -> Ptr CDouble -> Ptr CDouble -> Ptr CDouble -> Ptr CDouble -> IO Word32
{-# LINE 193 "src/Graphics/Cairo/Drawing/CairoPatternT/Mesh.hsc" #-}

cairoMeshPatternGetPatch1 :: PrimBase m => CairoPatternMeshT (PrimState m) -> CUInt ->
	m (CairoPatchPathT, (Rgba CDouble, Rgba CDouble, Rgba CDouble, Rgba CDouble), (Point, Point, Point, Point))
cairoMeshPatternGetPatch1 :: forall (m :: * -> *).
PrimBase m =>
CairoPatternMeshT (PrimState m)
-> CUInt
-> m (CairoPatchPathT,
      (Rgba CDouble, Rgba CDouble, Rgba CDouble, Rgba CDouble),
      (Point, Point, Point, Point))
cairoMeshPatternGetPatch1 CairoPatternMeshT (PrimState m)
pt CUInt
i = do
	pth <- m CairoPatchPathT -> m CairoPatchPathT
forall (m :: * -> *) a. PrimBase m => m a -> m a
unsafeInterleave (m CairoPatchPathT -> m CairoPatchPathT)
-> m CairoPatchPathT -> m CairoPatchPathT
forall a b. (a -> b) -> a -> b
$ CairoPatternMeshT (PrimState m) -> CUInt -> m CairoPatchPathT
forall (m :: * -> *).
PrimMonad m =>
CairoPatternMeshT (PrimState m) -> CUInt -> m CairoPatchPathT
cairoMeshPatternGetPath CairoPatternMeshT (PrimState m)
pt CUInt
i
	(unsafeInterleave . cairoMeshPatternGetCornerColorRgba pt i) `mapM` [0, 1, 2, 3] >>= \case
		[Rgba CDouble
c0, Rgba CDouble
c1, Rgba CDouble
c2, Rgba CDouble
c3] ->
			(m Point -> m Point
forall (m :: * -> *) a. PrimBase m => m a -> m a
unsafeInterleave (m Point -> m Point) -> (CUInt -> m Point) -> CUInt -> m Point
forall b c a. (b -> c) -> (a -> b) -> a -> c
. CairoPatternMeshT (PrimState m) -> CUInt -> CUInt -> m Point
forall (m :: * -> *).
PrimMonad m =>
CairoPatternMeshT (PrimState m) -> CUInt -> CUInt -> m Point
cairoMeshPatternGetControlPoint CairoPatternMeshT (PrimState m)
pt CUInt
i) (CUInt -> m Point) -> [CUInt] -> m [Point]
forall (m :: * -> *) a b. PrimBase m => (a -> m b) -> [a] -> m [b]
`mapMLazy` [CUInt
0, CUInt
1, CUInt
2, CUInt
3] m [Point]
-> ([Point]
    -> m (CairoPatchPathT,
          (Rgba CDouble, Rgba CDouble, Rgba CDouble, Rgba CDouble),
          (Point, Point, Point, Point)))
-> m (CairoPatchPathT,
      (Rgba CDouble, Rgba CDouble, Rgba CDouble, Rgba CDouble),
      (Point, Point, Point, Point))
forall a b. m a -> (a -> m b) -> m b
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= \case
				[Point
p0, Point
p1, Point
p2, Point
p3] -> (CairoPatchPathT,
 (Rgba CDouble, Rgba CDouble, Rgba CDouble, Rgba CDouble),
 (Point, Point, Point, Point))
-> m (CairoPatchPathT,
      (Rgba CDouble, Rgba CDouble, Rgba CDouble, Rgba CDouble),
      (Point, Point, Point, Point))
forall a. a -> m a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (CairoPatchPathT
pth, (Rgba CDouble
c0, Rgba CDouble
c1, Rgba CDouble
c2, Rgba CDouble
c3), (Point
p0, Point
p1, Point
p2, Point
p3))
				[Point]
_ -> String
-> m (CairoPatchPathT,
      (Rgba CDouble, Rgba CDouble, Rgba CDouble, Rgba CDouble),
      (Point, Point, Point, Point))
forall a. HasCallStack => String -> a
error String
"never occur"
		[Rgba CDouble]
_ -> String
-> m (CairoPatchPathT,
      (Rgba CDouble, Rgba CDouble, Rgba CDouble, Rgba CDouble),
      (Point, Point, Point, Point))
forall a. HasCallStack => String -> a
error String
"never occur"

forLazy :: PrimBase m => [a] -> (a -> m b) -> m [b]
forLazy :: forall (m :: * -> *) a b. PrimBase m => [a] -> (a -> m b) -> m [b]
forLazy [] a -> m b
_ = [b] -> m [b]
forall a. a -> m a
forall (f :: * -> *) a. Applicative f => a -> f a
pure []
forLazy (a
x : [a]
xs) a -> m b
f = m [b] -> m [b]
forall (m :: * -> *) a. PrimBase m => m a -> m a
unsafeInterleave (m [b] -> m [b]) -> m [b] -> m [b]
forall a b. (a -> b) -> a -> b
$ (:) (b -> [b] -> [b]) -> m b -> m ([b] -> [b])
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> a -> m b
f a
x m ([b] -> [b]) -> m [b] -> m [b]
forall a b. m (a -> b) -> m a -> m b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> [a] -> (a -> m b) -> m [b]
forall (m :: * -> *) a b. PrimBase m => [a] -> (a -> m b) -> m [b]
forLazy [a]
xs a -> m b
f

mapMLazy :: PrimBase m => (a -> m b) -> [a] -> m [b]
mapMLazy :: forall (m :: * -> *) a b. PrimBase m => (a -> m b) -> [a] -> m [b]
mapMLazy = ([a] -> (a -> m b) -> m [b]) -> (a -> m b) -> [a] -> m [b]
forall a b c. (a -> b -> c) -> b -> a -> c
flip [a] -> (a -> m b) -> m [b]
forall (m :: * -> *) a b. PrimBase m => [a] -> (a -> m b) -> m [b]
forLazy

cairoMeshPatternGetPatchList :: PrimBase m => CairoPatternMeshT (PrimState m) ->
	m [(CairoPatchPathT, (Rgba CDouble, Rgba CDouble, Rgba CDouble, Rgba CDouble), (Point, Point, Point, Point))]
cairoMeshPatternGetPatchList :: forall (m :: * -> *).
PrimBase m =>
CairoPatternMeshT (PrimState m)
-> m [(CairoPatchPathT,
       (Rgba CDouble, Rgba CDouble, Rgba CDouble, Rgba CDouble),
       (Point, Point, Point, Point))]
cairoMeshPatternGetPatchList CairoPatternMeshT (PrimState m)
pt = do
	n <- CairoPatternMeshT (PrimState m) -> m CUInt
forall (m :: * -> *).
PrimMonad m =>
CairoPatternMeshT (PrimState m) -> m CUInt
cairoMeshPatternGetPatchCount CairoPatternMeshT (PrimState m)
pt
	forLazy [0 .. n - 1] $ unsafeInterleave . cairoMeshPatternGetPatch1 pt