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

module Graphics.Cairo.Surfaces.CairoSurfaceT.Internal where

import Foreign.Ptr
import Foreign.ForeignPtr hiding (newForeignPtr)
import Foreign.Concurrent
import Control.Monad.Primitive
import Control.Concurrent.STM
import Data.Word
import System.IO.Unsafe

import Graphics.Cairo.Surfaces.CairoSurfaceTypeT

import Graphics.Cairo.Template



class IsCairoSurfaceT sr where
	toCairoSurfaceT :: sr s ps -> CairoSurfaceT s ps
	cairoSurfaceTFinishChecker :: sr s ps -> STM (TChan ())

	cairoSurfaceTFinishChecker sr s ps
_ = STM (TChan ())
forall a. STM (TChan a)
newTChan STM (TChan ()) -> (TChan () -> STM (TChan ())) -> STM (TChan ())
forall a b. STM a -> (a -> STM b) -> STM b
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= \TChan ()
c -> TChan ()
c TChan () -> STM () -> STM (TChan ())
forall a b. a -> STM b -> STM a
forall (f :: * -> *) a b. Functor f => a -> f b -> f a
<$ TChan () -> () -> STM ()
forall a. TChan a -> a -> STM ()
writeTChan TChan ()
c ()

instance IsCairoSurfaceT CairoSurfaceT where toCairoSurfaceT :: forall s ps. CairoSurfaceT s ps -> CairoSurfaceT s ps
toCairoSurfaceT = CairoSurfaceT s ps -> CairoSurfaceT s ps
forall a. a -> a
id

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

mkCairoSurfaceT :: Ptr (CairoSurfaceT s ps) -> IO (CairoSurfaceT s ps)
mkCairoSurfaceT :: forall s ps. Ptr (CairoSurfaceT s ps) -> IO (CairoSurfaceT s ps)
mkCairoSurfaceT Ptr (CairoSurfaceT s ps)
p = ForeignPtr (CairoSurfaceT s ps) -> CairoSurfaceT s ps
forall s ps. ForeignPtr (CairoSurfaceT s ps) -> CairoSurfaceT s ps
CairoSurfaceT (ForeignPtr (CairoSurfaceT s ps) -> CairoSurfaceT s ps)
-> IO (ForeignPtr (CairoSurfaceT s ps)) -> IO (CairoSurfaceT 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)

foreign import ccall "cairo_surface_destroy" c_cairo_surface_destroy ::
	Ptr (CairoSurfaceT s ps) -> IO ()

foreign import ccall "cairo_surface_finish" c_cairo_surface_finish ::
	Ptr (CairoSurfaceT s ps) -> IO ()

cairoSurfaceFlush :: (IsCairoSurfaceT sr, PrimMonad m) => sr s (PrimState m) -> m ()
cairoSurfaceFlush :: forall (sr :: * -> * -> *) (m :: * -> *) s.
(IsCairoSurfaceT sr, PrimMonad m) =>
sr s (PrimState m) -> m ()
cairoSurfaceFlush (sr s (PrimState m) -> CairoSurfaceT s (PrimState m)
forall s ps. sr s ps -> CairoSurfaceT s ps
forall (sr :: * -> * -> *) s ps.
IsCairoSurfaceT sr =>
sr s ps -> CairoSurfaceT s ps
toCairoSurfaceT -> CairoSurfaceT ForeignPtr (CairoSurfaceT s (PrimState m))
fsr) = 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)) -> IO ()
forall s ps. Ptr (CairoSurfaceT s ps) -> IO ()
c_cairo_surface_flush

foreign import ccall "cairo_surface_flush" c_cairo_surface_flush ::
	Ptr (CairoSurfaceT s ps) -> IO ()

cairoSurfaceGetType :: IsCairoSurfaceT sr => sr s ps -> CairoSurfaceTypeT
cairoSurfaceGetType :: forall (sr :: * -> * -> *) s ps.
IsCairoSurfaceT sr =>
sr s ps -> CairoSurfaceTypeT
cairoSurfaceGetType (sr s ps -> CairoSurfaceT s ps
forall s ps. sr s ps -> CairoSurfaceT s ps
forall (sr :: * -> * -> *) s ps.
IsCairoSurfaceT sr =>
sr s ps -> CairoSurfaceT s ps
toCairoSurfaceT -> CairoSurfaceT ForeignPtr (CairoSurfaceT s ps)
fsr) = IO CairoSurfaceTypeT -> CairoSurfaceTypeT
forall a. IO a -> a
unsafePerformIO
	(IO CairoSurfaceTypeT -> CairoSurfaceTypeT)
