{-# 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