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

module Graphics.Cairo.Drawing.Paths.CairoPathT (
	Path(..), CairoPathT, pattern CairoPathT, withCairoPathT, mkCairoPathT,
	MoveTo(..), LineCurveTo(..), CloseTo(..),
	CairoPatchPathT, pattern CairoPatchPathT,
	pattern CairoPathTPatch, mkCairoPatchPathT ) where

import Foreign.Ptr
import Foreign.ForeignPtr hiding (newForeignPtr)
import Foreign.Concurrent
import Foreign.Marshal
import Foreign.Storable
import Foreign.C.Types
import Data.Bool
import Data.Word

import Graphics.Cairo.Exception

import System.IO.Unsafe



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

pattern CairoPathT :: [Path] -> CairoPathT
pattern $mCairoPathT :: forall {r}. CairoPathT -> ([Path] -> r) -> ((# #) -> r) -> r
$bCairoPathT :: [Path] -> CairoPathT
CairoPathT ps <- (unsafePerformIO . cairoPathTPathList -> ps) where
	CairoPathT = IO CairoPathT -> CairoPathT
forall a. IO a -> a
unsafePerformIO (IO CairoPathT -> CairoPathT)
-> ([Path] -> IO CairoPathT) -> [Path] -> CairoPathT
forall b c a. (b -> c) -> (a -> b) -> a -> c
. [Path] -> IO CairoPathT
pathListToCairoPathT

withCairoPathT :: CairoPathT -> (Ptr CairoPathT -> IO a) -> IO a
withCairoPathT :: forall a. CairoPathT -> (Ptr CairoPathT -> IO a) -> IO a
withCairoPathT (CairoPathT_ ForeignPtr CairoPathT
fpth) = ForeignPtr CairoPathT -> (Ptr CairoPathT -> IO a) -> IO a
forall a b. ForeignPtr a -> (Ptr a -> IO b) -> IO b
withForeignPtr ForeignPtr CairoPathT
fpth

mkCairoPathT :: Ptr CairoPathT -> IO CairoPathT
mkCairoPathT :: Ptr CairoPathT -> IO CairoPathT
mkCairoPathT Ptr CairoPathT
p =
	ForeignPtr CairoPathT -> CairoPathT
CairoPathT_ (ForeignPtr CairoPathT -> CairoPathT)
-> IO (ForeignPtr CairoPathT) -> IO CairoPathT
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Ptr CairoPathT -> IO () -> IO (ForeignPtr CairoPathT)
forall a. Ptr a -> IO () -> IO (ForeignPtr a)
newForeignPtr Ptr CairoPathT
p (Ptr CairoPathT -> IO ()
c_cairo_path_destroy Ptr CairoPathT
p)
		IO CairoPathT -> IO () -> IO CairoPathT
forall a b. IO a -> IO b -> IO a
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f a
<* (Word32 -> IO ()
cairoStatusToThrowError (Word32 -> IO ()) -> IO Word32 -> IO ()
forall (m :: * -> *) a b. Monad m => (a -> m b) -> m a -> m b
=<< Ptr CairoPathT -> IO Word32
cairoPathTStatus Ptr CairoPathT
p)

foreign import ccall "cairo_path_destroy" c_cairo_path_destroy ::
	Ptr CairoPathT -> IO ()

cairoPathTStatus :: Ptr CairoPathT -> IO Word32
{-# LINE 44 "src/Graphics/Cairo/Drawing/Paths/CairoPathT.hsc" #-}
cairoPathTStatus = (\hsc_ptr -> peekByteOff hsc_ptr 0)
{-# LINE 45 "src/Graphics/Cairo/Drawing/Paths/CairoPathT.hsc" #-}

cairoPathTData ::Ptr CairoPathT -> IO (Ptr CairoPathDataT)
cairoPathTData :: Ptr CairoPathT -> IO (Ptr CairoPathDataT)
cairoPathTData = (\Ptr CairoPathT
hsc_ptr -> Ptr CairoPathT -> Int -> IO (Ptr CairoPathDataT)
forall b. Ptr b -> Int -> IO (Ptr CairoPathDataT)
forall a b. Storable a => Ptr b -> Int -> IO a
peekByteOff Ptr CairoPathT
hsc_ptr Int
8)
{-# LINE 48 "src/Graphics/Cairo/Drawing/Paths/CairoPathT.hsc" #-}

cairoPathTNumData :: Ptr CairoPathT -> IO CInt
cairoPathTNumData :: Ptr CairoPathT -> IO CInt
cairoPathTNumData = (\Ptr CairoPathT
hsc_ptr -> Ptr CairoPathT -> Int -> IO CInt
forall b. Ptr b -> Int -> IO CInt
forall a b. Storable a => Ptr b -> Int -> IO a
peekByteOff Ptr CairoPathT
hsc_ptr Int
16)
{-# LINE 51 "src/Graphics/Cairo/Drawing/Paths/CairoPathT.hsc" #-}

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

nextPtr :: Ptr a -> Int -> Int -> Ptr a
nextPtr :: forall a. Ptr a -> Int -> Int -> Ptr a
nextPtr Ptr a
p Int
sz Int
al = Ptr a -> Int -> Ptr a
forall a. Ptr a -> Int -> Ptr a
alignPtr (Ptr a -> Int -> Ptr a
forall a b. Ptr a -> Int -> Ptr b
plusPtr Ptr a
p Int
sz) Int
al

nextCairoPathDataT :: Ptr CairoPathDataT -> Ptr CairoPathDataT
nextCairoPathDataT :: Ptr CairoPathDataT -> Ptr CairoPathDataT
nextCairoPathDataT Ptr CairoPathDataT
p = Ptr CairoPathDataT -> Int -> Int -> Ptr CairoPathDataT
forall a. Ptr a -> Int -> Int -> Ptr a
nextPtr Ptr CairoPathDataT
p (Int
16) Int
8
{-# LINE 59 "src/Graphics/Cairo/Drawing/Paths/CairoPathT.hsc" #-}

nextByLength :: Ptr CairoPathDataT -> CInt -> Ptr CairoPathDataT
nextByLength :: Ptr CairoPathDataT -> CInt -> Ptr CairoPathDataT
nextByLength Ptr CairoPathDataT
p CInt
n | CInt
n CInt -> CInt -> Bool
forall a. Ord a => a -> a -> Bool
< CInt
1 = Ptr CairoPathDataT
p
nextByLength Ptr CairoPathDataT
p CInt
n = Ptr CairoPathDataT -> Ptr CairoPathDataT
nextCairoPathDataT (Ptr CairoPathDataT -> Ptr CairoPathDataT)
-> Ptr CairoPathDataT -> Ptr CairoPathDataT
forall a b. (a -> b) -> a -> b
$ Ptr CairoPathDataT -> CInt -> Ptr CairoPathDataT
nextByLength Ptr CairoPathDataT
p (CInt
n CInt -> CInt -> CInt
forall a. Num a => a -> a -> a
- CInt
1)

cairoPathDataTHeaderType :: Ptr CairoPathDataT -> IO Word32
{-# LINE 65 "src/Graphics/Cairo/Drawing/Paths/CairoPathT.hsc" #-}
cairoPathDataTHeaderType = (\hsc_ptr -> peekByteOff hsc_ptr 0)
{-# LINE 66 "src/Graphics/Cairo/Drawing/Paths/CairoPathT.hsc" #-}

cairoPathDataTHeaderLength :: Ptr CairoPathDataT -> IO CInt
cairoPathDataTHeaderLength :: Ptr CairoPathDataT -> IO CInt
cairoPathDataTHeaderLength = (\Ptr CairoPathDataT
hsc_ptr -> Ptr CairoPathDataT -> Int -> IO CInt
forall b. Ptr b -> Int -> IO CInt
forall a b. Storable a => Ptr b -> Int -> IO a
peekByteOff Ptr CairoPathDataT
hsc_ptr Int
4)
{-# LINE 69 "src/Graphics/Cairo/Drawing/Paths/CairoPathT.hsc" #-}

cairoPathDataTPointX, cairoPathDataTPointY :: Ptr CairoPathDataT -> IO CDouble
cairoPathDataTPointX :: Ptr CairoPathDataT -> IO CDouble
cairoPathDataTPointX = (\Ptr CairoPathDataT
hsc_ptr -> Ptr CairoPathDataT -> Int -> IO CDouble
forall b. Ptr b -> Int -> IO CDouble
forall a b. Storable a => Ptr b -> Int -> IO a
peekByteOff Ptr CairoPathDataT
hsc_ptr Int
0)
{-# LINE 72 "src/Graphics/Cairo/Drawing/Paths/CairoPathT.hsc" #-}
cairoPathDataTPointY = (\hsc_ptr -> peekByteOff hsc_ptr 8)
{-# LINE 73 "src/Graphics/Cairo/Drawing/Paths/CairoPathT.hsc" #-}

data Path
	= PathMoveTo CDouble CDouble
	| PathLineTo CDouble CDouble
	| PathCurveTo CDouble CDouble CDouble CDouble CDouble CDouble
	| PathClosePath
	deriving Int -> Path -> ShowS
[Path] -> ShowS
Path -> String
(Int -> Path -> ShowS)
-> (Path -> String) -> ([Path] -> ShowS) -> Show Path
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> Path -> ShowS
showsPrec :: Int -> Path -> ShowS
$cshow :: Path -> String
show :: Path -> String
$cshowList :: [Path] -> ShowS
showList :: [Path] -> ShowS
Show

cairoPathTPathList :: CairoPathT -> IO [Path]
cairoPathTPathList :: CairoPathT -> IO [Path]
cairoPathTPathList (CairoPathT_ ForeignPtr CairoPathT
fp) = ForeignPtr CairoPathT -> (Ptr CairoPathT -> IO [Path]) -> IO [Path]
forall a b. ForeignPtr a -> (Ptr a -> IO b) -> IO b
withForeignPtr ForeignPtr CairoPathT
fp \Ptr CairoPathT
p -> do
	d <- Ptr CairoPathT -> IO (Ptr CairoPathDataT)
cairoPathTData Ptr CairoPathT
p
	n <- cairoPathTNumData p
	cairoPathDataTPathList d n

cairoPathDataTPathList :: Ptr CairoPathDataT -> CInt -> IO [Path]
cairoPathDataTPathList :: Ptr CairoPathDataT -> CInt -> IO [Path]
cairoPathDataTPathList Ptr CairoPathDataT
_ CInt
n | CInt
n CInt -> CInt -> Bool
forall a. Ord a => a -> a -> Bool
< CInt
1 = [Path] -> IO [Path]
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure []
cairoPathDataTPathList Ptr CairoPathDataT
p CInt
n = IO [Path] -> IO [Path]
forall a. IO a -> IO a
unsafeInterleaveIO do
	pth <- IO Path -> IO Path
forall a. IO a -> IO a
unsafeInterleaveIO (IO Path -> IO Path) -> IO Path -> IO Path
forall a b. (a -> b) -> a -> b
$ Ptr CairoPathDataT -> IO Word32
cairoPathDataTHeaderType Ptr CairoPathDataT
p IO Word32 -> (Word32 -> IO Path) -> IO Path
forall a b. IO a -> (a -> IO b) -> IO b
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= \case
		Word32
0 -> CDouble -> CDouble -> Path
PathMoveTo
{-# LINE 92 "src/Graphics/Cairo/Drawing/Paths/CairoPathT.hsc" #-}
			(CDouble -> CDouble -> Path) -> IO CDouble -> IO (CDouble -> Path)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Ptr CairoPathDataT -> IO CDouble
cairoPathDataTPointX Ptr CairoPathDataT
p1 IO (CDouble -> Path) -> IO CDouble -> IO Path
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Ptr CairoPathDataT -> IO CDouble
cairoPathDataTPointY Ptr CairoPathDataT
p1
		Word32
1 -> CDouble -> CDouble -> Path
PathLineTo
{-# LINE 94 "src/Graphics/Cairo/Drawing/Paths/CairoPathT.hsc" #-}
			(CDouble -> CDouble -> Path) -> IO CDouble -> IO (CDouble -> Path)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Ptr CairoPathDataT -> IO CDouble
cairoPathDataTPointX Ptr CairoPathDataT
p1 IO (CDouble -> Path) -> IO CDouble -> IO Path
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Ptr CairoPathDataT -> IO CDouble
cairoPathDataTPointY Ptr CairoPathDataT
p1
		Word32
2 -> CDouble
-> CDouble -> CDouble -> CDouble -> CDouble -> CDouble -> Path
PathCurveTo
{-# LINE 96 "src/Graphics/Cairo/Drawing/Paths/CairoPathT.hsc" #-}
			(CDouble
 -> CDouble -> CDouble -> CDouble -> CDouble -> CDouble -> Path)
-> IO CDouble
-> IO (CDouble -> CDouble -> CDouble -> CDouble -> CDouble -> Path)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Ptr CairoPathDataT -> IO CDouble
cairoPathDataTPointX Ptr CairoPathDataT
p1 IO (CDouble -> CDouble -> CDouble -> CDouble -> CDouble -> Path)
-> IO CDouble
-> IO (CDouble -> CDouble -> CDouble -> CDouble -> Path)
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Ptr CairoPathDataT -> IO CDouble
cairoPathDataTPointY Ptr CairoPathDataT
p1
			IO (CDouble -> CDouble -> CDouble -> CDouble -> Path)
-> IO CDouble -> IO (CDouble -> CDouble -> CDouble -> Path)
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Ptr CairoPathDataT -> IO CDouble
cairoPathDataTPointX Ptr CairoPathDataT
p2 IO (CDouble -> CDouble -> CDouble -> Path)
-> IO CDouble -> IO (CDouble -> CDouble -> Path)
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Ptr CairoPathDataT -> IO CDouble
cairoPathDataTPointY Ptr CairoPathDataT
p2
			IO (CDouble -> CDouble -> Path)
-> IO CDouble -> IO (CDouble -> Path)
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Ptr CairoPathDataT -> IO CDouble
cairoPathDataTPointX Ptr CairoPathDataT
p3 IO (CDouble -> Path) -> IO CDouble -> IO Path
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Ptr CairoPathDataT -> IO CDouble
cairoPathDataTPointY Ptr CairoPathDataT
p3
		Word32
3 -> Path -> IO Path
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure Path
PathClosePath
{-# LINE 100 "src/Graphics/Cairo/Drawing/Paths/CairoPathT.hsc" #-}
		Word32
_ -> String -> IO Path
forall a. HasCallStack => String -> a
error String
"no such path"
	ln <- cairoPathDataTHeaderLength p
	(pth :) <$> cairoPathDataTPathList (nextByLength p ln) (n - ln)
	where
	p1 :: Ptr CairoPathDataT
p1 = Ptr CairoPathDataT -> CInt -> Ptr CairoPathDataT
nextByLength Ptr CairoPathDataT
p CInt
1
	p2 :: Ptr CairoPathDataT
p2 = Ptr CairoPathDataT -> CInt -> Ptr CairoPathDataT
nextByLength Ptr CairoPathDataT
p CInt
2
	p3 :: Ptr CairoPathDataT
p3 = Ptr CairoPathDataT -> CInt -> Ptr CairoPathDataT
nextByLength Ptr CairoPathDataT
p CInt
3

pathToNumData :: Path -> Int
pathToNumData :: Path -> Int
pathToNumData = \case
	PathMoveTo CDouble
_ CDouble
_ -> Int
2; PathLineTo CDouble
_ CDouble
_ -> Int
2; PathCurveTo CDouble
_ CDouble
_ CDouble
_ CDouble
_ CDouble
_ CDouble
_ -> Int
4; Path
PathClosePath -> Int
1

pathToCairoPathData :: Ptr CairoPathDataT -> Path -> IO ()
pathToCairoPathData :: Ptr CairoPathDataT -> Path -> IO ()
pathToCairoPathData Ptr CairoPathDataT
p = \case
	PathMoveTo CDouble
x CDouble
y -> do
		(\Ptr CairoPathDataT
hsc_ptr -> Ptr CairoPathDataT -> Int -> Word32 -> IO ()
forall b. Ptr b -> Int -> Word32 -> IO ()
forall a b. Storable a => Ptr b -> Int -> a -> IO ()
pokeByteOff Ptr CairoPathDataT
hsc_ptr Int
0) Ptr CairoPathDataT
p (Word32
0 :: Word32)
{-# LINE 116 "src/Graphics/Cairo/Drawing/Paths/CairoPathT.hsc" #-}
		(\Ptr CairoPathDataT
hsc_ptr -> Ptr CairoPathDataT -> Int -> CInt -> IO ()
forall b. Ptr b -> Int -> CInt -> IO ()
forall a b. Storable a => Ptr b -> Int -> a -> IO ()
pokeByteOff Ptr CairoPathDataT
hsc_ptr Int
4) Ptr CairoPathDataT
p (CInt
2 :: CInt)
{-# LINE 117 "src/Graphics/Cairo/Drawing/Paths/CairoPathT.hsc" #-}
		(\Ptr CairoPathDataT
hsc_ptr -> Ptr CairoPathDataT -> Int -> CDouble -> IO ()
forall b. Ptr b -> Int -> CDouble -> IO ()
forall a b. Storable a => Ptr b -> Int -> a -> IO ()
pokeByteOff Ptr CairoPathDataT
hsc_ptr Int
0) Ptr CairoPathDataT
p1 CDouble
x
{-# LINE 118 "src/Graphics/Cairo/Drawing/Paths/CairoPathT.hsc" #-}
		(\Ptr CairoPathDataT
hsc_ptr -> Ptr CairoPathDataT -> Int -> CDouble -> IO ()
forall b. Ptr b -> Int -> CDouble -> IO ()
forall a b. Storable a => Ptr b -> Int -> a -> IO ()
pokeByteOff Ptr CairoPathDataT
hsc_ptr Int
8) Ptr CairoPathDataT
p1 CDouble
y
{-# LINE 119 "src/Graphics/Cairo/Drawing/Paths/CairoPathT.hsc" #-}
	PathLineTo CDouble
x CDouble
y -> do
		(\Ptr CairoPathDataT
hsc_ptr -> Ptr CairoPathDataT -> Int -> Word32 -> IO ()
forall b. Ptr b -> Int -> Word32 -> IO ()
forall a b. Storable a => Ptr b -> Int -> a -> IO ()
pokeByteOff Ptr CairoPathDataT
hsc_ptr Int
0) Ptr CairoPathDataT
p (Word32
1 :: Word32)
{-# LINE 121 "src/Graphics/Cairo/Drawing/Paths/CairoPathT.hsc" #-}
		(\Ptr CairoPathDataT
hsc_ptr -> Ptr CairoPathDataT -> Int -> CInt -> IO ()
forall b. Ptr b -> Int -> CInt -> IO ()
forall a b. Storable a => Ptr b -> Int -> a -> IO ()
pokeByteOff Ptr CairoPathDataT
hsc_ptr Int
4) Ptr CairoPathDataT
p (CInt
2 :: CInt)
{-# LINE 122 "src/Graphics/Cairo/Drawing/Paths/CairoPathT.hsc" #-}
		(\Ptr CairoPathDataT
hsc_ptr -> Ptr CairoPathDataT -> Int -> CDouble -> IO ()
forall b. Ptr b -> Int -> CDouble -> IO ()
forall a b. Storable a => Ptr b -> Int -> a -> IO ()
pokeByteOff Ptr CairoPathDataT
hsc_ptr Int
0) Ptr CairoPathDataT
p1 CDouble
x
{-# LINE 123 "src/Graphics/Cairo/Drawing/Paths/CairoPathT.hsc" #-}
		(\Ptr CairoPathDataT
hsc_ptr -> Ptr CairoPathDataT -> Int -> CDouble -> IO ()
forall b. Ptr b -> Int -> CDouble -> IO ()
forall a b. Storable a => Ptr b -> Int -> a -> IO ()
pokeByteOff Ptr CairoPathDataT
hsc_ptr Int
8) Ptr CairoPathDataT
p1 CDouble
y
{-# LINE 124 "src/Graphics/Cairo/Drawing/Paths/CairoPathT.hsc" #-}
	PathCurveTo CDouble
x1 CDouble
y1 CDouble
x2 CDouble
y2 CDouble
x3 CDouble
y3 -> do
		(\Ptr CairoPathDataT
hsc_ptr -> Ptr CairoPathDataT -> Int -> Word32 -> IO ()
forall b. Ptr b -> Int -> Word32 -> IO ()
forall a b. Storable a => Ptr b -> Int -> a -> IO ()
pokeByteOff Ptr CairoPathDataT
hsc_ptr Int
0) Ptr CairoPathDataT
p (Word32
2 :: Word32)
{-# LINE 126 "src/Graphics/Cairo/Drawing/Paths/CairoPathT.hsc" #-}
		(\Ptr CairoPathDataT
hsc_ptr -> Ptr CairoPathDataT -> Int -> CInt -> IO ()
forall b. Ptr b -> Int -> CInt -> IO ()
forall a b. Storable a => Ptr b -> Int -> a -> IO ()
pokeByteOff Ptr CairoPathDataT
hsc_ptr Int
4) Ptr CairoPathDataT
p (CInt
4 :: CInt)
{-# LINE 127 "src/Graphics/Cairo/Drawing/Paths/CairoPathT.hsc" #-}
		(\Ptr CairoPathDataT
hsc_ptr -> Ptr CairoPathDataT -> Int -> CDouble -> IO ()
forall b. Ptr b -> Int -> CDouble -> IO ()
forall a b. Storable a => Ptr b -> Int -> a -> IO ()
pokeByteOff Ptr CairoPathDataT
hsc_ptr Int
0) Ptr CairoPathDataT
p1 CDouble
x1
{-# LINE 128 "src/Graphics/Cairo/Drawing/Paths/CairoPathT.hsc" #-}
		(\Ptr CairoPathDataT
hsc_ptr -> Ptr CairoPathDataT -> Int -> CDouble -> IO ()
forall b. Ptr b -> Int -> CDouble -> IO ()
forall a b. Storable a => Ptr b -> Int -> a -> IO ()
pokeByteOff Ptr CairoPathDataT
hsc_ptr Int
8) Ptr CairoPathDataT
p1 CDouble
y1
{-# LINE 129 "src/Graphics/Cairo/Drawing/Paths/CairoPathT.hsc" #-}
		(\Ptr CairoPathDataT
hsc_ptr -> Ptr CairoPathDataT -> Int -> CDouble -> IO ()
forall b. Ptr b -> Int -> CDouble -> IO ()
forall a b. Storable a => Ptr b -> Int -> a -> IO ()
pokeByteOff Ptr CairoPathDataT
hsc_ptr Int
0) Ptr CairoPathDataT
p2 CDouble
x2
{-# LINE 130 "src/Graphics/Cairo/Drawing/Paths/CairoPathT.hsc" #-}
		(\Ptr CairoPathDataT
hsc_ptr -> Ptr CairoPathDataT -> Int -> CDouble -> IO ()
forall b. Ptr b -> Int -> CDouble -> IO ()
forall a b. Storable a => Ptr b -> Int -> a -> IO ()
pokeByteOff Ptr CairoPathDataT
hsc_ptr Int
8) Ptr CairoPathDataT
p2 CDouble
y2
{-# LINE 131 "src/Graphics/Cairo/Drawing/Paths/CairoPathT.hsc" #-}
		(\Ptr CairoPathDataT
hsc_ptr -> Ptr CairoPathDataT -> Int -> CDouble -> IO ()
forall b. Ptr b -> Int -> CDouble -> IO ()
forall a b. Storable a => Ptr b -> Int -> a -> IO ()
pokeByteOff Ptr CairoPathDataT
hsc_ptr Int
0) Ptr CairoPathDataT
p3 CDouble
x3
{-# LINE 132 "src/Graphics/Cairo/Drawing/Paths/CairoPathT.hsc" #-}
		(\Ptr CairoPathDataT
hsc_ptr -> Ptr CairoPathDataT -> Int -> CDouble -> IO ()
forall b. Ptr b -> Int -> CDouble -> IO ()
forall a b. Storable a => Ptr b -> Int -> a -> IO ()
pokeByteOff Ptr CairoPathDataT
hsc_ptr Int
8) Ptr CairoPathDataT
p3 CDouble
y3
{-# LINE 133 "src/Graphics/Cairo/Drawing/Paths/CairoPathT.hsc" #-}
	Path
PathClosePath -> do
		(\Ptr CairoPathDataT
hsc_ptr -> Ptr CairoPathDataT -> Int -> Word32 -> IO ()
forall b. Ptr b -> Int -> Word32 -> IO ()
forall a b. Storable a => Ptr b -> Int -> a -> IO ()
pokeByteOff Ptr CairoPathDataT
hsc_ptr Int
0) Ptr CairoPathDataT
p (Word32
3 :: Word32)
{-# LINE 135 "src/Graphics/Cairo/Drawing/Paths/CairoPathT.hsc" #-}
		(\Ptr CairoPathDataT
hsc_ptr -> Ptr CairoPathDataT -> Int -> CInt -> IO ()
forall b. Ptr b -> Int -> CInt -> IO ()
forall a b. Storable a => Ptr b -> Int -> a -> IO ()
pokeByteOff Ptr CairoPathDataT
hsc_ptr Int
4) Ptr CairoPathDataT
p (CInt
1 :: CInt)
{-# LINE 136 "src/Graphics/Cairo/Drawing/Paths/CairoPathT.hsc" #-}
	where
	p1 :: Ptr CairoPathDataT
p1 = Ptr CairoPathDataT -> CInt -> Ptr CairoPathDataT
nextByLength Ptr CairoPathDataT
p CInt
1
	p2 :: Ptr CairoPathDataT
p2 = Ptr CairoPathDataT -> CInt -> Ptr CairoPathDataT
nextByLength Ptr CairoPathDataT
p CInt
2
	p3 :: Ptr CairoPathDataT
p3 = Ptr CairoPathDataT -> CInt -> Ptr CairoPathDataT
nextByLength Ptr CairoPathDataT
p CInt
3

calcAlignedSize :: Int -> Int -> Int
calcAlignedSize :: Int -> Int -> Int
calcAlignedSize Int
sz Int
al = (Int
sz Int -> Int -> Int
forall a. Integral a => a -> a -> a
`div` Int
al Int -> Int -> Int
forall a. Num a => a -> a -> a
+ Int -> Int
forall a. Num a => a -> a
signum (Int
sz Int -> Int -> Int
forall a. Integral a => a -> a -> a
`mod` Int
al)) Int -> Int -> Int
forall a. Num a => a -> a -> a
* Int
al

cairoPathDataTSize :: Int
cairoPathDataTSize :: Int
cairoPathDataTSize = Int -> Int -> Int
calcAlignedSize (Int
16) Int
8
{-# LINE 146 "src/Graphics/Cairo/Drawing/Paths/CairoPathT.hsc" #-}

pathListToCairoPathT :: [Path] -> IO CairoPathT
pathListToCairoPathT :: [Path] -> IO CairoPathT
pathListToCairoPathT [Path]
pths = ForeignPtr CairoPathT -> CairoPathT
CairoPathT_ (ForeignPtr CairoPathT -> CairoPathT)
-> IO (ForeignPtr CairoPathT) -> IO CairoPathT
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> do
	pd <- Int -> IO (Ptr CairoPathDataT)
forall a. Int -> IO (Ptr a)
mallocBytes (Int -> IO (Ptr CairoPathDataT)) -> Int -> IO (Ptr CairoPathDataT)
forall a b. (a -> b) -> a -> b
$ [Int] -> Int
forall a. Num a => [a] -> a
forall (t :: * -> *) a. (Foldable t, Num a) => t a -> a
sum (Path -> Int
pathToNumData (Path -> Int) -> [Path] -> [Int]
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> [Path]
pths) Int -> Int -> Int
forall a. Num a => a -> a -> a
* Int
cairoPathDataTSize
	pathListToCairoPathDataT pd pths
	p <- mallocBytes (24)
{-# LINE 152 "src/Graphics/Cairo/Drawing/Paths/CairoPathT.hsc" #-}
	(\Ptr CairoPathT
hsc_ptr -> Ptr CairoPathT -> Int -> Word32 -> IO ()
forall b. Ptr b -> Int -> Word32 -> IO ()
forall a b. Storable a => Ptr b -> Int -> a -> IO ()
pokeByteOff Ptr CairoPathT
hsc_ptr Int
0) p (0 :: Word32)
{-# LINE 153 "src/Graphics/Cairo/Drawing/Paths/CairoPathT.hsc" #-}
	(\Ptr CairoPathT
hsc_ptr -> Ptr CairoPathT -> Int -> Ptr CairoPathDataT -> IO ()
forall b. Ptr b -> Int -> Ptr CairoPathDataT -> IO ()
forall a b. Storable a => Ptr b -> Int -> a -> IO ()
pokeByteOff Ptr CairoPathT
hsc_ptr Int
8) p pd
{-# LINE 154 "src/Graphics/Cairo/Drawing/Paths/CairoPathT.hsc" #-}
	(\Ptr CairoPathT
hsc_ptr -> Ptr CairoPathT -> Int -> Int -> IO ()
forall b. Ptr b -> Int -> Int -> IO ()
forall a b. Storable a => Ptr b -> Int -> a -> IO ()
pokeByteOff Ptr CairoPathT
hsc_ptr Int
16) p $ sum (pathToNumData <$> pths)
{-# LINE 155 "src/Graphics/Cairo/Drawing/Paths/CairoPathT.hsc" #-}
	newForeignPtr p $ free pd >> free p

pathListToCairoPathDataT :: Ptr CairoPathDataT -> [Path] -> IO ()
pathListToCairoPathDataT :: Ptr CairoPathDataT -> [Path] -> IO ()
pathListToCairoPathDataT Ptr CairoPathDataT
pd = \case
	[] -> () -> IO ()
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure ()
	Path
pth : [Path]
pths -> Ptr CairoPathDataT -> Path -> IO ()
pathToCairoPathData Ptr CairoPathDataT
pd Path
pth IO () -> IO () -> IO ()
forall a b. IO a -> IO b -> IO b
forall (m :: * -> *) a b. Monad m => m a -> m b -> m b
>> Ptr CairoPathDataT -> [Path] -> IO ()
pathListToCairoPathDataT (Ptr CairoPathDataT
pd Ptr CairoPathDataT -> Int -> Ptr CairoPathDataT
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` (Int
cairoPathDataTSize Int -> Int -> Int
forall a. Num a => a -> a -> a
* Path -> Int
pathToNumData Path
pth)) [Path]
pths

cairoPathTCheckPaths :: CairoPathT -> [Word32 -> Bool] -> IO Bool
{-# LINE 163 "src/Graphics/Cairo/Drawing/Paths/CairoPathT.hsc" #-}
cairoPathTCheckPaths (CairoPathT_ fpth) ts = withForeignPtr fpth \ppth -> do
	d <- cairoPathTData ppth
	n <- cairoPathTNumData ppth
	cairoPathDataCheckPaths d ts n

cairoPathDataCheckPaths :: Ptr CairoPathDataT -> [Word32 -> Bool] -> CInt -> IO Bool
{-# LINE 169 "src/Graphics/Cairo/Drawing/Paths/CairoPathT.hsc" #-}
cairoPathDataCheckPaths _ [] 0 = pure True
cairoPathDataCheckPaths _ [] _ = pure False
cairoPathDataCheckPaths _ _ 0 = pure False
cairoPathDataCheckPaths p (t : ts) n = do
	b <- t <$> cairoPathDataTHeaderType p
	ln <- cairoPathDataTHeaderLength p
	(b &&) <$> unsafeInterleaveIO (cairoPathDataCheckPaths (nextByLength p ln) ts (n - ln))

cairoPathTGetGoal :: CairoPathT -> Int -> IO (Maybe (CDouble, CDouble))
cairoPathTGetGoal :: CairoPathT -> Int -> IO (Maybe (CDouble, CDouble))
cairoPathTGetGoal (CairoPathT_ ForeignPtr CairoPathT
fpth) Int
i = ForeignPtr CairoPathT
-> (Ptr CairoPathT -> IO (Maybe (CDouble, CDouble)))
-> IO (Maybe (CDouble, CDouble))
forall a b. ForeignPtr a -> (Ptr a -> IO b) -> IO b
withForeignPtr ForeignPtr CairoPathT
fpth \Ptr CairoPathT
ppth -> do
	d <- Ptr CairoPathT -> IO (Ptr CairoPathDataT)
cairoPathTData Ptr CairoPathT
ppth
	n <- cairoPathTNumData ppth
	cairoPathDataTGetGoal d i n

cairoPathDataTGetGoal :: Ptr CairoPathDataT -> Int -> CInt -> IO (Maybe (CDouble, CDouble))
cairoPathDataTGetGoal :: Ptr CairoPathDataT -> Int -> CInt -> IO (Maybe (CDouble, CDouble))
cairoPathDataTGetGoal Ptr CairoPathDataT
_ Int
_ CInt
n | CInt
n CInt -> CInt -> Bool
forall a. Ord a => a -> a -> Bool
< CInt
1 = Maybe (CDouble, CDouble) -> IO (Maybe (CDouble, CDouble))
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure Maybe (CDouble, CDouble)
forall a. Maybe a
Nothing
cairoPathDataTGetGoal Ptr CairoPathDataT
p Int
0 CInt
_ = IO (Maybe (CDouble, CDouble)) -> IO (Maybe (CDouble, CDouble))
forall a. IO a -> IO a
unsafeInterleaveIO do
	Ptr CairoPathDataT -> IO Word32
cairoPathDataTHeaderType Ptr CairoPathDataT
p IO Word32
-> (Word32 -> IO (Maybe (CDouble, CDouble)))
-> IO (Maybe (CDouble, CDouble))
forall a b. IO a -> (a -> IO b) -> IO b
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= \case
		Word32
0 -> (\CDouble
x CDouble
y -> (CDouble, CDouble) -> Maybe (CDouble, CDouble)
forall a. a -> Maybe a
Just (CDouble
x, CDouble
y))
{-# LINE 188 "src/Graphics/Cairo/Drawing/Paths/CairoPathT.hsc" #-}
			(CDouble -> CDouble -> Maybe (CDouble, CDouble))
-> IO CDouble -> IO (CDouble -> Maybe (CDouble, CDouble))
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Ptr CairoPathDataT -> IO CDouble
cairoPathDataTPointX Ptr CairoPathDataT
p1 IO (CDouble -> Maybe (CDouble, CDouble))
-> IO CDouble -> IO (Maybe (CDouble, 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 CairoPathDataT -> IO CDouble
cairoPathDataTPointY Ptr CairoPathDataT
p1
		Word32
1 -> (\CDouble
x CDouble
y -> (CDouble, CDouble) -> Maybe (CDouble, CDouble)
forall a. a -> Maybe a
Just (CDouble
x, CDouble
y))
{-# LINE 190 "src/Graphics/Cairo/Drawing/Paths/CairoPathT.hsc" #-}
			(CDouble -> CDouble -> Maybe (CDouble, CDouble))
-> IO CDouble -> IO (CDouble -> Maybe (CDouble, CDouble))
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Ptr CairoPathDataT -> IO CDouble
cairoPathDataTPointX Ptr CairoPathDataT
p1 IO (CDouble -> Maybe (CDouble, CDouble))
-> IO CDouble -> IO (Maybe (CDouble, 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 CairoPathDataT -> IO CDouble
cairoPathDataTPointY Ptr CairoPathDataT
p1
		Word32
2 -> (\CDouble
x CDouble
y -> (CDouble, CDouble) -> Maybe (CDouble, CDouble)
forall a. a -> Maybe a
Just (CDouble
x, CDouble
y))
{-# LINE 192 "src/Graphics/Cairo/Drawing/Paths/CairoPathT.hsc" #-}
			(CDouble -> CDouble -> Maybe (CDouble, CDouble))
-> IO CDouble -> IO (CDouble -> Maybe (CDouble, CDouble))
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Ptr CairoPathDataT -> IO CDouble
cairoPathDataTPointX Ptr CairoPathDataT
p3 IO (CDouble -> Maybe (CDouble, CDouble))
-> IO CDouble -> IO (Maybe (CDouble, 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 CairoPathDataT -> IO CDouble
cairoPathDataTPointY Ptr CairoPathDataT
p3
		Word32
3 -> Maybe (CDouble, CDouble) -> IO (Maybe (CDouble, CDouble))
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure Maybe (CDouble, CDouble)
forall a. Maybe a
Nothing
{-# LINE 194 "src/Graphics/Cairo/Drawing/Paths/CairoPathT.hsc" #-}
		Word32
_ -> String -> IO (Maybe (CDouble, CDouble))
forall a. HasCallStack => String -> a
error String
"no such path"
	where p1 :: Ptr CairoPathDataT
p1 = Ptr CairoPathDataT -> CInt -> Ptr CairoPathDataT
nextByLength Ptr CairoPathDataT
p CInt
1; p3 :: Ptr CairoPathDataT
p3 = Ptr CairoPathDataT -> CInt -> Ptr CairoPathDataT
nextByLength Ptr CairoPathDataT
p CInt
3
cairoPathDataTGetGoal Ptr CairoPathDataT
p Int
i CInt
n = do
	ln <- Ptr CairoPathDataT -> IO CInt
cairoPathDataTHeaderLength Ptr CairoPathDataT
p
	cairoPathDataTGetGoal (nextByLength p ln) (i - 1) (n - ln)

lineOrCurve :: Word32 -> Bool
{-# LINE 201 "src/Graphics/Cairo/Drawing/Paths/CairoPathT.hsc" #-}
lineOrCurve = (||) <$> (== 1) <*> (== 2)
{-# LINE 202 "src/Graphics/Cairo/Drawing/Paths/CairoPathT.hsc" #-}

isCairoPatchPath :: CairoPathT -> IO Bool
isCairoPatchPath :: CairoPathT -> IO Bool
isCairoPatchPath CairoPathT
pth = do
	b1 <- CairoPathT -> [Word32 -> Bool] -> IO Bool
cairoPathTCheckPaths CairoPathT
pth [
		(Word32 -> Word32 -> Bool
forall a. Eq a => a -> a -> Bool
== Word32
0), Word32 -> Bool
lineOrCurve, Word32 -> Bool
lineOrCurve, Word32 -> Bool
lineOrCurve,
{-# LINE 207 "src/Graphics/Cairo/Drawing/Paths/CairoPathT.hsc" #-}
		(Word32 -> Word32 -> Bool
forall a. Eq a => a -> a -> Bool
== Word32
3) ]
{-# LINE 208 "src/Graphics/Cairo/Drawing/Paths/CairoPathT.hsc" #-}
	b2 <- cairoPathTCheckPaths pth [
		(== 0), lineOrCurve, lineOrCurve, lineOrCurve, lineOrCurve ]
{-# LINE 210 "src/Graphics/Cairo/Drawing/Paths/CairoPathT.hsc" #-}
	b3 <- cairoPathTGetGoal pth 0 >>= \case
		Maybe (CDouble, CDouble)
Nothing -> Bool -> IO Bool
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure Bool
False
		Just (CDouble
x0, CDouble
y0) -> CairoPathT -> Int -> IO (Maybe (CDouble, CDouble))
cairoPathTGetGoal CairoPathT
pth Int
4 IO (Maybe (CDouble, CDouble))
-> (Maybe (CDouble, CDouble) -> IO Bool) -> IO Bool
forall a b. IO a -> (a -> IO b) -> IO b
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= \case
			Maybe (CDouble, CDouble)
Nothing -> Bool -> IO Bool
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure Bool
False
			Just (CDouble
xc, CDouble
yc) -> Bool -> IO Bool
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (Bool -> IO Bool) -> Bool -> IO Bool
forall a b. (a -> b) -> a -> b
$ CDouble
xc CDouble -> CDouble -> Bool
forall a. Eq a => a -> a -> Bool
== CDouble
x0 Bool -> Bool -> Bool
&& CDouble
yc CDouble -> CDouble -> Bool
forall a. Eq a => a -> a -> Bool
== CDouble
y0
	pure $ b1 || (b2 && b3)

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

mkCairoPatchPathT :: Ptr CairoPathT -> IO CairoPatchPathT
mkCairoPatchPathT :: Ptr CairoPathT -> IO CairoPatchPathT
mkCairoPatchPathT Ptr CairoPathT
p =
	ForeignPtr CairoPathT -> CairoPatchPathT
CairoPatchPathT_ (ForeignPtr CairoPathT -> CairoPatchPathT)
-> IO (ForeignPtr CairoPathT) -> IO CairoPatchPathT
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Ptr CairoPathT -> IO () -> IO (ForeignPtr CairoPathT)
forall a. Ptr a -> IO () -> IO (ForeignPtr a)
newForeignPtr Ptr CairoPathT
p (Ptr CairoPathT -> IO ()
c_cairo_path_destroy Ptr CairoPathT
p)
		IO CairoPatchPathT -> IO () -> IO CairoPatchPathT
forall a b. IO a -> IO b -> IO a
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f a
<* (Word32 -> IO ()
cairoStatusToThrowError (Word32 -> IO ()) -> IO Word32 -> IO ()
forall (m :: * -> *) a b. Monad m => (a -> m b) -> m a -> m b
=<< Ptr CairoPathT -> IO Word32
cairoPathTStatus Ptr CairoPathT
p)

pattern CairoPathTPatch :: CairoPatchPathT -> CairoPathT
pattern $mCairoPathTPatch :: forall {r}.
CairoPathT -> (CairoPatchPathT -> r) -> ((# #) -> r) -> r
$bCairoPathTPatch :: CairoPatchPathT -> CairoPathT
CairoPathTPatch ppth <- (unsafePerformIO . cairoPathTPatch -> Just ppth) where
	CairoPathTPatch (CairoPatchPathT_ ForeignPtr CairoPathT
fpth) = ForeignPtr CairoPathT -> CairoPathT
CairoPathT_ ForeignPtr CairoPathT
fpth

cairoPathTPatch :: CairoPathT -> IO (Maybe CairoPatchPathT)
cairoPathTPatch :: CairoPathT -> IO (Maybe CairoPatchPathT)
cairoPathTPatch pth :: CairoPathT
pth@(CairoPathT_ ForeignPtr CairoPathT
fpth) =
	Maybe CairoPatchPathT
-> Maybe CairoPatchPathT -> Bool -> Maybe CairoPatchPathT
forall a. a -> a -> Bool -> a
bool Maybe CairoPatchPathT
forall a. Maybe a
Nothing (CairoPatchPathT -> Maybe CairoPatchPathT
forall a. a -> Maybe a
Just (CairoPatchPathT -> Maybe CairoPatchPathT)
-> CairoPatchPathT -> Maybe CairoPatchPathT
forall a b. (a -> b) -> a -> b
$ ForeignPtr CairoPathT -> CairoPatchPathT
CairoPatchPathT_ ForeignPtr CairoPathT
fpth) (Bool -> Maybe CairoPatchPathT)
-> IO Bool -> IO (Maybe CairoPatchPathT)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> CairoPathT -> IO Bool
isCairoPatchPath CairoPathT
pth

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

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

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

pattern CairoPatchPathT :: MoveTo -> LineCurveTo -> LineCurveTo -> LineCurveTo -> CloseTo -> CairoPatchPathT
pattern $mCairoPatchPathT :: forall {r}.
CairoPatchPathT
-> (MoveTo
    -> LineCurveTo -> LineCurveTo -> LineCurveTo -> CloseTo -> r)
-> ((# #) -> r)
-> r
$bCairoPatchPathT :: MoveTo
-> LineCurveTo
-> LineCurveTo
-> LineCurveTo
-> CloseTo
-> CairoPatchPathT
CairoPatchPathT mt lct1 lct2 lct3 cls <- (unsafePerformIO . drawFromCairoPatchPathT -> (mt, lct1, lct2, lct3, cls)) where
	CairoPatchPathT MoveTo
mt LineCurveTo
lct1 LineCurveTo
lct2 LineCurveTo
lct3 CloseTo
cls = IO CairoPatchPathT -> CairoPatchPathT
forall a. IO a -> a
unsafePerformIO (IO CairoPatchPathT -> CairoPatchPathT)
-> IO CairoPatchPathT -> CairoPatchPathT
forall a b. (a -> b) -> a -> b
$ MoveTo
-> LineCurveTo
-> LineCurveTo
-> LineCurveTo
-> CloseTo
-> IO CairoPatchPathT
patchPathsToCairoPatchPathT MoveTo
mt LineCurveTo
lct1 LineCurveTo
lct2 LineCurveTo
lct3 CloseTo
cls

drawFromCairoPatchPathT :: CairoPatchPathT -> IO (MoveTo, LineCurveTo, LineCurveTo, LineCurveTo, CloseTo)
drawFromCairoPatchPathT :: CairoPatchPathT
-> IO (MoveTo, LineCurveTo, LineCurveTo, LineCurveTo, CloseTo)
drawFromCairoPatchPathT (CairoPatchPathT_ ForeignPtr CairoPathT
fpth) = ForeignPtr CairoPathT
-> (Ptr CairoPathT
    -> IO (MoveTo, LineCurveTo, LineCurveTo, LineCurveTo, CloseTo))
-> IO (MoveTo, LineCurveTo, LineCurveTo, LineCurveTo, CloseTo)
forall a b. ForeignPtr a -> (Ptr a -> IO b) -> IO b
withForeignPtr ForeignPtr CairoPathT
fpth \Ptr CairoPathT
ppth -> do
	d <- Ptr CairoPathT -> IO (Ptr CairoPathDataT)
cairoPathTData Ptr CairoPathT
ppth
	n <- cairoPathTNumData ppth
	drawFromCairoPathDataT d n >>= \case
		(Just (MoveTo, LineCurveTo, LineCurveTo, LineCurveTo, CloseTo)
r, CInt
0) -> (MoveTo, LineCurveTo, LineCurveTo, LineCurveTo, CloseTo)
-> IO (MoveTo, LineCurveTo, LineCurveTo, LineCurveTo, CloseTo)
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (MoveTo, LineCurveTo, LineCurveTo, LineCurveTo, CloseTo)
r
		(Maybe (MoveTo, LineCurveTo, LineCurveTo, LineCurveTo, CloseTo),
 CInt)
_ -> String
-> IO (MoveTo, LineCurveTo, LineCurveTo, LineCurveTo, CloseTo)
forall a. HasCallStack => String -> a
error String
"badbadbad"
		
drawFromCairoPathDataT :: Ptr CairoPathDataT -> CInt ->
	IO (Maybe (MoveTo, LineCurveTo, LineCurveTo, LineCurveTo, CloseTo), CInt)
drawFromCairoPathDataT :: Ptr CairoPathDataT
-> CInt
-> IO
     (Maybe (MoveTo, LineCurveTo, LineCurveTo, LineCurveTo, CloseTo),
      CInt)
drawFromCairoPathDataT Ptr CairoPathDataT
p0 CInt
n0 = do
	(mmt, pn1) <- Ptr CairoPathDataT
-> CInt -> IO (Maybe MoveTo, (Ptr CairoPathDataT, CInt))
drawMoveToFromCairoPathDataT Ptr CairoPathDataT
p0 CInt
n0
	(mlct1, pn2) <- uncurry drawLineCurveToFromCairoPathDataT pn1
	(mlct2, pn3) <- uncurry drawLineCurveToFromCairoPathDataT pn2
	(mlct3, pn4) <- uncurry drawLineCurveToFromCairoPathDataT pn3
	(mcls_, (_p5, n5)) <- uncurry drawCloseToFromCairoPathDataT pn4
	let	mcls = case Maybe MoveTo
mmt of
			Maybe MoveTo
Nothing -> String -> Maybe CloseTo
forall a. HasCallStack => String -> a
error String
"bad"
			Just (MoveTo CDouble
x0 CDouble
y0) -> case Maybe (CloseTo, Maybe (CDouble, CDouble))
mcls_ of
				Maybe (CloseTo, Maybe (CDouble, CDouble))
Nothing -> String -> Maybe CloseTo
forall a. HasCallStack => String -> a
error String
"bad"
				Just (CloseTo
m, Maybe (CDouble, CDouble)
Nothing) -> CloseTo -> Maybe CloseTo
forall a. a -> Maybe a
Just CloseTo
m
				Just (CloseTo
m, Just (CDouble
x1, CDouble
y1))
					| CDouble
x0 CDouble -> CDouble -> Bool
forall a. Eq a => a -> a -> Bool
== CDouble
x1 Bool -> Bool -> Bool
&& CDouble
y0 CDouble -> CDouble -> Bool
forall a. Eq a => a -> a -> Bool
== CDouble
y1 -> CloseTo -> Maybe CloseTo
forall a. a -> Maybe a
Just CloseTo
m
					| Bool
otherwise -> String -> Maybe CloseTo
forall a. HasCallStack => String -> a
error String
"bad"
	if n5 /= 0 then error "bad" else pure 
		. (, n5) $ (,,,,) <$> mmt <*> mlct1 <*> mlct2 <*> mlct3 <*> mcls

drawMoveToFromCairoPathDataT :: Ptr CairoPathDataT -> CInt -> IO (Maybe MoveTo, (Ptr CairoPathDataT, CInt))
drawMoveToFromCairoPathDataT :: Ptr CairoPathDataT
-> CInt -> IO (Maybe MoveTo, (Ptr CairoPathDataT, CInt))
drawMoveToFromCairoPathDataT Ptr CairoPathDataT
p CInt
n = do
	mt <- Ptr CairoPathDataT -> IO Word32
cairoPathDataTHeaderType Ptr CairoPathDataT
p IO Word32 -> (Word32 -> IO (Maybe MoveTo)) -> IO (Maybe MoveTo)
forall a b. IO a -> (a -> IO b) -> IO b
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= \case
		Word32
0 -> MoveTo -> Maybe MoveTo
forall a. a -> Maybe a
Just
{-# LINE 279 "src/Graphics/Cairo/Drawing/Paths/CairoPathT.hsc" #-}
			(MoveTo -> Maybe MoveTo) -> IO MoveTo -> IO (Maybe MoveTo)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> (CDouble -> CDouble -> MoveTo
MoveTo (CDouble -> CDouble -> MoveTo)
-> IO CDouble -> IO (CDouble -> MoveTo)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Ptr CairoPathDataT -> IO CDouble
cairoPathDataTPointX Ptr CairoPathDataT
p1 IO (CDouble -> MoveTo) -> IO CDouble -> IO MoveTo
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Ptr CairoPathDataT -> IO CDouble
cairoPathDataTPointY Ptr CairoPathDataT
p1)
		Word32
_ -> Maybe MoveTo -> IO (Maybe MoveTo)
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure Maybe MoveTo
forall a. Maybe a
Nothing
	ln <- cairoPathDataTHeaderLength p
	if n - ln < 0 then error "bad" else pure (mt, (nextByLength p ln, n - ln))
	where p1 :: Ptr CairoPathDataT
p1 = Ptr CairoPathDataT -> CInt -> Ptr CairoPathDataT
nextByLength Ptr CairoPathDataT
p CInt
1

drawLineCurveToFromCairoPathDataT :: Ptr CairoPathDataT -> CInt -> IO (Maybe LineCurveTo, (Ptr CairoPathDataT, CInt))
drawLineCurveToFromCairoPathDataT :: Ptr CairoPathDataT
-> CInt -> IO (Maybe LineCurveTo, (Ptr CairoPathDataT, CInt))
drawLineCurveToFromCairoPathDataT Ptr CairoPathDataT
p CInt
n = do
	lct <- Ptr CairoPathDataT -> IO Word32
cairoPathDataTHeaderType Ptr CairoPathDataT
p IO Word32
-> (Word32 -> IO (Maybe LineCurveTo)) -> IO (Maybe LineCurveTo)
forall a b. IO a -> (a -> IO b) -> IO b
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= \case
		Word32
1 -> LineCurveTo -> Maybe LineCurveTo
forall a. a -> Maybe a
Just
{-# LINE 289 "src/Graphics/Cairo/Drawing/Paths/CairoPathT.hsc" #-}
			(LineCurveTo -> Maybe LineCurveTo)
-> IO LineCurveTo -> IO (Maybe LineCurveTo)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> (CDouble -> CDouble -> LineCurveTo
LineTo (CDouble -> CDouble -> LineCurveTo)
-> IO CDouble -> IO (CDouble -> LineCurveTo)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Ptr CairoPathDataT -> IO CDouble
cairoPathDataTPointX Ptr CairoPathDataT
p1 IO (CDouble -> LineCurveTo) -> IO CDouble -> IO LineCurveTo
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Ptr CairoPathDataT -> IO CDouble
cairoPathDataTPointY Ptr CairoPathDataT
p1)
		Word32
2 -> (LineCurveTo -> Maybe LineCurveTo
forall a. a -> Maybe a
Just (LineCurveTo -> Maybe LineCurveTo)
-> IO LineCurveTo -> IO (Maybe LineCurveTo)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$>) (IO LineCurveTo -> IO (Maybe LineCurveTo))
-> IO LineCurveTo -> IO (Maybe LineCurveTo)
forall a b. (a -> b) -> a -> b
$ CDouble
-> CDouble
-> CDouble
-> CDouble
-> CDouble
-> CDouble
-> LineCurveTo
CurveTo
{-# LINE 291 "src/Graphics/Cairo/Drawing/Paths/CairoPathT.hsc" #-}
			(CDouble
 -> CDouble
 -> CDouble
 -> CDouble
 -> CDouble
 -> CDouble
 -> LineCurveTo)
-> IO CDouble
-> IO
     (CDouble
      -> CDouble -> CDouble -> CDouble -> CDouble -> LineCurveTo)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Ptr CairoPathDataT -> IO CDouble
cairoPathDataTPointX Ptr CairoPathDataT
p1 IO
  (CDouble
   -> CDouble -> CDouble -> CDouble -> CDouble -> LineCurveTo)
-> IO CDouble
-> IO (CDouble -> CDouble -> CDouble -> CDouble -> LineCurveTo)
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Ptr CairoPathDataT -> IO CDouble
cairoPathDataTPointY Ptr CairoPathDataT
p1
			IO (CDouble -> CDouble -> CDouble -> CDouble -> LineCurveTo)
-> IO CDouble -> IO (CDouble -> CDouble -> CDouble -> LineCurveTo)
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Ptr CairoPathDataT -> IO CDouble
cairoPathDataTPointX Ptr CairoPathDataT
p2 IO (CDouble -> CDouble -> CDouble -> LineCurveTo)
-> IO CDouble -> IO (CDouble -> CDouble -> LineCurveTo)
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Ptr CairoPathDataT -> IO CDouble
cairoPathDataTPointY Ptr CairoPathDataT
p2
			IO (CDouble -> CDouble -> LineCurveTo)
-> IO CDouble -> IO (CDouble -> LineCurveTo)
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Ptr CairoPathDataT -> IO CDouble
cairoPathDataTPointX Ptr CairoPathDataT
p3 IO (CDouble -> LineCurveTo) -> IO CDouble -> IO LineCurveTo
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Ptr CairoPathDataT -> IO CDouble
cairoPathDataTPointY Ptr CairoPathDataT
p3
		Word32
_ -> Maybe LineCurveTo -> IO (Maybe LineCurveTo)
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure Maybe LineCurveTo
forall a. Maybe a
Nothing
	ln <- cairoPathDataTHeaderLength p
	if n - ln < 0 then error "bad" else pure (lct, (nextByLength p ln, n - ln))
	where p1 :: Ptr CairoPathDataT
p1 = Ptr CairoPathDataT -> CInt -> Ptr CairoPathDataT
nextByLength Ptr CairoPathDataT
p CInt
1; p2 :: Ptr CairoPathDataT
p2 = Ptr CairoPathDataT -> CInt -> Ptr CairoPathDataT
nextByLength Ptr CairoPathDataT
p CInt
2; p3 :: Ptr CairoPathDataT
p3 = Ptr CairoPathDataT -> CInt -> Ptr CairoPathDataT
nextByLength Ptr CairoPathDataT
p CInt
3

drawCloseToFromCairoPathDataT :: Ptr CairoPathDataT -> CInt -> IO (Maybe (CloseTo, Maybe (CDouble, CDouble)), (Ptr CairoPathDataT, CInt))
drawCloseToFromCairoPathDataT :: Ptr CairoPathDataT
-> CInt
-> IO
     (Maybe (CloseTo, Maybe (CDouble, CDouble)),
      (Ptr CairoPathDataT, CInt))
drawCloseToFromCairoPathDataT Ptr CairoPathDataT
p CInt
n = do
	ctgl <- Ptr CairoPathDataT -> IO Word32
cairoPathDataTHeaderType Ptr CairoPathDataT
p IO Word32
-> (Word32 -> IO (Maybe (CloseTo, Maybe (CDouble, CDouble))))
-> IO (Maybe (CloseTo, Maybe (CDouble, CDouble)))
forall a b. IO a -> (a -> IO b) -> IO b
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= \case
		Word32
1 -> ((CloseTo, Maybe (CDouble, CDouble))
-> Maybe (CloseTo, Maybe (CDouble, CDouble))
forall a. a -> Maybe a
Just ((CloseTo, Maybe (CDouble, CDouble))
 -> Maybe (CloseTo, Maybe (CDouble, CDouble)))
-> IO (CloseTo, Maybe (CDouble, CDouble))
-> IO (Maybe (CloseTo, Maybe (CDouble, CDouble)))
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$>) (IO (CloseTo, Maybe (CDouble, CDouble))
 -> IO (Maybe (CloseTo, Maybe (CDouble, CDouble))))
-> IO (CloseTo, Maybe (CDouble, CDouble))
-> IO (Maybe (CloseTo, Maybe (CDouble, CDouble)))
forall a b. (a -> b) -> a -> b
$ ((CloseTo
CloseLineTo ,) (Maybe (CDouble, CDouble) -> (CloseTo, Maybe (CDouble, CDouble)))
-> ((CDouble, CDouble) -> Maybe (CDouble, CDouble))
-> (CDouble, CDouble)
-> (CloseTo, Maybe (CDouble, CDouble))
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (CDouble, CDouble) -> Maybe (CDouble, CDouble)
forall a. a -> Maybe a
Just ((CDouble, CDouble) -> (CloseTo, Maybe (CDouble, CDouble)))
-> IO (CDouble, CDouble) -> IO (CloseTo, Maybe (CDouble, CDouble))
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$>) (IO (CDouble, CDouble) -> IO (CloseTo, Maybe (CDouble, CDouble)))
-> IO (CDouble, CDouble) -> IO (CloseTo, Maybe (CDouble, CDouble))
forall a b. (a -> b) -> a -> b
$
{-# LINE 303 "src/Graphics/Cairo/Drawing/Paths/CairoPathT.hsc" #-}
			(,) (CDouble -> CDouble -> (CDouble, CDouble))
-> IO CDouble -> IO (CDouble -> (CDouble, CDouble))
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Ptr CairoPathDataT -> IO CDouble
cairoPathDataTPointX Ptr CairoPathDataT
p1 IO (CDouble -> (CDouble, CDouble))
-> IO CDouble -> IO (CDouble, 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 CairoPathDataT -> IO CDouble
cairoPathDataTPointY Ptr CairoPathDataT
p1
		Word32
2 -> ((CloseTo, Maybe (CDouble, CDouble))
-> Maybe (CloseTo, Maybe (CDouble, CDouble))
forall a. a -> Maybe a
Just ((CloseTo, Maybe (CDouble, CDouble))
 -> Maybe (CloseTo, Maybe (CDouble, CDouble)))
-> IO (CloseTo, Maybe (CDouble, CDouble))
-> IO (Maybe (CloseTo, Maybe (CDouble, CDouble)))
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$>) (IO (CloseTo, Maybe (CDouble, CDouble))
 -> IO (Maybe (CloseTo, Maybe (CDouble, CDouble))))
-> IO (CloseTo, Maybe (CDouble, CDouble))
-> IO (Maybe (CloseTo, Maybe (CDouble, CDouble)))
forall a b. (a -> b) -> a -> b
$ (,)
{-# LINE 305 "src/Graphics/Cairo/Drawing/Paths/CairoPathT.hsc" #-}
			(CloseTo
 -> Maybe (CDouble, CDouble) -> (CloseTo, Maybe (CDouble, CDouble)))
-> IO CloseTo
-> IO
     (Maybe (CDouble, CDouble) -> (CloseTo, Maybe (CDouble, CDouble)))
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> (CDouble -> CDouble -> CDouble -> CDouble -> CloseTo
CloseCurveTo
				(CDouble -> CDouble -> CDouble -> CDouble -> CloseTo)
-> IO CDouble -> IO (CDouble -> CDouble -> CDouble -> CloseTo)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Ptr CairoPathDataT -> IO CDouble
cairoPathDataTPointX Ptr CairoPathDataT
p1 IO (CDouble -> CDouble -> CDouble -> CloseTo)
-> IO CDouble -> IO (CDouble -> CDouble -> CloseTo)
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Ptr CairoPathDataT -> IO CDouble
cairoPathDataTPointY Ptr CairoPathDataT
p1
				IO (CDouble -> CDouble -> CloseTo)
-> IO CDouble -> IO (CDouble -> CloseTo)
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Ptr CairoPathDataT -> IO CDouble
cairoPathDataTPointX Ptr CairoPathDataT
p2 IO (CDouble -> CloseTo) -> IO CDouble -> IO CloseTo
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Ptr CairoPathDataT -> IO CDouble
cairoPathDataTPointY Ptr CairoPathDataT
p2)
			IO
  (Maybe (CDouble, CDouble) -> (CloseTo, Maybe (CDouble, CDouble)))
-> IO (Maybe (CDouble, CDouble))
-> IO (CloseTo, Maybe (CDouble, CDouble))
forall a b. IO (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> ((CDouble, CDouble) -> Maybe (CDouble, CDouble)
forall a. a -> Maybe a
Just ((CDouble, CDouble) -> Maybe (CDouble, CDouble))
-> IO (CDouble, CDouble) -> IO (Maybe (CDouble, CDouble))
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> ((,) (CDouble -> CDouble -> (CDouble, CDouble))
-> IO CDouble -> IO (CDouble -> (CDouble, CDouble))
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Ptr CairoPathDataT -> IO CDouble
cairoPathDataTPointX Ptr CairoPathDataT
p3 IO (CDouble -> (CDouble, CDouble))
-> IO CDouble -> IO (CDouble, 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 CairoPathDataT -> IO CDouble
cairoPathDataTPointY Ptr CairoPathDataT
p3))
		Word32
3 -> Maybe (CloseTo, Maybe (CDouble, CDouble))
-> IO (Maybe (CloseTo, Maybe (CDouble, CDouble)))
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (Maybe (CloseTo, Maybe (CDouble, CDouble))
 -> IO (Maybe (CloseTo, Maybe (CDouble, CDouble))))
-> Maybe (CloseTo, Maybe (CDouble, CDouble))
-> IO (Maybe (CloseTo, Maybe (CDouble, CDouble)))
forall a b. (a -> b) -> a -> b
$ (CloseTo, Maybe (CDouble, CDouble))
-> Maybe (CloseTo, Maybe (CDouble, CDouble))
forall a. a -> Maybe a
Just (CloseTo
CloseLineTo, Maybe (CDouble, CDouble)
forall a. Maybe a
Nothing)
{-# LINE 310 "src/Graphics/Cairo/Drawing/Paths/CairoPathT.hsc" #-}
		Word32
_ -> Maybe (CloseTo, Maybe (CDouble, CDouble))
-> IO (Maybe (CloseTo, Maybe (CDouble, CDouble)))
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure Maybe (CloseTo, Maybe (CDouble, CDouble))
forall a. Maybe a
Nothing
	ln <- cairoPathDataTHeaderLength p
	if n - ln < 0 then error "bad" else pure (ctgl, (nextByLength p ln, n - ln))
	where [Ptr CairoPathDataT
p1, Ptr CairoPathDataT
p2, Ptr CairoPathDataT
p3] = Ptr CairoPathDataT -> CInt -> Ptr CairoPathDataT
nextByLength Ptr CairoPathDataT
p (CInt -> Ptr CairoPathDataT) -> [CInt] -> [Ptr CairoPathDataT]
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> [CInt
1, CInt
2, CInt
3]

patchPathsToCairoPatchPathT ::
	MoveTo -> LineCurveTo -> LineCurveTo -> LineCurveTo -> CloseTo -> IO CairoPatchPathT
patchPathsToCairoPatchPathT :: MoveTo
-> LineCurveTo
-> LineCurveTo
-> LineCurveTo
-> CloseTo
-> IO CairoPatchPathT
patchPathsToCairoPatchPathT MoveTo
mt LineCurveTo
lct1 LineCurveTo
lct2 LineCurveTo
lct3 CloseTo
cls = ForeignPtr CairoPathT -> CairoPatchPathT
CairoPatchPathT_ (ForeignPtr CairoPathT -> CairoPatchPathT)
-> IO (ForeignPtr CairoPathT) -> IO CairoPatchPathT
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> do
	pd <- Int -> IO (Ptr CairoPathDataT)
forall a. Int -> IO (Ptr a)
mallocBytes (Int -> IO (Ptr CairoPathDataT)) -> Int -> IO (Ptr CairoPathDataT)
forall a b. (a -> b) -> a -> b
$ MoveTo
-> LineCurveTo -> LineCurveTo -> LineCurveTo -> CloseTo -> Int
patchPathSize MoveTo
mt LineCurveTo
lct1 LineCurveTo
lct2 LineCurveTo
lct3 CloseTo
cls Int -> Int -> Int
forall a. Num a => a -> a -> a
* Int
cairoPathDataTSize
	patchPathsToCairoPathDataT pd mt lct1 lct2 lct3 cls
	p <- mallocBytes (24)
{-# LINE 321 "src/Graphics/Cairo/Drawing/Paths/CairoPathT.hsc" #-}
	(\Ptr CairoPathT
hsc_ptr -> Ptr CairoPathT -> Int -> Word32 -> IO ()
forall b. Ptr b -> Int -> Word32 -> IO ()
forall a b. Storable a => Ptr b -> Int -> a -> IO ()
pokeByteOff Ptr CairoPathT
hsc_ptr Int
0) p (0 :: Word32)
{-# LINE 322 "src/Graphics/Cairo/Drawing/Paths/CairoPathT.hsc" #-}
	(\Ptr CairoPathT
hsc_ptr -> Ptr CairoPathT -> Int -> Ptr CairoPathDataT -> IO ()
forall b. Ptr b -> Int -> Ptr CairoPathDataT -> IO ()
forall a b. Storable a => Ptr b -> Int -> a -> IO ()
pokeByteOff Ptr CairoPathT
hsc_ptr Int
8) p pd
{-# LINE 323 "src/Graphics/Cairo/Drawing/Paths/CairoPathT.hsc" #-}
	(\Ptr CairoPathT
hsc_ptr -> Ptr CairoPathT -> Int -> Int -> IO ()
forall b. Ptr b -> Int -> Int -> IO ()
forall a b. Storable a => Ptr b -> Int -> a -> IO ()
pokeByteOff Ptr CairoPathT
hsc_ptr Int
16) p $ patchPathSize mt lct1 lct2 lct3 cls
{-# LINE 324 "src/Graphics/Cairo/Drawing/Paths/CairoPathT.hsc" #-}
	newForeignPtr p $ free pd >> free p

patchPathSize :: MoveTo -> LineCurveTo -> LineCurveTo -> LineCurveTo -> CloseTo -> Int
patchPathSize :: MoveTo
-> LineCurveTo -> LineCurveTo -> LineCurveTo -> CloseTo -> Int
patchPathSize MoveTo
_mt LineCurveTo
lct1 LineCurveTo
lct2 LineCurveTo
lct3 CloseTo
cls =
	Int
2 Int -> Int -> Int
forall a. Num a => a -> a -> a
+ [Int] -> Int
forall a. Num a => [a] -> a
forall (t :: * -> *) a. (Foldable t, Num a) => t a -> a
sum (LineCurveTo -> Int
lineCurveToSize (LineCurveTo -> Int) -> [LineCurveTo] -> [Int]
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> [LineCurveTo
lct1, LineCurveTo
lct2, LineCurveTo
lct3]) Int -> Int -> Int
forall a. Num a => a -> a -> a
+ CloseTo -> Int
closeToSize CloseTo
cls

lineCurveToSize :: LineCurveTo -> Int
lineCurveToSize :: LineCurveTo -> Int
lineCurveToSize (LineTo CDouble
_ CDouble
_) = Int
2
lineCurveToSize (CurveTo CDouble
_ CDouble
_ CDouble
_ CDouble
_ CDouble
_ CDouble
_) = Int
4

closeToSize :: CloseTo -> Int
closeToSize :: CloseTo -> Int
closeToSize CloseTo
CloseLineTo = Int
1
closeToSize (CloseCurveTo CDouble
_ CDouble
_ CDouble
_ CDouble
_) = Int
4

patchPathsToCairoPathDataT :: Ptr CairoPathDataT ->
	MoveTo -> LineCurveTo -> LineCurveTo -> LineCurveTo -> CloseTo -> IO ()
patchPathsToCairoPathDataT :: Ptr CairoPathDataT
-> MoveTo
-> LineCurveTo
-> LineCurveTo
-> LineCurveTo
-> CloseTo
-> IO ()
patchPathsToCairoPathDataT Ptr CairoPathDataT
pd MoveTo
mt LineCurveTo
lct1 LineCurveTo
lct2 LineCurveTo
lct3 CloseTo
cls = do
	pd1 <- Ptr CairoPathDataT -> MoveTo -> IO (Ptr CairoPathDataT)
moveToToCairoPathDataT Ptr CairoPathDataT
pd MoveTo
mt
	pd2 <- lineCurveToToCairoPathDataT pd1 lct1
	pd3 <- lineCurveToToCairoPathDataT pd2 lct2
	pd4 <- lineCurveToToCairoPathDataT pd3 lct3
	_ <- closeToToCairoPathDataT pd4 mt cls
	pure ()

moveToToCairoPathDataT :: Ptr CairoPathDataT -> MoveTo -> IO (Ptr CairoPathDataT)
moveToToCairoPathDataT :: Ptr CairoPathDataT -> MoveTo -> IO (Ptr CairoPathDataT)
moveToToCairoPathDataT Ptr CairoPathDataT
p (MoveTo CDouble
x CDouble
y) = do
	(\Ptr CairoPathDataT
hsc_ptr -> Ptr CairoPathDataT -> Int -> Word32 -> IO ()
forall b. Ptr b -> Int -> Word32 -> IO ()
forall a b. Storable a => Ptr b -> Int -> a -> IO ()
pokeByteOff Ptr CairoPathDataT
hsc_ptr Int
0) Ptr CairoPathDataT
p (Word32
0 :: Word32)
{-# LINE 351 "src/Graphics/Cairo/Drawing/Paths/CairoPathT.hsc" #-}
	(\Ptr CairoPathDataT
hsc_ptr -> Ptr CairoPathDataT -> Int -> CInt -> IO ()
forall b. Ptr b -> Int -> CInt -> IO ()
forall a b. Storable a => Ptr b -> Int -> a -> IO ()
pokeByteOff Ptr CairoPathDataT
hsc_ptr Int
4) Ptr CairoPathDataT
p (CInt
2 :: CInt)
{-# LINE 352 "src/Graphics/Cairo/Drawing/Paths/CairoPathT.hsc" #-}
	(\Ptr CairoPathDataT
hsc_ptr -> Ptr CairoPathDataT -> Int -> CDouble -> IO ()
forall b. Ptr b -> Int -> CDouble -> IO ()
forall a b. Storable a => Ptr b -> Int -> a -> IO ()
pokeByteOff Ptr CairoPathDataT
hsc_ptr Int
0) Ptr CairoPathDataT
p1 CDouble
x
{-# LINE 353 "src/Graphics/Cairo/Drawing/Paths/CairoPathT.hsc" #-}
	(\Ptr CairoPathDataT
hsc_ptr -> Ptr CairoPathDataT -> Int -> CDouble -> IO ()
forall b. Ptr b -> Int -> CDouble -> IO ()
forall a b. Storable a => Ptr b -> Int -> a -> IO ()
pokeByteOff Ptr CairoPathDataT
hsc_ptr Int
8) Ptr CairoPathDataT
p1 CDouble
y
{-# LINE 354 "src/Graphics/Cairo/Drawing/Paths/CairoPathT.hsc" #-}
	Ptr CairoPathDataT -> IO (Ptr CairoPathDataT)
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (Ptr CairoPathDataT -> IO (Ptr CairoPathDataT))
-> Ptr CairoPathDataT -> IO (Ptr CairoPathDataT)
forall a b. (a -> b) -> a -> b
$ Ptr CairoPathDataT
p Ptr CairoPathDataT -> Int -> Ptr CairoPathDataT
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` (Int
cairoPathDataTSize Int -> Int -> Int
forall a. Num a => a -> a -> a
* Int
2)
	where p1 :: Ptr CairoPathDataT
p1 = Ptr CairoPathDataT -> CInt -> Ptr CairoPathDataT
nextByLength Ptr CairoPathDataT
p CInt
1

lineCurveToToCairoPathDataT :: Ptr CairoPathDataT -> LineCurveTo -> IO (Ptr CairoPathDataT)
lineCurveToToCairoPathDataT :: Ptr CairoPathDataT -> LineCurveTo -> IO (Ptr CairoPathDataT)
lineCurveToToCairoPathDataT Ptr CairoPathDataT
p = \case
	LineTo CDouble
x CDouble
y -> do
		(\Ptr CairoPathDataT
hsc_ptr -> Ptr CairoPathDataT -> Int -> Word32 -> IO ()
forall b. Ptr b -> Int -> Word32 -> IO ()
forall a b. Storable a => Ptr b -> Int -> a -> IO ()
pokeByteOff Ptr CairoPathDataT
hsc_ptr Int
0) Ptr CairoPathDataT
p (Word32
1 :: Word32)
{-# LINE 361 "src/Graphics/Cairo/Drawing/Paths/CairoPathT.hsc" #-}
		(\Ptr CairoPathDataT
hsc_ptr -> Ptr CairoPathDataT -> Int -> CInt -> IO ()
forall b. Ptr b -> Int -> CInt -> IO ()
forall a b. Storable a => Ptr b -> Int -> a -> IO ()
pokeByteOff Ptr CairoPathDataT
hsc_ptr Int
4) Ptr CairoPathDataT
p (CInt
2 :: CInt)
{-# LINE 362 "src/Graphics/Cairo/Drawing/Paths/CairoPathT.hsc" #-}
		(\Ptr CairoPathDataT
hsc_ptr -> Ptr CairoPathDataT -> Int -> CDouble -> IO ()
forall b. Ptr b -> Int -> CDouble -> IO ()
forall a b. Storable a => Ptr b -> Int -> a -> IO ()
pokeByteOff Ptr CairoPathDataT
hsc_ptr Int
0) Ptr CairoPathDataT
p1 CDouble
x
{-# LINE 363 "src/Graphics/Cairo/Drawing/Paths/CairoPathT.hsc" #-}
		(\Ptr CairoPathDataT
hsc_ptr -> Ptr CairoPathDataT -> Int -> CDouble -> IO ()
forall b. Ptr b -> Int -> CDouble -> IO ()
forall a b. Storable a => Ptr b -> Int -> a -> IO ()
pokeByteOff Ptr CairoPathDataT
hsc_ptr Int
8) Ptr CairoPathDataT
p1 CDouble
y
{-# LINE 364 "src/Graphics/Cairo/Drawing/Paths/CairoPathT.hsc" #-}
		Ptr CairoPathDataT -> IO (Ptr CairoPathDataT)
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (Ptr CairoPathDataT -> IO (Ptr CairoPathDataT))
-> Ptr CairoPathDataT -> IO (Ptr CairoPathDataT)
forall a b. (a -> b) -> a -> b
$ Ptr CairoPathDataT
p Ptr CairoPathDataT -> Int -> Ptr CairoPathDataT
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` (Int
cairoPathDataTSize Int -> Int -> Int
forall a. Num a => a -> a -> a
* Int
2)
	CurveTo CDouble
x1 CDouble
y1 CDouble
x2 CDouble
y2 CDouble
x3 CDouble
y3 -> do
		(\Ptr CairoPathDataT
hsc_ptr -> Ptr CairoPathDataT -> Int -> Word32 -> IO ()
forall b. Ptr b -> Int -> Word32 -> IO ()
forall a b. Storable a => Ptr b -> Int -> a -> IO ()
pokeByteOff Ptr CairoPathDataT
hsc_ptr Int
0) Ptr CairoPathDataT
p (Word32
2 :: Word32)
{-# LINE 367 "src/Graphics/Cairo/Drawing/Paths/CairoPathT.hsc" #-}
		(\Ptr CairoPathDataT
hsc_ptr -> Ptr CairoPathDataT -> Int -> CInt -> IO ()
forall b. Ptr b -> Int -> CInt -> IO ()
forall a b. Storable a => Ptr b -> Int -> a -> IO ()
pokeByteOff Ptr CairoPathDataT
hsc_ptr Int
4) Ptr CairoPathDataT
p (CInt
4 :: CInt)
{-# LINE 368 "src/Graphics/Cairo/Drawing/Paths/CairoPathT.hsc" #-}
		(\Ptr CairoPathDataT
hsc_ptr -> Ptr CairoPathDataT -> Int -> CDouble -> IO ()
forall b. Ptr b -> Int -> CDouble -> IO ()
forall a b. Storable a => Ptr b -> Int -> a -> IO ()
pokeByteOff Ptr CairoPathDataT
hsc_ptr Int
0) Ptr CairoPathDataT
p1 CDouble
x1
{-# LINE 369 "src/Graphics/Cairo/Drawing/Paths/CairoPathT.hsc" #-}
		(\Ptr CairoPathDataT
hsc_ptr -> Ptr CairoPathDataT -> Int -> CDouble -> IO ()
forall b. Ptr b -> Int -> CDouble -> IO ()
forall a b. Storable a => Ptr b -> Int -> a -> IO ()
pokeByteOff Ptr CairoPathDataT
hsc_ptr Int
8) Ptr CairoPathDataT
p1 CDouble
y1
{-# LINE 370 "src/Graphics/Cairo/Drawing/Paths/CairoPathT.hsc" #-}
		(\Ptr CairoPathDataT
hsc_ptr -> Ptr CairoPathDataT -> Int -> CDouble -> IO ()
forall b. Ptr b -> Int -> CDouble -> IO ()
forall a b. Storable a => Ptr b -> Int -> a -> IO ()
pokeByteOff Ptr CairoPathDataT
hsc_ptr Int
0) Ptr CairoPathDataT
p2 CDouble
x2
{-# LINE 371 "src/Graphics/Cairo/Drawing/Paths/CairoPathT.hsc" #-}
		(\Ptr CairoPathDataT
hsc_ptr -> Ptr CairoPathDataT -> Int -> CDouble -> IO ()
forall b. Ptr b -> Int -> CDouble -> IO ()
forall a b. Storable a => Ptr b -> Int -> a -> IO ()
pokeByteOff Ptr CairoPathDataT
hsc_ptr Int
8) Ptr CairoPathDataT
p2 CDouble
y2
{-# LINE 372 "src/Graphics/Cairo/Drawing/Paths/CairoPathT.hsc" #-}
		(\Ptr CairoPathDataT
hsc_ptr -> Ptr CairoPathDataT -> Int -> CDouble -> IO ()
forall b. Ptr b -> Int -> CDouble -> IO ()
forall a b. Storable a => Ptr b -> Int -> a -> IO ()
pokeByteOff Ptr CairoPathDataT
hsc_ptr Int
0) Ptr CairoPathDataT
p3 CDouble
x3
{-# LINE 373 "src/Graphics/Cairo/Drawing/Paths/CairoPathT.hsc" #-}
		(\Ptr CairoPathDataT
hsc_ptr -> Ptr CairoPathDataT -> Int -> CDouble -> IO ()
forall b. Ptr b -> Int -> CDouble -> IO ()
forall a b. Storable a => Ptr b -> Int -> a -> IO ()
pokeByteOff Ptr CairoPathDataT
hsc_ptr Int
8) Ptr CairoPathDataT
p3 CDouble
y3
{-# LINE 374 "src/Graphics/Cairo/Drawing/Paths/CairoPathT.hsc" #-}
		Ptr CairoPathDataT -> IO (Ptr CairoPathDataT)
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (Ptr CairoPathDataT -> IO (Ptr CairoPathDataT))
-> Ptr CairoPathDataT -> IO (Ptr CairoPathDataT)
forall a b. (a -> b) -> a -> b
$ Ptr CairoPathDataT
p Ptr CairoPathDataT -> Int -> Ptr CairoPathDataT
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` (Int
cairoPathDataTSize Int -> Int -> Int
forall a. Num a => a -> a -> a
* Int
4)
	where p1 :: Ptr CairoPathDataT
p1 = Ptr CairoPathDataT -> CInt -> Ptr CairoPathDataT
nextByLength Ptr CairoPathDataT
p CInt
1; p2 :: Ptr CairoPathDataT
p2 = Ptr CairoPathDataT -> CInt -> Ptr CairoPathDataT
nextByLength Ptr CairoPathDataT
p CInt
2; p3 :: Ptr CairoPathDataT
p3 = Ptr CairoPathDataT -> CInt -> Ptr CairoPathDataT
nextByLength Ptr CairoPathDataT
p CInt
3

closeToToCairoPathDataT :: Ptr CairoPathDataT -> MoveTo -> CloseTo -> IO (Ptr CairoPathDataT)
closeToToCairoPathDataT :: Ptr CairoPathDataT -> MoveTo -> CloseTo -> IO (Ptr CairoPathDataT)
closeToToCairoPathDataT Ptr CairoPathDataT
p (MoveTo CDouble
x0 CDouble
y0) = \case
	CloseTo
CloseLineTo -> do
		(\Ptr CairoPathDataT
hsc_ptr -> Ptr CairoPathDataT -> Int -> Word32 -> IO ()
forall b. Ptr b -> Int -> Word32 -> IO ()
forall a b. Storable a => Ptr b -> Int -> a -> IO ()
pokeByteOff Ptr CairoPathDataT
hsc_ptr Int
0) Ptr CairoPathDataT
p (Word32
3 :: Word32)
{-# LINE 381 "src/Graphics/Cairo/Drawing/Paths/CairoPathT.hsc" #-}
		(\Ptr CairoPathDataT
hsc_ptr -> Ptr CairoPathDataT -> Int -> CInt -> IO ()
forall b. Ptr b -> Int -> CInt -> IO ()
forall a b. Storable a => Ptr b -> Int -> a -> IO ()
pokeByteOff Ptr CairoPathDataT
hsc_ptr Int
4) Ptr CairoPathDataT
p (CInt
1 :: CInt)
{-# LINE 382 "src/Graphics/Cairo/Drawing/Paths/CairoPathT.hsc" #-}
		Ptr CairoPathDataT -> IO (Ptr CairoPathDataT)
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (Ptr CairoPathDataT -> IO (Ptr CairoPathDataT))
-> Ptr CairoPathDataT -> IO (Ptr CairoPathDataT)
forall a b. (a -> b) -> a -> b
$ Ptr CairoPathDataT
p Ptr CairoPathDataT -> Int -> Ptr CairoPathDataT
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
cairoPathDataTSize
	CloseCurveTo CDouble
x1 CDouble
y1 CDouble
x2 CDouble
y2 -> do
		(\Ptr CairoPathDataT
hsc_ptr -> Ptr CairoPathDataT -> Int -> Word32 -> IO ()
forall b. Ptr b -> Int -> Word32 -> IO ()
forall a b. Storable a => Ptr b -> Int -> a -> IO ()
pokeByteOff Ptr CairoPathDataT
hsc_ptr Int
0) Ptr CairoPathDataT
p (Word32
2 :: Word32)
{-# LINE 385 "src/Graphics/Cairo/Drawing/Paths/CairoPathT.hsc" #-}
		(\Ptr CairoPathDataT
hsc_ptr -> Ptr CairoPathDataT -> Int -> CInt -> IO ()
forall b. Ptr b -> Int -> CInt -> IO ()
forall a b. Storable a => Ptr b -> Int -> a -> IO ()
pokeByteOff Ptr CairoPathDataT
hsc_ptr Int
4) Ptr CairoPathDataT
p (CInt
4 :: CInt)
{-# LINE 386 "src/Graphics/Cairo/Drawing/Paths/CairoPathT.hsc" #-}
		(\Ptr CairoPathDataT
hsc_ptr -> Ptr CairoPathDataT -> Int -> CDouble -> IO ()
forall b. Ptr b -> Int -> CDouble -> IO ()
forall a b. Storable a => Ptr b -> Int -> a -> IO ()
pokeByteOff Ptr CairoPathDataT
hsc_ptr Int
0) Ptr CairoPathDataT
p1 CDouble
x1
{-# LINE 387 "src/Graphics/Cairo/Drawing/Paths/CairoPathT.hsc" #-}
		(\Ptr CairoPathDataT
hsc_ptr -> Ptr CairoPathDataT -> Int -> CDouble -> IO ()
forall b. Ptr b -> Int -> CDouble -> IO ()
forall a b. Storable a => Ptr b -> Int -> a -> IO ()
pokeByteOff Ptr CairoPathDataT
hsc_ptr Int
8) Ptr CairoPathDataT
p1 CDouble
y1
{-# LINE 388 "src/Graphics/Cairo/Drawing/Paths/CairoPathT.hsc" #-}
		(\Ptr CairoPathDataT
hsc_ptr -> Ptr CairoPathDataT -> Int -> CDouble -> IO ()
forall b. Ptr b -> Int -> CDouble -> IO ()
forall a b. Storable a => Ptr b -> Int -> a -> IO ()
pokeByteOff Ptr CairoPathDataT
hsc_ptr Int
0) Ptr CairoPathDataT
p2 CDouble
x2
{-# LINE 389 "src/Graphics/Cairo/Drawing/Paths/CairoPathT.hsc" #-}
		(\Ptr CairoPathDataT
hsc_ptr -> Ptr CairoPathDataT -> Int -> CDouble -> IO ()
forall b. Ptr b -> Int -> CDouble -> IO ()
forall a b. Storable a => Ptr b -> Int -> a -> IO ()
pokeByteOff Ptr CairoPathDataT
hsc_ptr Int
8) Ptr CairoPathDataT
p2 CDouble
y2
{-# LINE 390 "src/Graphics/Cairo/Drawing/Paths/CairoPathT.hsc" #-}
		(\Ptr CairoPathDataT
hsc_ptr -> Ptr CairoPathDataT -> Int -> CDouble -> IO ()
forall b. Ptr b -> Int -> CDouble -> IO ()
forall a b. Storable a => Ptr b -> Int -> a -> IO ()
pokeByteOff Ptr CairoPathDataT
hsc_ptr Int
0) Ptr CairoPathDataT
p3 CDouble
x0
{-# LINE 391 "src/Graphics/Cairo/Drawing/Paths/CairoPathT.hsc" #-}
		(\Ptr CairoPathDataT
hsc_ptr -> Ptr CairoPathDataT -> Int -> CDouble -> IO ()
forall b. Ptr b -> Int -> CDouble -> IO ()
forall a b. Storable a => Ptr b -> Int -> a -> IO ()
pokeByteOff Ptr CairoPathDataT
hsc_ptr Int
8) Ptr CairoPathDataT
p3 CDouble
y0
{-# LINE 392 "src/Graphics/Cairo/Drawing/Paths/CairoPathT.hsc" #-}
		Ptr CairoPathDataT -> IO (Ptr CairoPathDataT)
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (Ptr CairoPathDataT -> IO (Ptr CairoPathDataT))
-> Ptr CairoPathDataT -> IO (Ptr CairoPathDataT)
forall a b. (a -> b) -> a -> b
$ Ptr CairoPathDataT
p Ptr CairoPathDataT -> Int -> Ptr CairoPathDataT
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` (Int
cairoPathDataTSize Int -> Int -> Int
forall a. Num a => a -> a -> a
* Int
4)
	where p1 :: Ptr CairoPathDataT
p1 = Ptr CairoPathDataT -> CInt -> Ptr CairoPathDataT
nextByLength Ptr CairoPathDataT
p CInt
1; p2 :: Ptr CairoPathDataT
p2 = Ptr CairoPathDataT -> CInt -> Ptr CairoPathDataT
nextByLength Ptr CairoPathDataT
p CInt
2; p3 :: Ptr CairoPathDataT
p3 = Ptr CairoPathDataT -> CInt -> Ptr CairoPathDataT
nextByLength Ptr CairoPathDataT
p CInt
3