-> IO CairoSurfaceTypeT -> CairoSurfaceTypeT
forall a b. (a -> b) -> a -> b
$ Word32 -> CairoSurfaceTypeT
CairoSurfaceTypeT (Word32 -> CairoSurfaceTypeT) -> IO Word32 -> IO CairoSurfaceTypeT
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> ForeignPtr (CairoSurfaceT s ps)
-> (Ptr (CairoSurfaceT s ps) -> IO Word32) -> IO Word32
forall a b. ForeignPtr a -> (Ptr a -> IO b) -> IO b
withForeignPtr ForeignPtr (CairoSurfaceT s ps)
fsr Ptr (CairoSurfaceT s ps) -> IO Word32
forall s ps. Ptr (CairoSurfaceT s ps) -> IO Word32
c_cairo_surface_get_type

foreign import ccall "cairo_surface_get_type" c_cairo_surface_get_type ::
	Ptr (CairoSurfaceT s ps) -> IO Word32
{-# LINE 53 "src/Graphics/Cairo/Surfaces/CairoSurfaceT/Internal.hsc" #-}

cairoSurfaceGetContent :: IsCairoSurfaceT sr => sr s ps -> CairoContentT
cairoSurfaceGetContent :: forall (sr :: * -> * -> *) s ps.
IsCairoSurfaceT sr =>
sr s ps -> CairoContentT
cairoSurfaceGetContent (sr s ps -> CairoSurfaceT s ps
forall s ps. sr s ps -> CairoSurfaceT s ps
forall (sr :: * -> * -> *) s ps.
IsCairoSurfaceT sr =>
sr s ps -> CairoSurfaceT s ps
toCairoSurfaceT -> CairoSurfaceT ForeignPtr (CairoSurfaceT s ps)
fsr) = IO CairoContentT -> CairoContentT
forall a. IO a -> a
unsafePerformIO
	(IO CairoContentT -> CairoContentT)
-> IO CairoContentT -> CairoContentT
forall a b. (a -> b) -> a -> b
$ Word32 -> CairoContentT
CairoContentT (Word32 -> CairoContentT) -> IO Word32 -> IO CairoContentT
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> ForeignPtr (CairoSurfaceT s ps)
-> (Ptr (CairoSurfaceT s ps) -> IO Word32) -> IO Word32
forall a b. ForeignPtr a -> (Ptr a -> IO b) -> IO b
withForeignPtr ForeignPtr (CairoSurfaceT s ps)
fsr Ptr (CairoSurfaceT s ps) -> IO Word32
forall s ps. Ptr (CairoSurfaceT s ps) -> IO Word32
c_cairo_surface_get_content

foreign import ccall "cairo_surface_get_content" c_cairo_surface_get_content ::
	Ptr (CairoSurfaceT s ps) -> IO Word32
{-# LINE 60 "src/Graphics/Cairo/Surfaces/CairoSurfaceT/Internal.hsc" #-}

newtype CairoContentT = CairoContentT Word32 deriving Int -> CairoContentT -> ShowS
[CairoContentT] -> ShowS
CairoContentT -> String
(Int -> CairoContentT -> ShowS)
-> (CairoContentT -> String)
-> ([CairoContentT] -> ShowS)
-> Show CairoContentT
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> CairoContentT -> ShowS
showsPrec :: Int -> CairoContentT -> ShowS
$cshow :: CairoContentT -> String
show :: CairoContentT -> String
$cshowList :: [CairoContentT] -> ShowS
showList :: [CairoContentT] -> ShowS
Show
{-# LINE 62 "src/Graphics/Cairo/Surfaces/CairoSurfaceT/Internal.hsc" #-}

mkMemberGen ''CairoContentT 'CairoContentT "CairoContentColor" 4096
{-# LINE 64 "src/Graphics/Cairo/Surfaces/CairoSurfaceT/Internal.hsc" #-}
mkMemberGen ''CairoContentT 'CairoContentT "CairoContentAlpha" 8192
{-# LINE 65 "src/Graphics/Cairo/Surfaces/CairoSurfaceT/Internal.hsc" #-}
mkMemberGen ''CairoContentT 'CairoContentT "CairoContentColorAlpha" 12288
{-# LINE 66 "src/Graphics/Cairo/Surfaces/CairoSurfaceT/Internal.hsc" #-}