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