{-# LINE 1 "src/Graphics/Cairo/Surfaces/SvgSurfaces.hsc" #-}
{-# LANGUAGE TemplateHaskell #-}
{-# LANGUAGE BlockArguments, LambdaCase #-}
{-# LANGUAGE PatternSynonyms, ViewPatterns #-}
{-# LANGUAGE RankNTypes #-}
{-# OPTIONS_GHC -Wall -fno-warn-tabs #-}

module Graphics.Cairo.Surfaces.SvgSurfaces where

import Foreign.Ptr
import Foreign.ForeignPtr hiding (newForeignPtr)
import Foreign.Concurrent
import Foreign.Marshal
import Foreign.Storable
import Foreign.C.Types
import Foreign.C.String
import Control.Monad.Primitive
import Data.Word
import System.IO.Unsafe
import Graphics.Cairo.Exception
import Graphics.Cairo.Surfaces.CairoSurfaceT.Internal
import Graphics.Cairo.Surfaces.CairoSurfaceTypeT

import qualified Data.Text as T

import Graphics.Cairo.Surfaces.CairoWriteFuncT
import Graphics.Cairo.Surfaces.SvgSurfaces.Template




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

pattern CairoSurfaceTSvg :: CairoSurfaceSvgT s ps -> CairoSurfaceT s ps
pattern $mCairoSurfaceTSvg :: forall {r} {s} {ps}.
CairoSurfaceT s ps
-> (CairoSurfaceSvgT s ps -> r) -> ((# #) -> r) -> r
$bCairoSurfaceTSvg :: forall s ps. CairoSurfaceSvgT s ps -> CairoSurfaceT s ps
CairoSurfaceTSvg sr <- (cairoSurfaceTSvg -> Just sr) where
	CairoSurfaceTSvg = CairoSurfaceSvgT s ps -> CairoSurfaceT s ps
forall s ps. CairoSurfaceSvgT s ps -> CairoSurfaceT s ps
forall (sr :: * -> * -> *) s ps.
IsCairoSurfaceT sr =>
sr s ps -> CairoSurfaceT s ps
toCairoSurfaceT

cairoSurfaceTSvg :: CairoSurfaceT s ps -> Maybe (CairoSurfaceSvgT s ps)
cairoSurfaceTSvg :: forall s ps. CairoSurfaceT s ps -> Maybe (CairoSurfaceSvgT s ps)
cairoSurfaceTSvg sr :: CairoSurfaceT s ps
sr@(CairoSurfaceT ForeignPtr (CairoSurfaceT s ps)
fsr) = case CairoSurfaceT s ps -> CairoSurfaceTypeT
forall (sr :: * -> * -> *) s ps.
IsCairoSurfaceT sr =>
sr s ps -> CairoSurfaceTypeT
cairoSurfaceGetType CairoSurfaceT s ps
sr of
	CairoSurfaceTypeT
CairoSurfaceTypeSvg -> CairoSurfaceSvgT s ps -> Maybe (CairoSurfaceSvgT s ps)
forall a. a -> Maybe a
Just (CairoSurfaceSvgT s ps -> Maybe (CairoSurfaceSvgT s ps))
-> CairoSurfaceSvgT s ps -> Maybe (CairoSurfaceSvgT s ps)
forall a b. (a -> b) -> a -> b
$ ForeignPtr (CairoSurfaceT s ps) -> CairoSurfaceSvgT s ps
forall s ps.
ForeignPtr (CairoSurfaceT s ps) -> CairoSurfaceSvgT s ps
CairoSurfaceSvgT ForeignPtr (CairoSurfaceT s ps)
fsr
	CairoSurfaceTypeT
_ -> Maybe (CairoSurfaceSvgT s ps)
forall a. Maybe a
Nothing

instance IsCairoSurfaceT CairoSurfaceSvgT where
	toCairoSurfaceT :: forall s ps. CairoSurfaceSvgT s ps -> CairoSurfaceT s ps
toCairoSurfaceT (CairoSurfaceSvgT ForeignPtr (CairoSurfaceT s ps)
fsr) = ForeignPtr (CairoSurfaceT s ps) -> CairoSurfaceT s ps
forall s ps. ForeignPtr (CairoSurfaceT s ps) -> CairoSurfaceT s ps
CairoSurfaceT ForeignPtr (CairoSurfaceT s ps)
fsr

foreign import ccall "cairo_svg_surface_create" c_cairo_svg_surface_create ::
	CString -> CDouble -> CDouble -> IO (Ptr (CairoSurfaceT s ps))

cairoSvgSurfaceWith :: FilePath -> CDouble -> CDouble -> (forall s . CairoSurfaceSvgT s RealWorld -> IO a) -> IO a
cairoSvgSurfaceWith :: forall a.
String
-> CDouble
-> CDouble
-> (forall s. CairoSurfaceSvgT s RealWorld -> IO a)
-> IO a
cairoSvgSurfaceWith String
fp CDouble
w CDouble
h forall s. CairoSurfaceSvgT s RealWorld -> IO a
f = do
	sr@(CairoSurfaceSvgT fsr) <- String -> CDouble -> CDouble -> IO (CairoSurfaceSvgT Any RealWorld)
forall s.
String -> CDouble -> CDouble -> IO (CairoSurfaceSvgT s RealWorld)
cairoSvgSurfaceCreate String
fp CDouble
w CDouble
h
	f sr <* withForeignPtr fsr c_cairo_surface_finish
	

cairoSvgSurfaceCreate :: FilePath -> CDouble -> CDouble -> IO (CairoSurfaceSvgT s RealWorld)
cairoSvgSurfaceCreate :: forall s.
String -> CDouble -> CDouble -> IO (CairoSurfaceSvgT s RealWorld)
cairoSvgSurfaceCreate String
fp CDouble
w CDouble
h = String
-> (CString -> IO (CairoSurfaceSvgT s RealWorld))
-> IO (CairoSurfaceSvgT s RealWorld)
forall a. String -> (CString -> IO a) -> IO a
withCString String
fp \CString
cs -> do
	p <- CString
-> CDouble -> CDouble -> IO (Ptr (CairoSurfaceT s RealWorld))
forall s ps.
CString -> CDouble -> CDouble -> IO (Ptr (CairoSurfaceT s ps))
c_cairo_svg_surface_create CString
cs CDouble
w CDouble
h
	mkCairoSurfaceSvgT p <* raiseIfErrorPtrSurface p

foreign import ccall "cairo_svg_surface_create_for_stream" c_cairo_svg_surface_create_for_stream ::
	FunPtr (Ptr a -> CString -> CInt -> IO Word32) -> Ptr a -> CDouble -> CDouble -> IO (Ptr (CairoSurfaceT s ps))
{-# LINE 61 "src/Graphics/Cairo/Surfaces/SvgSurfaces.hsc" #-}

cairoSvgSurfaceWithForStream :: PrimBase m => (Ptr a -> T.Text -> m WriteResult) -> Ptr a -> CDouble -> CDouble ->
	(forall s . CairoSurfaceSvgT s (PrimState m) -> m a) -> m a
cairoSvgSurfaceWithForStream :: forall (m :: * -> *) a.
PrimBase m =>
(Ptr a -> Text -> m WriteResult)
-> Ptr a
-> CDouble
-> CDouble
-> (forall s. CairoSurfaceSvgT s (PrimState m) -> m a)
-> m a
cairoSvgSurfaceWithForStream Ptr a -> Text -> m WriteResult
wf Ptr a
cl CDouble
w CDouble
h forall s. CairoSurfaceSvgT s (PrimState m) -> m a
f = do
	sr@(CairoSurfaceSvgT fsr) <- (Ptr a -> Text -> m WriteResult)
-> Ptr a
-> CDouble
-> CDouble
-> m (CairoSurfaceSvgT Any (PrimState m))
forall (m :: * -> *) a s.
PrimBase m =>
(Ptr a -> Text -> m WriteResult)
-> Ptr a
-> CDouble
-> CDouble
-> m (CairoSurfaceSvgT s (PrimState m))
cairoSvgSurfaceCreateForStream Ptr a -> Text -> m WriteResult
wf Ptr a
cl CDouble
w CDouble
h
	f sr <* unsafeIOToPrim (withForeignPtr fsr c_cairo_surface_finish)

cairoSvgSurfaceCreateForStream :: PrimBase m =>
	(Ptr a -> T.Text -> m WriteResult) -> Ptr a -> CDouble -> CDouble -> m (CairoSurfaceSvgT s (PrimState m))
cairoSvgSurfaceCreateForStream :: forall (m :: * -> *) a s.
PrimBase m =>
(Ptr a -> Text -> m WriteResult)
-> Ptr a
-> CDouble
-> CDouble
-> m (CairoSurfaceSvgT s (PrimState m))
cairoSvgSurfaceCreateForStream Ptr a -> Text -> m WriteResult
wf Ptr a
cl CDouble
w CDouble
h = IO (CairoSurfaceSvgT s (PrimState m))
-> m (CairoSurfaceSvgT s (PrimState m))
forall (m :: * -> *) a. PrimMonad m => IO a -> m a
unsafeIOToPrim do
	p <- ((Ptr a -> Text -> m WriteResult)
-> IO (FunPtr (Ptr a -> CString -> CInt -> IO Word32))
forall (m :: * -> *) a.
PrimBase m =>
(Ptr a -> Text -> m WriteResult)
-> IO (FunPtr (Ptr a -> CString -> CInt -> IO Word32))
wrapCairoWriteFuncTText Ptr a -> Text -> m WriteResult
wf IO (FunPtr (Ptr a -> CString -> CInt -> IO Word32))
-> (FunPtr (Ptr a -> CString -> CInt -> IO Word32)
    -> IO (Ptr (CairoSurfaceT s (PrimState m))))
-> IO (Ptr (CairoSurfaceT s (PrimState m)))
forall a b. IO a -> (a -> IO b) -> IO b
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= \FunPtr (Ptr a -> CString -> CInt -> IO Word32)
pwf ->
		FunPtr (Ptr a -> CString -> CInt -> IO Word32)
-> Ptr a
-> CDouble
-> CDouble
-> IO (Ptr (CairoSurfaceT s (PrimState m)))
forall a s ps.
FunPtr (Ptr a -> CString -> CInt -> IO Word32)
-> Ptr a -> CDouble -> CDouble -> IO (Ptr (CairoSurfaceT s ps))
c_cairo_svg_surface_create_for_stream FunPtr (Ptr a -> CString -> CInt -> IO Word32)
pwf Ptr a
cl CDouble
w CDouble
h)
	sr <- mkCairoSurfaceSvgT p
	sr <$ raiseIfErrorPtrSurface p

mkCairoSurfaceSvgT :: Ptr (CairoSurfaceT s ps) -> IO (CairoSurfaceSvgT s ps)
mkCairoSurfaceSvgT :: forall s ps. Ptr (CairoSurfaceT s ps) -> IO (CairoSurfaceSvgT s ps)
mkCairoSurfaceSvgT Ptr (CairoSurfaceT s ps)
p = ForeignPtr (CairoSurfaceT s ps) -> CairoSurfaceSvgT s ps
forall s ps.
ForeignPtr (CairoSurfaceT s ps) -> CairoSurfaceSvgT s ps
CairoSurfaceSvgT (ForeignPtr (CairoSurfaceT s ps) -> CairoSurfaceSvgT s ps)
-> IO (ForeignPtr (CairoSurfaceT s ps))
-> IO (CairoSurfaceSvgT s ps)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Ptr (CairoSurfaceT s ps)
-> IO () -> IO (ForeignPtr (CairoSurfaceT s ps))
forall a. Ptr a -> IO () -> IO (ForeignPtr a)
newForeignPtr Ptr (CairoSurfaceT s ps)
p (Ptr (CairoSurfaceT s ps) -> IO ()
forall s ps. Ptr (CairoSurfaceT s ps) -> IO ()
c_cairo_surface_destroy Ptr (CairoSurfaceT s ps)
p)

mkUnitMember "CairoSvgUnitUser" 0
{-# LINE 80 "src/Graphics/Cairo/Surfaces/SvgSurfaces.hsc" #-}
mkUnitMember "CairoSvgUnitEm" 1
{-# LINE 81 "src/Graphics/Cairo/Surfaces/SvgSurfaces.hsc" #-}
mkUnitMember "CairoSvgUnitEx" 2
{-# LINE 82 "src/Graphics/Cairo/Surfaces/SvgSurfaces.hsc" #-}
mkUnitMember "CairoSvgUnitPx" 3
{-# LINE 83 "src/Graphics/Cairo/Surfaces/SvgSurfaces.hsc" #-}
mkUnitMember "CairoSvgUnitIn" 4
{-# LINE 84 "src/Graphics/Cairo/Surfaces/SvgSurfaces.hsc" #-}
mkUnitMember "CairoSvgUnitCm" 5
{-# LINE 85 "src/Graphics/Cairo/Surfaces/SvgSurfaces.hsc" #-}
mkUnitMember "CairoSvgUnitMm" 6
{-# LINE 86 "src/Graphics/Cairo/Surfaces/SvgSurfaces.hsc" #-}
mkUnitMember "CairoSvgUnitPt" 7
{-# LINE 87 "src/Graphics/Cairo/Surfaces/SvgSurfaces.hsc" #-}
mkUnitMember "CairoSvgUnitPc" 8
{-# LINE 88 "src/Graphics/Cairo/Surfaces/SvgSurfaces.hsc" #-}
mkUnitMember "CAiroSvgUnitPercent" 9
{-# LINE 89 "src/Graphics/Cairo/Surfaces/SvgSurfaces.hsc" #-}

cairoSvgSurfaceGetDocumentUnit :: PrimMonad m =>
	CairoSurfaceSvgT s (PrimState m) -> m CairoSvgUnitT
cairoSvgSurfaceGetDocumentUnit :: forall (m :: * -> *) s.
PrimMonad m =>
CairoSurfaceSvgT s (PrimState m) -> m CairoSvgUnitT
cairoSvgSurfaceGetDocumentUnit (CairoSurfaceSvgT ForeignPtr (CairoSurfaceT s (PrimState m))
fsr) = IO CairoSvgUnitT -> m CairoSvgUnitT
forall (m :: * -> *) a. PrimMonad m => IO a -> m a
unsafeIOToPrim
	(IO CairoSvgUnitT -> m CairoSvgUnitT)
-> IO CairoSvgUnitT -> m CairoSvgUnitT
forall a b. (a -> b) -> a -> b
$ Word32 -> CairoSvgUnitT
CairoSvgUnitT (Word32 -> CairoSvgUnitT) -> IO Word32 -> IO CairoSvgUnitT
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> ForeignPtr (CairoSurfaceT s (PrimState m))
-> (Ptr (CairoSurfaceT s (PrimState m)) -> IO Word32) -> IO Word32
forall a b. ForeignPtr a -> (Ptr a -> IO b) -> IO b
withForeignPtr ForeignPtr (CairoSurfaceT s (PrimState m))
fsr Ptr (CairoSurfaceT s (PrimState m)) -> IO Word32
forall s ps. Ptr (CairoSurfaceT s ps) -> IO Word32
c_cairo_svg_surface_get_document_unit

foreign import ccall "cairo_svg_surface_get_document_unit" c_cairo_svg_surface_get_document_unit ::
	Ptr (CairoSurfaceT s ps) -> IO Word32
{-# LINE 97 "src/Graphics/Cairo/Surfaces/SvgSurfaces.hsc" #-}

cairoSvgSurfaceSetDocumentUnit :: PrimMonad m =>
	CairoSurfaceSvgT s (PrimState m) -> CairoSvgUnitT -> m ()
cairoSvgSurfaceSetDocumentUnit :: forall (m :: * -> *) s.
PrimMonad m =>
CairoSurfaceSvgT s (PrimState m) -> CairoSvgUnitT -> m ()
cairoSvgSurfaceSetDocumentUnit (CairoSurfaceSvgT ForeignPtr (CairoSurfaceT s (PrimState m))
fsr) (CairoSvgUnitT Word32
u) =
	IO () -> m ()
forall (m :: * -> *) a. PrimMonad m => IO a -> m a
unsafeIOToPrim (IO () -> m ()) -> IO () -> m ()
forall a b. (a -> b) -> a -> b
$ ForeignPtr (CairoSurfaceT s (PrimState m))
-> (Ptr (CairoSurfaceT s (PrimState m)) -> IO ()) -> IO ()
forall a b. ForeignPtr a -> (Ptr a -> IO b) -> IO b
withForeignPtr ForeignPtr (CairoSurfaceT s (PrimState m))
fsr \Ptr (CairoSurfaceT s (PrimState m))
psr -> Ptr (CairoSurfaceT s (PrimState m)) -> Word32 -> IO ()
forall s ps. Ptr (CairoSurfaceT s ps) -> Word32 -> IO ()
c_cairo_svg_surface_set_document_unit Ptr (CairoSurfaceT s (PrimState m))
psr Word32
u

foreign import ccall "cairo_svg_surface_set_document_unit" c_cairo_svg_surface_set_document_unit ::
	Ptr (CairoSurfaceT s ps) -> Word32 -> IO ()
{-# LINE 105 "src/Graphics/Cairo/Surfaces/SvgSurfaces.hsc" #-}

mkVersionMember "CairoSvgVersion1_1" 0
{-# LINE 107 "src/Graphics/Cairo/Surfaces/SvgSurfaces.hsc" #-}
mkVersionMember "CairoSvgVersion1_2" 1
{-# LINE 108 "src/Graphics/Cairo/Surfaces/SvgSurfaces.hsc" #-}

cairoSvgSurfaceRestrictToVersion :: PrimMonad m =>
	CairoSurfaceSvgT s (PrimState m) -> CairoSvgVersionT -> m ()
cairoSvgSurfaceRestrictToVersion :: forall (m :: * -> *) s.
PrimMonad m =>
CairoSurfaceSvgT s (PrimState m) -> CairoSvgVersionT -> m ()
cairoSvgSurfaceRestrictToVersion (CairoSurfaceSvgT ForeignPtr (CairoSurfaceT s (PrimState m))
fsr) (CairoSvgVersionT Word32
v) =
	IO () -> m ()
forall (m :: * -> *) a. PrimMonad m => IO a -> m a
unsafeIOToPrim (IO () -> m ()) -> IO () -> m ()
forall a b. (a -> b) -> a -> b
$ ForeignPtr (CairoSurfaceT s (PrimState m))
-> (Ptr (CairoSurfaceT s (PrimState m)) -> IO ()) -> IO ()
forall a b. ForeignPtr a -> (Ptr a -> IO b) -> IO b
withForeignPtr ForeignPtr (CairoSurfaceT s (PrimState m))
fsr \Ptr (CairoSurfaceT s (PrimState m))
psr -> Ptr (CairoSurfaceT s (PrimState m)) -> Word32 -> IO ()
forall s ps. Ptr (CairoSurfaceT s ps) -> Word32 -> IO ()
c_cairo_svg_surface_restrict_to_version Ptr (CairoSurfaceT s (PrimState m))
psr Word32
v

foreign import ccall "cairo_svg_surface_restrict_to_version" c_cairo_svg_surface_restrict_to_version ::
	Ptr (CairoSurfaceT s ps) -> Word32 -> IO ()
{-# LINE 116 "src/Graphics/Cairo/Surfaces/SvgSurfaces.hsc" #-}

cairoSvgGetVersions :: IO [CairoSvgVersionT]
cairoSvgGetVersions :: IO [CairoSvgVersionT]
cairoSvgGetVersions = (Word32 -> CairoSvgVersionT
CairoSvgVersionT (Word32 -> CairoSvgVersionT) -> [Word32] -> [CairoSvgVersionT]
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$>) ([Word32] -> [CairoSvgVersionT])
-> IO [Word32] -> IO [CairoSvgVersionT]
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> (Ptr (Ptr Word32) -> IO [Word32]) -> IO [Word32]
forall a b. Storable a => (Ptr a -> IO b) -> IO b
alloca \Ptr (Ptr Word32)
pvs -> (Ptr CInt -> IO [Word32]) -> IO [Word32]
forall a b. Storable a => (Ptr a -> IO b) -> IO b
alloca \Ptr CInt
pn -> do
	Ptr (Ptr Word32) -> Ptr CInt -> IO ()
c_cairo_svg_surface_get_versions Ptr (Ptr Word32)
pvs Ptr CInt
pn
	n <- Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek Ptr CInt
pn
	peekArray (fromIntegral n) =<< peek pvs

foreign import ccall "cairo_svg_get_versions" c_cairo_svg_surface_get_versions ::
	Ptr (Ptr Word32) -> Ptr CInt -> IO ()
{-# LINE 125 "src/Graphics/Cairo/Surfaces/SvgSurfaces.hsc" #-}

cairoSvgVersionToString :: CairoSvgVersionT -> String
cairoSvgVersionToString :: CairoSvgVersionT -> String
cairoSvgVersionToString (CairoSvgVersionT Word32
v) = IO String -> String
forall a. IO a -> a
unsafePerformIO do
	CString -> IO String
peekCString (CString -> IO String) -> IO CString -> IO String
forall (m :: * -> *) a b. Monad m => (a -> m b) -> m a -> m b
=<< Word32 -> IO CString
c_cairo_svg_version_to_string Word32
v

foreign import ccall "cairo_svg_version_to_string" c_cairo_svg_version_to_string ::
	Word32 -> IO CString
{-# LINE 132 "src/Graphics/Cairo/Surfaces/SvgSurfaces.hsc" #-}