{-# LANGUAGE GeneralizedNewtypeDeriving #-}
{-# OPTIONS_HADDOCK hide #-}
module GI.Cairo.Render.Internal (
Render(..), bracketR
, module GI.Cairo.Render.Types
, module GI.Cairo.Render.Internal.Drawing.Cairo
, module GI.Cairo.Render.Internal.Drawing.Paths
, module GI.Cairo.Render.Internal.Drawing.Patterns
, module GI.Cairo.Render.Internal.Drawing.Text
, module GI.Cairo.Render.Internal.Drawing.Transformations
, module GI.Cairo.Render.Internal.Fonts.FontOptions
, module GI.Cairo.Render.Internal.Surfaces.Image
, module GI.Cairo.Render.Internal.Surfaces.PDF
, module GI.Cairo.Render.Internal.Surfaces.PNG
, module GI.Cairo.Render.Internal.Surfaces.PS
, module GI.Cairo.Render.Internal.Surfaces.SVG
, module GI.Cairo.Render.Internal.Surfaces.Surface
, module GI.Cairo.Render.Internal.Region
, module GI.Cairo.Render.Internal.Utilities
) where
import GI.Cairo.Render.Types
import GI.Cairo.Render.Internal.Drawing.Cairo
import GI.Cairo.Render.Internal.Drawing.Paths
import GI.Cairo.Render.Internal.Drawing.Patterns
import GI.Cairo.Render.Internal.Drawing.Text
import GI.Cairo.Render.Internal.Drawing.Transformations
import GI.Cairo.Render.Internal.Fonts.FontOptions
import GI.Cairo.Render.Internal.Surfaces.Image
import GI.Cairo.Render.Internal.Surfaces.PDF
import GI.Cairo.Render.Internal.Surfaces.PNG
import GI.Cairo.Render.Internal.Surfaces.PS
import GI.Cairo.Render.Internal.Surfaces.SVG
import GI.Cairo.Render.Internal.Surfaces.Surface
import GI.Cairo.Render.Internal.Region
import GI.Cairo.Render.Internal.Utilities
import Control.Monad.Reader
import Control.Applicative
import Control.Exception (bracket)
newtype Render m = Render { Render m -> ReaderT Cairo IO m
runRender :: ReaderT Cairo IO m }
deriving (a -> Render b -> Render a
(a -> b) -> Render a -> Render b
(forall a b. (a -> b) -> Render a -> Render b)
-> (forall a b. a -> Render b -> Render a) -> Functor Render
forall a b. a -> Render b -> Render a
forall a b. (a -> b) -> Render a -> Render b
forall (f :: * -> *).
(forall a b. (a -> b) -> f a -> f b)
-> (forall a b. a -> f b -> f a) -> Functor f
<$ :: a -> Render b -> Render a
$c<$ :: forall a b. a -> Render b -> Render a
fmap :: (a -> b) -> Render a -> Render b
$cfmap :: forall a b. (a -> b) -> Render a -> Render b
Functor, Functor Render
a -> Render a
Functor Render =>
(forall a. a -> Render a)
-> (forall a b. Render (a -> b) -> Render a -> Render b)
-> (forall a b c.
(a -> b -> c) -> Render a -> Render b -> Render c)
-> (forall a b. Render a -> Render b -> Render b)
-> (forall a b. Render a -> Render b -> Render a)
-> Applicative Render
Render a -> Render b -> Render b
Render a -> Render b -> Render a
Render (a -> b) -> Render a -> Render b
(a -> b -> c) -> Render a -> Render b -> Render c
forall a. a -> Render a
forall a b. Render a -> Render b -> Render a
forall a b. Render a -> Render b -> Render b
forall a b. Render (a -> b) -> Render a -> Render b
forall a b c. (a -> b -> c) -> Render a -> Render b -> Render c
forall (f :: * -> *).
Functor f =>
(forall a. a -> f a)
-> (forall a b. f (a -> b) -> f a -> f b)
-> (forall a b c. (a -> b -> c) -> f a -> f b -> f c)
-> (forall a b. f a -> f b -> f b)
-> (forall a b. f a -> f b -> f a)
-> Applicative f
<* :: Render a -> Render b -> Render a
$c<* :: forall a b. Render a -> Render b -> Render a
*> :: Render a -> Render b -> Render b
$c*> :: forall a b. Render a -> Render b -> Render b
liftA2 :: (a -> b -> c) -> Render a -> Render b -> Render c
$cliftA2 :: forall a b c. (a -> b -> c) -> Render a -> Render b -> Render c
<*> :: Render (a -> b) -> Render a -> Render b
$c<*> :: forall a b. Render (a -> b) -> Render a -> Render b
pure :: a -> Render a
$cpure :: forall a. a -> Render a
$cp1Applicative :: Functor Render
Applicative, Applicative Render
a -> Render a
Applicative Render =>
(forall a b. Render a -> (a -> Render b) -> Render b)
-> (forall a b. Render a -> Render b -> Render b)
-> (forall a. a -> Render a)
-> Monad Render
Render a -> (a -> Render b) -> Render b
Render a -> Render b -> Render b
forall a. a -> Render a
forall a b. Render a -> Render b -> Render b
forall a b. Render a -> (a -> Render b) -> Render b
forall (m :: * -> *).
Applicative m =>
(forall a b. m a -> (a -> m b) -> m b)
-> (forall a b. m a -> m b -> m b)
-> (forall a. a -> m a)
-> Monad m
return :: a -> Render a
$creturn :: forall a. a -> Render a
>> :: Render a -> Render b -> Render b
$c>> :: forall a b. Render a -> Render b -> Render b
>>= :: Render a -> (a -> Render b) -> Render b
$c>>= :: forall a b. Render a -> (a -> Render b) -> Render b
$cp1Monad :: Applicative Render
Monad, Monad Render
Monad Render => (forall a. IO a -> Render a) -> MonadIO Render
IO a -> Render a
forall a. IO a -> Render a
forall (m :: * -> *).
Monad m =>
(forall a. IO a -> m a) -> MonadIO m
liftIO :: IO a -> Render a
$cliftIO :: forall a. IO a -> Render a
$cp1MonadIO :: Monad Render
MonadIO, MonadReader Cairo)
{-# INLINE bracketR #-}
bracketR :: IO a -> (a -> IO b) -> (a -> Render c) -> Render c
bracketR :: IO a -> (a -> IO b) -> (a -> Render c) -> Render c
bracketR begin :: IO a
begin end :: a -> IO b
end action :: a -> Render c
action =
ReaderT Cairo IO c -> Render c
forall m. ReaderT Cairo IO m -> Render m
Render (ReaderT Cairo IO c -> Render c) -> ReaderT Cairo IO c -> Render c
forall a b. (a -> b) -> a -> b
$
(Cairo -> IO c) -> ReaderT Cairo IO c
forall r (m :: * -> *) a. (r -> m a) -> ReaderT r m a
ReaderT ((Cairo -> IO c) -> ReaderT Cairo IO c)
-> (Cairo -> IO c) -> ReaderT Cairo IO c
forall a b. (a -> b) -> a -> b
$ \r :: Cairo
r ->
IO a -> (a -> IO b) -> (a -> IO c) -> IO c
forall a b c. IO a -> (a -> IO b) -> (a -> IO c) -> IO c
bracket IO a
begin a -> IO b
end
(\s :: a
s -> ReaderT Cairo IO c -> Cairo -> IO c
forall r (m :: * -> *) a. ReaderT r m a -> r -> m a
runReaderT (Render c -> ReaderT Cairo IO c
forall m. Render m -> ReaderT Cairo IO m
runRender (Render c -> ReaderT Cairo IO c) -> Render c -> ReaderT Cairo IO c
forall a b. (a -> b) -> a -> b
$ a -> Render c
action a
s) Cairo
r)