{-# LANGUAGE ScopedTypeVariables, MultiParamTypeClasses, FlexibleInstances, CPP #-}
#include<cairo-features.h>
#ifndef CAIRO_VERSION_MAJOR
#include<cairo-version.h>
#endif
#define CAIRO_VERSION_ENCODE(major, minor, micro) ( \
((major) * 10000) \
+ ((minor) * 100) \
+ ((micro) * 1))
#define CAIRO_VERSION CAIRO_VERSION_ENCODE( \
CAIRO_VERSION_MAJOR, \
CAIRO_VERSION_MINOR, \
CAIRO_VERSION_MICRO)
#define CAIRO_CHECK_VERSION(major,minor,micro) \
(CAIRO_VERSION >= CAIRO_VERSION_ENCODE(major,minor,micro))
module GI.Cairo.Render (
renderWith
, save
, restore
, status
, withTargetSurface
, pushGroup
, pushGroupWithContent
, popGroupToSource
, setSourceRGB
, setSourceRGBA
, setSource
, setSourceSurface
, getSource
, setAntialias
, setDash
, setFillRule
, getFillRule
, setLineCap
, getLineCap
, setLineJoin
, getLineJoin
, setLineWidth
, getLineWidth
, setMiterLimit
, getMiterLimit
, setOperator
, getOperator
, setTolerance
, getTolerance
, clip
, clipPreserve
, clipExtents
, resetClip
, fill
, fillPreserve
, fillExtents
, inFill
, mask
, maskSurface
, paint
, paintWithAlpha
, stroke
, strokePreserve
, strokeExtents
, inStroke
, copyPage
, showPage
, getCurrentPoint
, newPath
, closePath
, arc
, arcNegative
, curveTo
, lineTo
, moveTo
, rectangle
, textPath
, relCurveTo
, relLineTo
, relMoveTo
, withRGBPattern
, withRGBAPattern
, withPatternForSurface
, withGroupPattern
, withLinearPattern
, withRadialPattern
, patternAddColorStopRGB
, patternAddColorStopRGBA
, patternSetMatrix
, patternGetMatrix
, patternSetExtend
, patternGetExtend
, patternSetFilter
, patternGetFilter
, translate
, scale
, rotate
, transform
, setMatrix
, getMatrix
, identityMatrix
, userToDevice
, userToDeviceDistance
, deviceToUser
, deviceToUserDistance
, selectFontFace
, setFontSize
, setFontMatrix
, getFontMatrix
, setFontOptions
, showText
, fontExtents
, textExtents
, fontOptionsCreate
, fontOptionsCopy
, fontOptionsMerge
, fontOptionsHash
, fontOptionsEqual
, fontOptionsSetAntialias
, fontOptionsGetAntialias
, fontOptionsSetSubpixelOrder
, fontOptionsGetSubpixelOrder
, fontOptionsSetHintStyle
, fontOptionsGetHintStyle
, fontOptionsSetHintMetrics
, fontOptionsGetHintMetrics
, withSimilarSurface
, createSimilarSurface
, renderWithSimilarSurface
, surfaceGetFontOptions
, surfaceFinish
, surfaceFlush
, surfaceMarkDirty
, surfaceMarkDirtyRectangle
, surfaceSetDeviceOffset
, withImageSurface
, withImageSurfaceForData
#if CAIRO_CHECK_VERSION(1,6,0)
, formatStrideForWidth
#endif
, createImageSurfaceForData
, createImageSurface
, imageSurfaceGetWidth
, imageSurfaceGetHeight
#if CAIRO_CHECK_VERSION(1,2,0)
, imageSurfaceGetFormat
, imageSurfaceGetStride
#if __GLASGOW_HASKELL__ >= 606
, imageSurfaceGetData
#endif
, SurfaceData
, imageSurfaceGetPixels
#endif
#ifdef CAIRO_HAS_PNG_FUNCTIONS
, withImageSurfaceFromPNG
, imageSurfaceCreateFromPNG
, surfaceWriteToPNG
#endif
#ifdef CAIRO_HAS_PDF_SURFACE
, withPDFSurface
#if CAIRO_CHECK_VERSION(1,2,0)
, pdfSurfaceSetSize
#endif
#endif
#ifdef CAIRO_HAS_PS_SURFACE
, withPSSurface
#if CAIRO_CHECK_VERSION(1,2,0)
, psSurfaceSetSize
#endif
#endif
#ifdef CAIRO_HAS_SVG_SURFACE
, withSVGSurface
#endif
#if CAIRO_CHECK_VERSION(1,10,0)
, regionCreate
, regionCreateRectangle
, regionCreateRectangles
, regionCopy
, regionGetExtents
, regionNumRectangles
, regionGetRectangle
, regionIsEmpty
, regionContainsPoint
, regionContainsRectangle
, regionEqual
, regionTranslate
, regionIntersect
, regionIntersectRectangle
, regionSubtract
, regionSubtractRectangle
, regionUnion
, regionUnionRectangle
, regionXor
, regionXorRectangle
#endif
, liftIO
, version
, versionString
, CairoString
, Render
, Matrix
, Surface
, Pattern
, Status(..)
, Operator(..)
, Antialias(..)
, FillRule(..)
, LineCap(..)
, LineJoin(..)
, ScaledFont
, FontFace
, Glyph
, TextExtents(..)
, FontExtents(..)
, FontSlant(..)
, FontWeight(..)
, SubpixelOrder(..)
, HintStyle(..)
, HintMetrics(..)
, FontOptions
, Path
#if CAIRO_CHECK_VERSION(1,10,0)
, RectangleInt(..)
, RegionOverlap(..)
, Region
#endif
, Content(..)
, Format(..)
, Extend(..)
, Filter(..)
) where
import Data.GI.Base (wrapBoxed)
import Control.Monad (unless, when)
import Control.Monad.Reader (ReaderT(runReaderT), ask, MonadIO, liftIO)
import Control.Exception (bracket)
import Foreign.Ptr (Ptr, nullPtr, castPtr)
import Foreign.Storable (Storable(..))
import Foreign.ForeignPtr ( touchForeignPtr )
#if __GLASGOW_HASKELL__ >= 606
import qualified Data.ByteString as BS
#endif
import Data.Ix
import Data.Array.Base ( MArray, newArray, newArray_, unsafeRead, unsafeWrite,
#if __GLASGOW_HASKELL__ < 605
HasBounds, bounds
#else
getBounds
#endif
#if __GLASGOW_HASKELL__ >= 608
,getNumElements
#endif
)
#ifdef CAIRO_HAS_PNG_FUNCTIONS
import GI.Cairo.Render.Internal (imageSurfaceCreateFromPNG)
#endif
import GI.Cairo.Render.Types
import GI.Cairo.Render.Internal.Utilities (CairoString(..))
import qualified GI.Cairo.Render.Internal as Internal
import GI.Cairo.Render.Internal (Render(..), bracketR)
liftRender0 :: (Cairo -> IO a) -> Render a
liftRender0 :: (Cairo -> IO a) -> Render a
liftRender0 f :: Cairo -> IO a
f = Render Cairo
forall r (m :: * -> *). MonadReader r m => m r
ask Render Cairo -> (Cairo -> Render a) -> Render a
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= \context :: Cairo
context -> IO a -> Render a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (Cairo -> IO a
f Cairo
context)
liftRender1 :: (Cairo -> a -> IO b) -> a -> Render b
liftRender1 :: (Cairo -> a -> IO b) -> a -> Render b
liftRender1 f :: Cairo -> a -> IO b
f a :: a
a = Render Cairo
forall r (m :: * -> *). MonadReader r m => m r
ask Render Cairo -> (Cairo -> Render b) -> Render b
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= \context :: Cairo
context -> IO b -> Render b
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (Cairo -> a -> IO b
f Cairo
context a
a)
liftRender2 :: (Cairo -> a -> b -> IO c) -> a -> b -> Render c
liftRender2 :: (Cairo -> a -> b -> IO c) -> a -> b -> Render c
liftRender2 f :: Cairo -> a -> b -> IO c
f a :: a
a b :: b
b = Render Cairo
forall r (m :: * -> *). MonadReader r m => m r
ask Render Cairo -> (Cairo -> Render c) -> Render c
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= \context :: Cairo
context -> IO c -> Render c
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (Cairo -> a -> b -> IO c
f Cairo
context a
a b
b)
liftRender3 :: (Cairo -> a -> b -> c -> IO d) -> a -> b -> c -> Render d
liftRender3 :: (Cairo -> a -> b -> c -> IO d) -> a -> b -> c -> Render d
liftRender3 f :: Cairo -> a -> b -> c -> IO d
f a :: a
a b :: b
b c :: c
c = Render Cairo
forall r (m :: * -> *). MonadReader r m => m r
ask Render Cairo -> (Cairo -> Render d) -> Render d
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= \context :: Cairo
context -> IO d -> Render d
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (Cairo -> a -> b -> c -> IO d
f Cairo
context a
a b
b c
c)
liftRender4 :: (Cairo -> a -> b -> c -> d -> IO e) -> a -> b -> c -> d -> Render e
liftRender4 :: (Cairo -> a -> b -> c -> d -> IO e) -> a -> b -> c -> d -> Render e
liftRender4 f :: Cairo -> a -> b -> c -> d -> IO e
f a :: a
a b :: b
b c :: c
c d :: d
d = Render Cairo
forall r (m :: * -> *). MonadReader r m => m r
ask Render Cairo -> (Cairo -> Render e) -> Render e
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= \context :: Cairo
context -> IO e -> Render e
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (Cairo -> a -> b -> c -> d -> IO e
f Cairo
context a
a b
b c
c d
d)
liftRender5 :: (Cairo -> a -> b -> c -> d -> e -> IO f) -> a -> b -> c -> d -> e -> Render f
liftRender5 :: (Cairo -> a -> b -> c -> d -> e -> IO f)
-> a -> b -> c -> d -> e -> Render f
liftRender5 f :: Cairo -> a -> b -> c -> d -> e -> IO f
f a :: a
a b :: b
b c :: c
c d :: d
d e :: e
e = Render Cairo
forall r (m :: * -> *). MonadReader r m => m r
ask Render Cairo -> (Cairo -> Render f) -> Render f
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= \context :: Cairo
context -> IO f -> Render f
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (Cairo -> a -> b -> c -> d -> e -> IO f
f Cairo
context a
a b
b c
c d
d e
e)
liftRender6 :: (Cairo -> a -> b -> c -> d -> e -> f -> IO g) -> a -> b -> c -> d -> e -> f -> Render g
liftRender6 :: (Cairo -> a -> b -> c -> d -> e -> f -> IO g)
-> a -> b -> c -> d -> e -> f -> Render g
liftRender6 f :: Cairo -> a -> b -> c -> d -> e -> f -> IO g
f a :: a
a b :: b
b c :: c
c d :: d
d e :: e
e g :: f
g = Render Cairo
forall r (m :: * -> *). MonadReader r m => m r
ask Render Cairo -> (Cairo -> Render g) -> Render g
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= \context :: Cairo
context -> IO g -> Render g
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (Cairo -> a -> b -> c -> d -> e -> f -> IO g
f Cairo
context a
a b
b c
c d
d e
e f
g)
renderWith :: (MonadIO m) =>
Surface
-> Render a
-> m a
renderWith :: Surface -> Render a -> m a
renderWith surface :: Surface
surface (Render m :: ReaderT Cairo IO a
m) = IO a -> m a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO a -> m a) -> IO a -> m a
forall a b. (a -> b) -> a -> b
$
IO Cairo -> (Cairo -> IO ()) -> (Cairo -> IO a) -> IO a
forall a b c. IO a -> (a -> IO b) -> (a -> IO c) -> IO c
bracket (do CairoPtr
context <- Surface -> IO CairoPtr
Internal.create Surface
surface
(ManagedPtr Cairo -> Cairo) -> CairoPtr -> IO Cairo
forall a.
(HasCallStack, BoxedObject a) =>
(ManagedPtr a -> a) -> Ptr a -> IO a
wrapBoxed ManagedPtr Cairo -> Cairo
Cairo CairoPtr
context)
(\context :: Cairo
context -> do Status
status <- Cairo -> IO Status
Internal.status Cairo
context
Bool -> IO () -> IO ()
forall (f :: * -> *). Applicative f => Bool -> f () -> f ()
unless (Status
status Status -> Status -> Bool
forall a. Eq a => a -> a -> Bool
== Status
StatusSuccess) (IO () -> IO ()) -> IO () -> IO ()
forall a b. (a -> b) -> a -> b
$
String -> IO ()
forall (m :: * -> *) a. MonadFail m => String -> m a
fail (String -> IO ()) -> IO String -> IO ()
forall (m :: * -> *) a b. Monad m => (a -> m b) -> m a -> m b
=<< Status -> IO String
Internal.statusToString Status
status)
(\context :: Cairo
context -> ReaderT Cairo IO a -> Cairo -> IO a
forall r (m :: * -> *) a. ReaderT r m a -> r -> m a
runReaderT ReaderT Cairo IO a
m Cairo
context)
save :: Render ()
save :: Render ()
save = (Cairo -> IO ()) -> Render ()
forall a. (Cairo -> IO a) -> Render a
liftRender0 Cairo -> IO ()
Internal.save
restore :: Render ()
restore :: Render ()
restore = (Cairo -> IO ()) -> Render ()
forall a. (Cairo -> IO a) -> Render a
liftRender0 Cairo -> IO ()
Internal.restore
status :: Render Status
status :: Render Status
status = (Cairo -> IO Status) -> Render Status
forall a. (Cairo -> IO a) -> Render a
liftRender0 Cairo -> IO Status
Internal.status
withTargetSurface :: (Surface -> Render a) -> Render a
withTargetSurface :: (Surface -> Render a) -> Render a
withTargetSurface f :: Surface -> Render a
f = do
Cairo
context <- Render Cairo
forall r (m :: * -> *). MonadReader r m => m r
ask
Surface
surface <- IO Surface -> Render Surface
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO Surface -> Render Surface) -> IO Surface -> Render Surface
forall a b. (a -> b) -> a -> b
$ Cairo -> IO Surface
Internal.getTarget Cairo
context
Surface -> Render a
f Surface
surface
pushGroup :: Render ()
pushGroup :: Render ()
pushGroup = (Cairo -> IO ()) -> Render ()
forall a. (Cairo -> IO a) -> Render a
liftRender0 Cairo -> IO ()
Internal.pushGroup
pushGroupWithContent :: Content -> Render ()
pushGroupWithContent :: Content -> Render ()
pushGroupWithContent = (Cairo -> Content -> IO ()) -> Content -> Render ()
forall a b. (Cairo -> a -> IO b) -> a -> Render b
liftRender1 Cairo -> Content -> IO ()
Internal.pushGroupWithContent
popGroupToSource :: Render ()
popGroupToSource :: Render ()
popGroupToSource = (Cairo -> IO ()) -> Render ()
forall a. (Cairo -> IO a) -> Render a
liftRender0 Cairo -> IO ()
Internal.popGroupToSource
setSourceRGB ::
Double
-> Double
-> Double
-> Render ()
setSourceRGB :: Double -> Double -> Double -> Render ()
setSourceRGB = (Cairo -> Double -> Double -> Double -> IO ())
-> Double -> Double -> Double -> Render ()
forall a b c d.
(Cairo -> a -> b -> c -> IO d) -> a -> b -> c -> Render d
liftRender3 Cairo -> Double -> Double -> Double -> IO ()
Internal.setSourceRGB
setSourceRGBA ::
Double
-> Double
-> Double
-> Double
-> Render ()
setSourceRGBA :: Double -> Double -> Double -> Double -> Render ()
setSourceRGBA = (Cairo -> Double -> Double -> Double -> Double -> IO ())
-> Double -> Double -> Double -> Double -> Render ()
forall a b c d e.
(Cairo -> a -> b -> c -> d -> IO e) -> a -> b -> c -> d -> Render e
liftRender4 Cairo -> Double -> Double -> Double -> Double -> IO ()
Internal.setSourceRGBA
setSource ::
Pattern
-> Render ()
setSource :: Pattern -> Render ()
setSource = (Cairo -> Pattern -> IO ()) -> Pattern -> Render ()
forall a b. (Cairo -> a -> IO b) -> a -> Render b
liftRender1 Cairo -> Pattern -> IO ()
Internal.setSource
setSourceSurface ::
Surface
-> Double
-> Double
-> Render ()
setSourceSurface :: Surface -> Double -> Double -> Render ()
setSourceSurface = (Cairo -> Surface -> Double -> Double -> IO ())
-> Surface -> Double -> Double -> Render ()
forall a b c d.
(Cairo -> a -> b -> c -> IO d) -> a -> b -> c -> Render d
liftRender3 Cairo -> Surface -> Double -> Double -> IO ()
Internal.setSourceSurface
getSource :: Render Pattern
getSource :: Render Pattern
getSource = (Cairo -> IO Pattern) -> Render Pattern
forall a. (Cairo -> IO a) -> Render a
liftRender0 Cairo -> IO Pattern
Internal.getSource
setAntialias ::
Antialias
-> Render ()
setAntialias :: Antialias -> Render ()
setAntialias = (Cairo -> Antialias -> IO ()) -> Antialias -> Render ()
forall a b. (Cairo -> a -> IO b) -> a -> Render b
liftRender1 Cairo -> Antialias -> IO ()
Internal.setAntialias
getAntialias :: Render Antialias
getAntialias :: Render Antialias
getAntialias = (Cairo -> IO Antialias) -> Render Antialias
forall a. (Cairo -> IO a) -> Render a
liftRender0 Cairo -> IO Antialias
Internal.getAntialias
setDash ::
[Double]
-> Double
-> Render ()
setDash :: [Double] -> Double -> Render ()
setDash = (Cairo -> [Double] -> Double -> IO ())
-> [Double] -> Double -> Render ()
forall a b c. (Cairo -> a -> b -> IO c) -> a -> b -> Render c
liftRender2 Cairo -> [Double] -> Double -> IO ()
forall a1 a2.
(RealFloat a1, RealFloat a2) =>
Cairo -> [a1] -> a2 -> IO ()
Internal.setDash
setFillRule ::
FillRule
-> Render ()
setFillRule :: FillRule -> Render ()
setFillRule = (Cairo -> FillRule -> IO ()) -> FillRule -> Render ()
forall a b. (Cairo -> a -> IO b) -> a -> Render b
liftRender1 Cairo -> FillRule -> IO ()
Internal.setFillRule
getFillRule :: Render FillRule
getFillRule :: Render FillRule
getFillRule = (Cairo -> IO FillRule) -> Render FillRule
forall a. (Cairo -> IO a) -> Render a
liftRender0 Cairo -> IO FillRule
Internal.getFillRule
setLineCap ::
LineCap
-> Render ()
setLineCap :: LineCap -> Render ()
setLineCap = (Cairo -> LineCap -> IO ()) -> LineCap -> Render ()
forall a b. (Cairo -> a -> IO b) -> a -> Render b
liftRender1 Cairo -> LineCap -> IO ()
Internal.setLineCap
getLineCap :: Render LineCap
getLineCap :: Render LineCap
getLineCap = (Cairo -> IO LineCap) -> Render LineCap
forall a. (Cairo -> IO a) -> Render a
liftRender0 Cairo -> IO LineCap
Internal.getLineCap
setLineJoin ::
LineJoin
-> Render ()
setLineJoin :: LineJoin -> Render ()
setLineJoin = (Cairo -> LineJoin -> IO ()) -> LineJoin -> Render ()
forall a b. (Cairo -> a -> IO b) -> a -> Render b
liftRender1 Cairo -> LineJoin -> IO ()
Internal.setLineJoin
getLineJoin :: Render LineJoin
getLineJoin :: Render LineJoin
getLineJoin = (Cairo -> IO LineJoin) -> Render LineJoin
forall a. (Cairo -> IO a) -> Render a
liftRender0 Cairo -> IO LineJoin
Internal.getLineJoin
setLineWidth ::
Double
-> Render ()
setLineWidth :: Double -> Render ()
setLineWidth = (Cairo -> Double -> IO ()) -> Double -> Render ()
forall a b. (Cairo -> a -> IO b) -> a -> Render b
liftRender1 Cairo -> Double -> IO ()
Internal.setLineWidth
getLineWidth :: Render Double
getLineWidth :: Render Double
getLineWidth = (Cairo -> IO Double) -> Render Double
forall a. (Cairo -> IO a) -> Render a
liftRender0 Cairo -> IO Double
Internal.getLineWidth
setMiterLimit ::
Double
-> Render ()
setMiterLimit :: Double -> Render ()
setMiterLimit = (Cairo -> Double -> IO ()) -> Double -> Render ()
forall a b. (Cairo -> a -> IO b) -> a -> Render b
liftRender1 Cairo -> Double -> IO ()
Internal.setMiterLimit
getMiterLimit :: Render Double
getMiterLimit :: Render Double
getMiterLimit = (Cairo -> IO Double) -> Render Double
forall a. (Cairo -> IO a) -> Render a
liftRender0 Cairo -> IO Double
Internal.getMiterLimit
setOperator ::
Operator
-> Render ()
setOperator :: Operator -> Render ()
setOperator = (Cairo -> Operator -> IO ()) -> Operator -> Render ()
forall a b. (Cairo -> a -> IO b) -> a -> Render b
liftRender1 Cairo -> Operator -> IO ()
Internal.setOperator
getOperator :: Render Operator
getOperator :: Render Operator
getOperator = (Cairo -> IO Operator) -> Render Operator
forall a. (Cairo -> IO a) -> Render a
liftRender0 Cairo -> IO Operator
Internal.getOperator
setTolerance ::
Double
-> Render ()
setTolerance :: Double -> Render ()
setTolerance = (Cairo -> Double -> IO ()) -> Double -> Render ()
forall a b. (Cairo -> a -> IO b) -> a -> Render b
liftRender1 Cairo -> Double -> IO ()
Internal.setTolerance
getTolerance :: Render Double
getTolerance :: Render Double
getTolerance = (Cairo -> IO Double) -> Render Double
forall a. (Cairo -> IO a) -> Render a
liftRender0 Cairo -> IO Double
Internal.getTolerance
clip :: Render ()
clip :: Render ()
clip = (Cairo -> IO ()) -> Render ()
forall a. (Cairo -> IO a) -> Render a
liftRender0 Cairo -> IO ()
Internal.clip
clipPreserve :: Render ()
clipPreserve :: Render ()
clipPreserve = (Cairo -> IO ()) -> Render ()
forall a. (Cairo -> IO a) -> Render a
liftRender0 Cairo -> IO ()
Internal.clipPreserve
resetClip :: Render ()
resetClip :: Render ()
resetClip = (Cairo -> IO ()) -> Render ()
forall a. (Cairo -> IO a) -> Render a
liftRender0 Cairo -> IO ()
Internal.resetClip
clipExtents :: Render (Double,Double,Double,Double)
clipExtents :: Render (Double, Double, Double, Double)
clipExtents = (Cairo -> IO (Double, Double, Double, Double))
-> Render (Double, Double, Double, Double)
forall a. (Cairo -> IO a) -> Render a
liftRender0 Cairo -> IO (Double, Double, Double, Double)
Internal.clipExtents
fill :: Render ()
fill :: Render ()
fill = (Cairo -> IO ()) -> Render ()
forall a. (Cairo -> IO a) -> Render a
liftRender0 Cairo -> IO ()
Internal.fill
fillPreserve :: Render ()
fillPreserve :: Render ()
fillPreserve = (Cairo -> IO ()) -> Render ()
forall a. (Cairo -> IO a) -> Render a
liftRender0 Cairo -> IO ()
Internal.fillPreserve
fillExtents :: Render (Double,Double,Double,Double)
fillExtents :: Render (Double, Double, Double, Double)
fillExtents = (Cairo -> IO (Double, Double, Double, Double))
-> Render (Double, Double, Double, Double)
forall a. (Cairo -> IO a) -> Render a
liftRender0 Cairo -> IO (Double, Double, Double, Double)
Internal.fillExtents
inFill :: Double -> Double -> Render Bool
inFill :: Double -> Double -> Render Bool
inFill = (Cairo -> Double -> Double -> IO Bool)
-> Double -> Double -> Render Bool
forall a b c. (Cairo -> a -> b -> IO c) -> a -> b -> Render c
liftRender2 Cairo -> Double -> Double -> IO Bool
Internal.inFill
mask ::
Pattern
-> Render ()
mask :: Pattern -> Render ()
mask = (Cairo -> Pattern -> IO ()) -> Pattern -> Render ()
forall a b. (Cairo -> a -> IO b) -> a -> Render b
liftRender1 Cairo -> Pattern -> IO ()
Internal.mask
maskSurface ::
Surface
-> Double
-> Double
-> Render ()
maskSurface :: Surface -> Double -> Double -> Render ()
maskSurface = (Cairo -> Surface -> Double -> Double -> IO ())
-> Surface -> Double -> Double -> Render ()
forall a b c d.
(Cairo -> a -> b -> c -> IO d) -> a -> b -> c -> Render d
liftRender3 Cairo -> Surface -> Double -> Double -> IO ()
Internal.maskSurface
paint :: Render ()
paint :: Render ()
paint = (Cairo -> IO ()) -> Render ()
forall a. (Cairo -> IO a) -> Render a
liftRender0 Cairo -> IO ()
Internal.paint
paintWithAlpha ::
Double
-> Render ()
paintWithAlpha :: Double -> Render ()
paintWithAlpha = (Cairo -> Double -> IO ()) -> Double -> Render ()
forall a b. (Cairo -> a -> IO b) -> a -> Render b
liftRender1 Cairo -> Double -> IO ()
Internal.paintWithAlpha
stroke :: Render ()
stroke :: Render ()
stroke = (Cairo -> IO ()) -> Render ()
forall a. (Cairo -> IO a) -> Render a
liftRender0 Cairo -> IO ()
Internal.stroke
strokePreserve :: Render ()
strokePreserve :: Render ()
strokePreserve = (Cairo -> IO ()) -> Render ()
forall a. (Cairo -> IO a) -> Render a
liftRender0 Cairo -> IO ()
Internal.strokePreserve
strokeExtents :: Render (Double,Double,Double,Double)
strokeExtents :: Render (Double, Double, Double, Double)
strokeExtents = (Cairo -> IO (Double, Double, Double, Double))
-> Render (Double, Double, Double, Double)
forall a. (Cairo -> IO a) -> Render a
liftRender0 Cairo -> IO (Double, Double, Double, Double)
Internal.strokeExtents
inStroke :: Double -> Double -> Render Bool
inStroke :: Double -> Double -> Render Bool
inStroke = (Cairo -> Double -> Double -> IO Bool)
-> Double -> Double -> Render Bool
forall a b c. (Cairo -> a -> b -> IO c) -> a -> b -> Render c
liftRender2 Cairo -> Double -> Double -> IO Bool
Internal.inStroke
copyPage :: Render ()
copyPage :: Render ()
copyPage = (Cairo -> IO ()) -> Render ()
forall a. (Cairo -> IO a) -> Render a
liftRender0 Cairo -> IO ()
Internal.copyPage
showPage :: Render ()
showPage :: Render ()
showPage = (Cairo -> IO ()) -> Render ()
forall a. (Cairo -> IO a) -> Render a
liftRender0 Cairo -> IO ()
Internal.showPage
getCurrentPoint :: Render (Double,Double)
getCurrentPoint :: Render (Double, Double)
getCurrentPoint = (Cairo -> IO (Double, Double)) -> Render (Double, Double)
forall a. (Cairo -> IO a) -> Render a
liftRender0 Cairo -> IO (Double, Double)
Internal.getCurrentPoint
newPath :: Render ()
newPath :: Render ()
newPath = (Cairo -> IO ()) -> Render ()
forall a. (Cairo -> IO a) -> Render a
liftRender0 Cairo -> IO ()
Internal.newPath
closePath :: Render ()
closePath :: Render ()
closePath = (Cairo -> IO ()) -> Render ()
forall a. (Cairo -> IO a) -> Render a
liftRender0 Cairo -> IO ()
Internal.closePath
arc ::
Double
-> Double
-> Double
-> Double
-> Double
-> Render ()
arc :: Double -> Double -> Double -> Double -> Double -> Render ()
arc = (Cairo -> Double -> Double -> Double -> Double -> Double -> IO ())
-> Double -> Double -> Double -> Double -> Double -> Render ()
forall a b c d e f.
(Cairo -> a -> b -> c -> d -> e -> IO f)
-> a -> b -> c -> d -> e -> Render f
liftRender5 Cairo -> Double -> Double -> Double -> Double -> Double -> IO ()
Internal.arc
arcNegative ::
Double
-> Double
-> Double
-> Double
-> Double
-> Render ()
arcNegative :: Double -> Double -> Double -> Double -> Double -> Render ()
arcNegative = (Cairo -> Double -> Double -> Double -> Double -> Double -> IO ())
-> Double -> Double -> Double -> Double -> Double -> Render ()
forall a b c d e f.
(Cairo -> a -> b -> c -> d -> e -> IO f)
-> a -> b -> c -> d -> e -> Render f
liftRender5 Cairo -> Double -> Double -> Double -> Double -> Double -> IO ()
Internal.arcNegative
curveTo ::
Double
-> Double
-> Double
-> Double
-> Double
-> Double
-> Render ()
curveTo :: Double
-> Double -> Double -> Double -> Double -> Double -> Render ()
curveTo = (Cairo
-> Double
-> Double
-> Double
-> Double
-> Double
-> Double
-> IO ())
-> Double
-> Double
-> Double
-> Double
-> Double
-> Double
-> Render ()
forall a b c d e f g.
(Cairo -> a -> b -> c -> d -> e -> f -> IO g)
-> a -> b -> c -> d -> e -> f -> Render g
liftRender6 Cairo
-> Double
-> Double
-> Double
-> Double
-> Double
-> Double
-> IO ()
Internal.curveTo
lineTo ::
Double
-> Double
-> Render ()
lineTo :: Double -> Double -> Render ()
lineTo = (Cairo -> Double -> Double -> IO ())
-> Double -> Double -> Render ()
forall a b c. (Cairo -> a -> b -> IO c) -> a -> b -> Render c
liftRender2 Cairo -> Double -> Double -> IO ()
Internal.lineTo
moveTo ::
Double
-> Double
-> Render ()
moveTo :: Double -> Double -> Render ()
moveTo = (Cairo -> Double -> Double -> IO ())
-> Double -> Double -> Render ()
forall a b c. (Cairo -> a -> b -> IO c) -> a -> b -> Render c
liftRender2 Cairo -> Double -> Double -> IO ()
Internal.moveTo
rectangle ::
Double
-> Double
-> Double
-> Double
-> Render ()
rectangle :: Double -> Double -> Double -> Double -> Render ()
rectangle = (Cairo -> Double -> Double -> Double -> Double -> IO ())
-> Double -> Double -> Double -> Double -> Render ()
forall a b c d e.
(Cairo -> a -> b -> c -> d -> IO e) -> a -> b -> c -> d -> Render e
liftRender4 Cairo -> Double -> Double -> Double -> Double -> IO ()
Internal.rectangle
textPath ::
CairoString string
=> string
-> Render ()
textPath :: string -> Render ()
textPath = (Cairo -> string -> IO ()) -> string -> Render ()
forall a b. (Cairo -> a -> IO b) -> a -> Render b
liftRender1 Cairo -> string -> IO ()
forall string. CairoString string => Cairo -> string -> IO ()
Internal.textPath
relCurveTo ::
Double
-> Double
-> Double
-> Double
-> Double
-> Double
-> Render ()
relCurveTo :: Double
-> Double -> Double -> Double -> Double -> Double -> Render ()
relCurveTo = (Cairo
-> Double
-> Double
-> Double
-> Double
-> Double
-> Double
-> IO ())
-> Double
-> Double
-> Double
-> Double
-> Double
-> Double
-> Render ()
forall a b c d e f g.
(Cairo -> a -> b -> c -> d -> e -> f -> IO g)
-> a -> b -> c -> d -> e -> f -> Render g
liftRender6 Cairo
-> Double
-> Double
-> Double
-> Double
-> Double
-> Double
-> IO ()
Internal.relCurveTo
relLineTo ::
Double
-> Double
-> Render ()
relLineTo :: Double -> Double -> Render ()
relLineTo = (Cairo -> Double -> Double -> IO ())
-> Double -> Double -> Render ()
forall a b c. (Cairo -> a -> b -> IO c) -> a -> b -> Render c
liftRender2 Cairo -> Double -> Double -> IO ()
Internal.relLineTo
relMoveTo ::
Double
-> Double
-> Render ()
relMoveTo :: Double -> Double -> Render ()
relMoveTo = (Cairo -> Double -> Double -> IO ())
-> Double -> Double -> Render ()
forall a b c. (Cairo -> a -> b -> IO c) -> a -> b -> Render c
liftRender2 Cairo -> Double -> Double -> IO ()
Internal.relMoveTo
withRGBPattern ::
Double
-> Double
-> Double
-> (Pattern -> Render a)
-> Render a
withRGBPattern :: Double -> Double -> Double -> (Pattern -> Render a) -> Render a
withRGBPattern r :: Double
r g :: Double
g b :: Double
b f :: Pattern -> Render a
f =
IO Pattern
-> (Pattern -> IO ()) -> (Pattern -> Render a) -> Render a
forall a b c. IO a -> (a -> IO b) -> (a -> Render c) -> Render c
bracketR (Double -> Double -> Double -> IO Pattern
Internal.patternCreateRGB Double
r Double
g Double
b)
(\pattern :: Pattern
pattern -> do Status
status <- Pattern -> IO Status
Internal.patternStatus Pattern
pattern
IO () -> IO ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> IO ()) -> IO () -> IO ()
forall a b. (a -> b) -> a -> b
$ Pattern -> IO ()
Internal.patternDestroy Pattern
pattern
Bool -> IO () -> IO ()
forall (f :: * -> *). Applicative f => Bool -> f () -> f ()
unless (Status
status Status -> Status -> Bool
forall a. Eq a => a -> a -> Bool
== Status
StatusSuccess) (IO () -> IO ()) -> IO () -> IO ()
forall a b. (a -> b) -> a -> b
$
String -> IO ()
forall (m :: * -> *) a. MonadFail m => String -> m a
fail (String -> IO ()) -> IO String -> IO ()
forall (m :: * -> *) a b. Monad m => (a -> m b) -> m a -> m b
=<< Status -> IO String
Internal.statusToString Status
status)
(\pattern :: Pattern
pattern -> Pattern -> Render a
f Pattern
pattern)
withRGBAPattern ::
Double
-> Double
-> Double
-> Double
-> (Pattern -> Render a)
-> Render a
withRGBAPattern :: Double
-> Double -> Double -> Double -> (Pattern -> Render a) -> Render a
withRGBAPattern r :: Double
r g :: Double
g b :: Double
b a :: Double
a f :: Pattern -> Render a
f =
IO Pattern
-> (Pattern -> IO ()) -> (Pattern -> Render a) -> Render a
forall a b c. IO a -> (a -> IO b) -> (a -> Render c) -> Render c
bracketR (Double -> Double -> Double -> Double -> IO Pattern
Internal.patternCreateRGBA Double
r Double
g Double
b Double
a)
(\pattern :: Pattern
pattern -> do Status
status <- Pattern -> IO Status
Internal.patternStatus Pattern
pattern
IO () -> IO ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> IO ()) -> IO () -> IO ()
forall a b. (a -> b) -> a -> b
$ Pattern -> IO ()
Internal.patternDestroy Pattern
pattern
Bool -> IO () -> IO ()
forall (f :: * -> *). Applicative f => Bool -> f () -> f ()
unless (Status
status Status -> Status -> Bool
forall a. Eq a => a -> a -> Bool
== Status
StatusSuccess) (IO () -> IO ()) -> IO () -> IO ()
forall a b. (a -> b) -> a -> b
$
String -> IO ()
forall (m :: * -> *) a. MonadFail m => String -> m a
fail (String -> IO ()) -> IO String -> IO ()
forall (m :: * -> *) a b. Monad m => (a -> m b) -> m a -> m b
=<< Status -> IO String
Internal.statusToString Status
status)
(\pattern :: Pattern
pattern -> Pattern -> Render a
f Pattern
pattern)
withPatternForSurface ::
Surface
-> (Pattern -> Render a)
-> Render a
withPatternForSurface :: Surface -> (Pattern -> Render a) -> Render a
withPatternForSurface surface :: Surface
surface f :: Pattern -> Render a
f =
IO Pattern
-> (Pattern -> IO ()) -> (Pattern -> Render a) -> Render a
forall a b c. IO a -> (a -> IO b) -> (a -> Render c) -> Render c
bracketR (Surface -> IO Pattern
Internal.patternCreateForSurface Surface
surface)
(\pattern :: Pattern
pattern -> do Status
status <- Pattern -> IO Status
Internal.patternStatus Pattern
pattern
IO () -> IO ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> IO ()) -> IO () -> IO ()
forall a b. (a -> b) -> a -> b
$ Pattern -> IO ()
Internal.patternDestroy Pattern
pattern
Bool -> IO () -> IO ()
forall (f :: * -> *). Applicative f => Bool -> f () -> f ()
unless (Status
status Status -> Status -> Bool
forall a. Eq a => a -> a -> Bool
== Status
StatusSuccess) (IO () -> IO ()) -> IO () -> IO ()
forall a b. (a -> b) -> a -> b
$
String -> IO ()
forall (m :: * -> *) a. MonadFail m => String -> m a
fail (String -> IO ()) -> IO String -> IO ()
forall (m :: * -> *) a b. Monad m => (a -> m b) -> m a -> m b
=<< Status -> IO String
Internal.statusToString Status
status)
(\pattern :: Pattern
pattern -> Pattern -> Render a
f Pattern
pattern)
withGroupPattern :: (Pattern -> Render a)
-> Render a
withGroupPattern :: (Pattern -> Render a) -> Render a
withGroupPattern f :: Pattern -> Render a
f = do
Cairo
context <- Render Cairo
forall r (m :: * -> *). MonadReader r m => m r
ask
IO Pattern
-> (Pattern -> IO ()) -> (Pattern -> Render a) -> Render a
forall a b c. IO a -> (a -> IO b) -> (a -> Render c) -> Render c
bracketR (Cairo -> IO Pattern
Internal.popGroup Cairo
context)
(\pattern :: Pattern
pattern -> do Status
status <- Pattern -> IO Status
Internal.patternStatus Pattern
pattern
IO () -> IO ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> IO ()) -> IO () -> IO ()
forall a b. (a -> b) -> a -> b
$ Pattern -> IO ()
Internal.patternDestroy Pattern
pattern
Bool -> IO () -> IO ()
forall (f :: * -> *). Applicative f => Bool -> f () -> f ()
unless (Status
status Status -> Status -> Bool
forall a. Eq a => a -> a -> Bool
== Status
StatusSuccess) (IO () -> IO ()) -> IO () -> IO ()
forall a b. (a -> b) -> a -> b
$
String -> IO ()
forall (m :: * -> *) a. MonadFail m => String -> m a
fail (String -> IO ()) -> IO String -> IO ()
forall (m :: * -> *) a b. Monad m => (a -> m b) -> m a -> m b
=<< Status -> IO String
Internal.statusToString Status
status)
Pattern -> Render a
f
withLinearPattern ::
Double
-> Double
-> Double
-> Double
-> (Pattern -> Render a)
-> Render a
withLinearPattern :: Double
-> Double -> Double -> Double -> (Pattern -> Render a) -> Render a
withLinearPattern x0 :: Double
x0 y0 :: Double
y0 x1 :: Double
x1 y1 :: Double
y1 f :: Pattern -> Render a
f =
IO Pattern
-> (Pattern -> IO ()) -> (Pattern -> Render a) -> Render a
forall a b c. IO a -> (a -> IO b) -> (a -> Render c) -> Render c
bracketR (Double -> Double -> Double -> Double -> IO Pattern
Internal.patternCreateLinear Double
x0 Double
y0 Double
x1 Double
y1)
(\pattern :: Pattern
pattern -> do Status
status <- Pattern -> IO Status
Internal.patternStatus Pattern
pattern
IO () -> IO ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> IO ()) -> IO () -> IO ()
forall a b. (a -> b) -> a -> b
$ Pattern -> IO ()
Internal.patternDestroy Pattern
pattern
Bool -> IO () -> IO ()
forall (f :: * -> *). Applicative f => Bool -> f () -> f ()
unless (Status
status Status -> Status -> Bool
forall a. Eq a => a -> a -> Bool
== Status
StatusSuccess) (IO () -> IO ()) -> IO () -> IO ()
forall a b. (a -> b) -> a -> b
$
String -> IO ()
forall (m :: * -> *) a. MonadFail m => String -> m a
fail (String -> IO ()) -> IO String -> IO ()
forall (m :: * -> *) a b. Monad m => (a -> m b) -> m a -> m b
=<< Status -> IO String
Internal.statusToString Status
status)
(\pattern :: Pattern
pattern -> Pattern -> Render a
f Pattern
pattern)
withRadialPattern ::
Double
-> Double
-> Double
-> Double
-> Double
-> Double
-> (Pattern -> Render a)
-> Render a
withRadialPattern :: Double
-> Double
-> Double
-> Double
-> Double
-> Double
-> (Pattern -> Render a)
-> Render a
withRadialPattern cx0 :: Double
cx0 cy0 :: Double
cy0 radius0 :: Double
radius0 cx1 :: Double
cx1 cy1 :: Double
cy1 radius1 :: Double
radius1 f :: Pattern -> Render a
f =
IO Pattern
-> (Pattern -> IO ()) -> (Pattern -> Render a) -> Render a
forall a b c. IO a -> (a -> IO b) -> (a -> Render c) -> Render c
bracketR (Double
-> Double -> Double -> Double -> Double -> Double -> IO Pattern
Internal.patternCreateRadial Double
cx0 Double
cy0 Double
radius0 Double
cx1 Double
cy1 Double
radius1)
(\pattern :: Pattern
pattern -> do Status
status <- Pattern -> IO Status
Internal.patternStatus Pattern
pattern
IO () -> IO ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> IO ()) -> IO () -> IO ()
forall a b. (a -> b) -> a -> b
$ Pattern -> IO ()
Internal.patternDestroy Pattern
pattern
Bool -> IO () -> IO ()
forall (f :: * -> *). Applicative f => Bool -> f () -> f ()
unless (Status
status Status -> Status -> Bool
forall a. Eq a => a -> a -> Bool
== Status
StatusSuccess) (IO () -> IO ()) -> IO () -> IO ()
forall a b. (a -> b) -> a -> b
$
String -> IO ()
forall (m :: * -> *) a. MonadFail m => String -> m a
fail (String -> IO ()) -> IO String -> IO ()
forall (m :: * -> *) a b. Monad m => (a -> m b) -> m a -> m b
=<< Status -> IO String
Internal.statusToString Status
status)
(\pattern :: Pattern
pattern -> Pattern -> Render a
f Pattern
pattern)
patternAddColorStopRGB ::
MonadIO m =>
Pattern
-> Double
-> Double
-> Double
-> Double
-> m ()
patternAddColorStopRGB :: Pattern -> Double -> Double -> Double -> Double -> m ()
patternAddColorStopRGB p :: Pattern
p offset :: Double
offset r :: Double
r g :: Double
g b :: Double
b = IO () -> m ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> m ()) -> IO () -> m ()
forall a b. (a -> b) -> a -> b
$ Pattern -> Double -> Double -> Double -> Double -> IO ()
Internal.patternAddColorStopRGB Pattern
p Double
offset Double
r Double
g Double
b
patternAddColorStopRGBA ::
MonadIO m =>
Pattern
-> Double
-> Double
-> Double
-> Double
-> Double
-> m ()
patternAddColorStopRGBA :: Pattern -> Double -> Double -> Double -> Double -> Double -> m ()
patternAddColorStopRGBA p :: Pattern
p offset :: Double
offset r :: Double
r g :: Double
g b :: Double
b a :: Double
a = IO () -> m ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> m ()) -> IO () -> m ()
forall a b. (a -> b) -> a -> b
$ Pattern -> Double -> Double -> Double -> Double -> Double -> IO ()
Internal.patternAddColorStopRGBA Pattern
p Double
offset Double
r Double
g Double
b Double
a
patternSetMatrix ::
MonadIO m =>
Pattern
-> Matrix
-> m ()
patternSetMatrix :: Pattern -> Matrix -> m ()
patternSetMatrix p :: Pattern
p m :: Matrix
m = IO () -> m ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> m ()) -> IO () -> m ()
forall a b. (a -> b) -> a -> b
$ Pattern -> Matrix -> IO ()
Internal.patternSetMatrix Pattern
p Matrix
m
patternGetMatrix ::
MonadIO m =>
Pattern
-> m Matrix
patternGetMatrix :: Pattern -> m Matrix
patternGetMatrix p :: Pattern
p = IO Matrix -> m Matrix
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO Matrix -> m Matrix) -> IO Matrix -> m Matrix
forall a b. (a -> b) -> a -> b
$ Pattern -> IO Matrix
Internal.patternGetMatrix Pattern
p
patternSetExtend ::
MonadIO m =>
Pattern
-> Extend
-> m ()
patternSetExtend :: Pattern -> Extend -> m ()
patternSetExtend p :: Pattern
p e :: Extend
e = IO () -> m ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> m ()) -> IO () -> m ()
forall a b. (a -> b) -> a -> b
$ Pattern -> Extend -> IO ()
Internal.patternSetExtend Pattern
p Extend
e
patternGetExtend ::
MonadIO m =>
Pattern
-> m Extend
patternGetExtend :: Pattern -> m Extend
patternGetExtend p :: Pattern
p = IO Extend -> m Extend
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO Extend -> m Extend) -> IO Extend -> m Extend
forall a b. (a -> b) -> a -> b
$ Pattern -> IO Extend
Internal.patternGetExtend Pattern
p
patternSetFilter ::
MonadIO m =>
Pattern
-> Filter
-> m ()
patternSetFilter :: Pattern -> Filter -> m ()
patternSetFilter p :: Pattern
p f :: Filter
f = IO () -> m ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> m ()) -> IO () -> m ()
forall a b. (a -> b) -> a -> b
$ Pattern -> Filter -> IO ()
Internal.patternSetFilter Pattern
p Filter
f
patternGetFilter ::
MonadIO m =>
Pattern
-> m Filter
patternGetFilter :: Pattern -> m Filter
patternGetFilter p :: Pattern
p = IO Filter -> m Filter
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO Filter -> m Filter) -> IO Filter -> m Filter
forall a b. (a -> b) -> a -> b
$ Pattern -> IO Filter
Internal.patternGetFilter Pattern
p
translate ::
Double
-> Double
-> Render ()
translate :: Double -> Double -> Render ()
translate = (Cairo -> Double -> Double -> IO ())
-> Double -> Double -> Render ()
forall a b c. (Cairo -> a -> b -> IO c) -> a -> b -> Render c
liftRender2 Cairo -> Double -> Double -> IO ()
Internal.translate
scale ::
Double
-> Double
-> Render ()
scale :: Double -> Double -> Render ()
scale = (Cairo -> Double -> Double -> IO ())
-> Double -> Double -> Render ()
forall a b c. (Cairo -> a -> b -> IO c) -> a -> b -> Render c
liftRender2 Cairo -> Double -> Double -> IO ()
Internal.scale
rotate ::
Double
-> Render ()
rotate :: Double -> Render ()
rotate = (Cairo -> Double -> IO ()) -> Double -> Render ()
forall a b. (Cairo -> a -> IO b) -> a -> Render b
liftRender1 Cairo -> Double -> IO ()
Internal.rotate
transform ::
Matrix
-> Render ()
transform :: Matrix -> Render ()
transform = (Cairo -> Matrix -> IO ()) -> Matrix -> Render ()
forall a b. (Cairo -> a -> IO b) -> a -> Render b
liftRender1 Cairo -> Matrix -> IO ()
Internal.transform
setMatrix ::
Matrix
-> Render ()
setMatrix :: Matrix -> Render ()
setMatrix = (Cairo -> Matrix -> IO ()) -> Matrix -> Render ()
forall a b. (Cairo -> a -> IO b) -> a -> Render b
liftRender1 Cairo -> Matrix -> IO ()
Internal.setMatrix
getMatrix :: Render Matrix
getMatrix :: Render Matrix
getMatrix = (Cairo -> IO Matrix) -> Render Matrix
forall a. (Cairo -> IO a) -> Render a
liftRender0 Cairo -> IO Matrix
Internal.getMatrix
identityMatrix :: Render ()
identityMatrix :: Render ()
identityMatrix = (Cairo -> IO ()) -> Render ()
forall a. (Cairo -> IO a) -> Render a
liftRender0 Cairo -> IO ()
Internal.identityMatrix
userToDevice ::
Double
-> Double
-> Render (Double,Double)
userToDevice :: Double -> Double -> Render (Double, Double)
userToDevice = (Cairo -> Double -> Double -> IO (Double, Double))
-> Double -> Double -> Render (Double, Double)
forall a b c. (Cairo -> a -> b -> IO c) -> a -> b -> Render c
liftRender2 Cairo -> Double -> Double -> IO (Double, Double)
Internal.userToDevice
userToDeviceDistance ::
Double
-> Double
-> Render (Double,Double)
userToDeviceDistance :: Double -> Double -> Render (Double, Double)
userToDeviceDistance = (Cairo -> Double -> Double -> IO (Double, Double))
-> Double -> Double -> Render (Double, Double)
forall a b c. (Cairo -> a -> b -> IO c) -> a -> b -> Render c
liftRender2 Cairo -> Double -> Double -> IO (Double, Double)
Internal.userToDeviceDistance
deviceToUser ::
Double
-> Double
-> Render (Double,Double)
deviceToUser :: Double -> Double -> Render (Double, Double)
deviceToUser = (Cairo -> Double -> Double -> IO (Double, Double))
-> Double -> Double -> Render (Double, Double)
forall a b c. (Cairo -> a -> b -> IO c) -> a -> b -> Render c
liftRender2 Cairo -> Double -> Double -> IO (Double, Double)
Internal.deviceToUser
deviceToUserDistance ::
Double
-> Double
-> Render (Double,Double)
deviceToUserDistance :: Double -> Double -> Render (Double, Double)
deviceToUserDistance = (Cairo -> Double -> Double -> IO (Double, Double))
-> Double -> Double -> Render (Double, Double)
forall a b c. (Cairo -> a -> b -> IO c) -> a -> b -> Render c
liftRender2 Cairo -> Double -> Double -> IO (Double, Double)
Internal.deviceToUserDistance
selectFontFace ::
CairoString string
=> string
-> FontSlant
-> FontWeight
-> Render ()
selectFontFace :: string -> FontSlant -> FontWeight -> Render ()
selectFontFace = (Cairo -> string -> FontSlant -> FontWeight -> IO ())
-> string -> FontSlant -> FontWeight -> Render ()
forall a b c d.
(Cairo -> a -> b -> c -> IO d) -> a -> b -> c -> Render d
liftRender3 Cairo -> string -> FontSlant -> FontWeight -> IO ()
forall string.
CairoString string =>
Cairo -> string -> FontSlant -> FontWeight -> IO ()
Internal.selectFontFace
setFontSize ::
Double
-> Render ()
setFontSize :: Double -> Render ()
setFontSize = (Cairo -> Double -> IO ()) -> Double -> Render ()
forall a b. (Cairo -> a -> IO b) -> a -> Render b
liftRender1 Cairo -> Double -> IO ()
Internal.setFontSize
setFontMatrix ::
Matrix
-> Render ()
setFontMatrix :: Matrix -> Render ()
setFontMatrix = (Cairo -> Matrix -> IO ()) -> Matrix -> Render ()
forall a b. (Cairo -> a -> IO b) -> a -> Render b
liftRender1 Cairo -> Matrix -> IO ()
Internal.setFontMatrix
getFontMatrix :: Render Matrix
getFontMatrix :: Render Matrix
getFontMatrix = (Cairo -> IO Matrix) -> Render Matrix
forall a. (Cairo -> IO a) -> Render a
liftRender0 Cairo -> IO Matrix
Internal.getFontMatrix
setFontOptions :: FontOptions -> Render ()
setFontOptions :: FontOptions -> Render ()
setFontOptions = (Cairo -> FontOptions -> IO ()) -> FontOptions -> Render ()
forall a b. (Cairo -> a -> IO b) -> a -> Render b
liftRender1 Cairo -> FontOptions -> IO ()
Internal.setFontOptions
showText ::
CairoString string
=> string
-> Render ()
showText :: string -> Render ()
showText = (Cairo -> string -> IO ()) -> string -> Render ()
forall a b. (Cairo -> a -> IO b) -> a -> Render b
liftRender1 Cairo -> string -> IO ()
forall string. CairoString string => Cairo -> string -> IO ()
Internal.showText
fontExtents :: Render FontExtents
fontExtents :: Render FontExtents
fontExtents = (Cairo -> IO FontExtents) -> Render FontExtents
forall a. (Cairo -> IO a) -> Render a
liftRender0 Cairo -> IO FontExtents
Internal.fontExtents
textExtents ::
CairoString string
=> string
-> Render TextExtents
textExtents :: string -> Render TextExtents
textExtents = (Cairo -> string -> IO TextExtents) -> string -> Render TextExtents
forall a b. (Cairo -> a -> IO b) -> a -> Render b
liftRender1 Cairo -> string -> IO TextExtents
forall string.
CairoString string =>
Cairo -> string -> IO TextExtents
Internal.textExtents
fontOptionsCreate :: MonadIO m => m FontOptions
fontOptionsCreate :: m FontOptions
fontOptionsCreate = IO FontOptions -> m FontOptions
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO FontOptions -> m FontOptions)
-> IO FontOptions -> m FontOptions
forall a b. (a -> b) -> a -> b
$ IO FontOptions
Internal.fontOptionsCreate
fontOptionsCopy ::
MonadIO m =>
FontOptions
-> m FontOptions
fontOptionsCopy :: FontOptions -> m FontOptions
fontOptionsCopy a :: FontOptions
a = IO FontOptions -> m FontOptions
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO FontOptions -> m FontOptions)
-> IO FontOptions -> m FontOptions
forall a b. (a -> b) -> a -> b
$ FontOptions -> IO FontOptions
Internal.fontOptionsCopy FontOptions
a
fontOptionsMerge ::
MonadIO m =>
FontOptions
-> FontOptions
-> m ()
fontOptionsMerge :: FontOptions -> FontOptions -> m ()
fontOptionsMerge a :: FontOptions
a b :: FontOptions
b = IO () -> m ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> m ()) -> IO () -> m ()
forall a b. (a -> b) -> a -> b
$ FontOptions -> FontOptions -> IO ()
Internal.fontOptionsMerge FontOptions
a FontOptions
b
fontOptionsHash :: MonadIO m => FontOptions -> m Int
fontOptionsHash :: FontOptions -> m Int
fontOptionsHash a :: FontOptions
a = IO Int -> m Int
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO Int -> m Int) -> IO Int -> m Int
forall a b. (a -> b) -> a -> b
$ FontOptions -> IO Int
Internal.fontOptionsHash FontOptions
a
fontOptionsEqual :: MonadIO m => FontOptions -> FontOptions -> m Bool
fontOptionsEqual :: FontOptions -> FontOptions -> m Bool
fontOptionsEqual a :: FontOptions
a b :: FontOptions
b = IO Bool -> m Bool
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO Bool -> m Bool) -> IO Bool -> m Bool
forall a b. (a -> b) -> a -> b
$ FontOptions -> FontOptions -> IO Bool
Internal.fontOptionsEqual FontOptions
a FontOptions
b
fontOptionsSetAntialias :: MonadIO m => FontOptions -> Antialias -> m ()
fontOptionsSetAntialias :: FontOptions -> Antialias -> m ()
fontOptionsSetAntialias a :: FontOptions
a b :: Antialias
b = IO () -> m ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> m ()) -> IO () -> m ()
forall a b. (a -> b) -> a -> b
$ FontOptions -> Antialias -> IO ()
Internal.fontOptionsSetAntialias FontOptions
a Antialias
b
fontOptionsGetAntialias :: MonadIO m => FontOptions -> m Antialias
fontOptionsGetAntialias :: FontOptions -> m Antialias
fontOptionsGetAntialias a :: FontOptions
a = IO Antialias -> m Antialias
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO Antialias -> m Antialias) -> IO Antialias -> m Antialias
forall a b. (a -> b) -> a -> b
$ FontOptions -> IO Antialias
Internal.fontOptionsGetAntialias FontOptions
a
fontOptionsSetSubpixelOrder :: MonadIO m => FontOptions -> SubpixelOrder-> m ()
fontOptionsSetSubpixelOrder :: FontOptions -> SubpixelOrder -> m ()
fontOptionsSetSubpixelOrder a :: FontOptions
a b :: SubpixelOrder
b = IO () -> m ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> m ()) -> IO () -> m ()
forall a b. (a -> b) -> a -> b
$ FontOptions -> SubpixelOrder -> IO ()
Internal.fontOptionsSetSubpixelOrder FontOptions
a SubpixelOrder
b
fontOptionsGetSubpixelOrder :: MonadIO m => FontOptions -> m SubpixelOrder
fontOptionsGetSubpixelOrder :: FontOptions -> m SubpixelOrder
fontOptionsGetSubpixelOrder a :: FontOptions
a = IO SubpixelOrder -> m SubpixelOrder
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO SubpixelOrder -> m SubpixelOrder)
-> IO SubpixelOrder -> m SubpixelOrder
forall a b. (a -> b) -> a -> b
$ FontOptions -> IO SubpixelOrder
Internal.fontOptionsGetSubpixelOrder FontOptions
a
fontOptionsSetHintStyle :: MonadIO m => FontOptions -> HintStyle -> m ()
fontOptionsSetHintStyle :: FontOptions -> HintStyle -> m ()
fontOptionsSetHintStyle a :: FontOptions
a b :: HintStyle
b = IO () -> m ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> m ()) -> IO () -> m ()
forall a b. (a -> b) -> a -> b
$ FontOptions -> HintStyle -> IO ()
Internal.fontOptionsSetHintStyle FontOptions
a HintStyle
b
fontOptionsGetHintStyle :: MonadIO m => FontOptions -> m HintStyle
fontOptionsGetHintStyle :: FontOptions -> m HintStyle
fontOptionsGetHintStyle a :: FontOptions
a = IO HintStyle -> m HintStyle
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO HintStyle -> m HintStyle) -> IO HintStyle -> m HintStyle
forall a b. (a -> b) -> a -> b
$ FontOptions -> IO HintStyle
Internal.fontOptionsGetHintStyle FontOptions
a
fontOptionsSetHintMetrics :: MonadIO m => FontOptions -> HintMetrics -> m ()
fontOptionsSetHintMetrics :: FontOptions -> HintMetrics -> m ()
fontOptionsSetHintMetrics a :: FontOptions
a b :: HintMetrics
b = IO () -> m ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> m ()) -> IO () -> m ()
forall a b. (a -> b) -> a -> b
$ FontOptions -> HintMetrics -> IO ()
Internal.fontOptionsSetHintMetrics FontOptions
a HintMetrics
b
fontOptionsGetHintMetrics :: MonadIO m => FontOptions -> m HintMetrics
fontOptionsGetHintMetrics :: FontOptions -> m HintMetrics
fontOptionsGetHintMetrics a :: FontOptions
a = IO HintMetrics -> m HintMetrics
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO HintMetrics -> m HintMetrics)
-> IO HintMetrics -> m HintMetrics
forall a b. (a -> b) -> a -> b
$ FontOptions -> IO HintMetrics
Internal.fontOptionsGetHintMetrics FontOptions
a
withSimilarSurface ::
Surface
-> Content
-> Int
-> Int
-> (Surface -> IO a)
-> IO a
withSimilarSurface :: Surface -> Content -> Int -> Int -> (Surface -> IO a) -> IO a
withSimilarSurface surface :: Surface
surface contentType :: Content
contentType width :: Int
width height :: Int
height f :: Surface -> IO a
f =
IO Surface -> (Surface -> IO ()) -> (Surface -> IO a) -> IO a
forall a b c. IO a -> (a -> IO b) -> (a -> IO c) -> IO c
bracket (Surface -> Content -> Int -> Int -> IO Surface
Internal.surfaceCreateSimilar Surface
surface Content
contentType Int
width Int
height)
(\surface' :: Surface
surface' -> do Status
status <- Surface -> IO Status
Internal.surfaceStatus Surface
surface'
Surface -> IO ()
Internal.surfaceDestroy Surface
surface'
Bool -> IO () -> IO ()
forall (f :: * -> *). Applicative f => Bool -> f () -> f ()
unless (Status
status Status -> Status -> Bool
forall a. Eq a => a -> a -> Bool
== Status
StatusSuccess) (IO () -> IO ()) -> IO () -> IO ()
forall a b. (a -> b) -> a -> b
$
Status -> IO String
Internal.statusToString Status
status IO String -> (String -> IO ()) -> IO ()
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= String -> IO ()
forall (m :: * -> *) a. MonadFail m => String -> m a
fail)
(\surface' :: Surface
surface' -> Surface -> IO a
f Surface
surface')
createSimilarSurface ::
Surface
-> Content
-> Int
-> Int
-> IO Surface
createSimilarSurface :: Surface -> Content -> Int -> Int -> IO Surface
createSimilarSurface surface :: Surface
surface contentType :: Content
contentType width :: Int
width height :: Int
height = do
Surface
surface <- Surface -> Content -> Int -> Int -> IO Surface
Internal.surfaceCreateSimilar Surface
surface Content
contentType Int
width Int
height
Surface -> IO ()
Internal.manageSurface Surface
surface
Surface -> IO Surface
forall (m :: * -> *) a. Monad m => a -> m a
return Surface
surface
renderWithSimilarSurface ::
Content
-> Int
-> Int
-> (Surface -> Render a)
-> Render a
renderWithSimilarSurface :: Content -> Int -> Int -> (Surface -> Render a) -> Render a
renderWithSimilarSurface contentType :: Content
contentType width :: Int
width height :: Int
height render :: Surface -> Render a
render =
(Surface -> Render a) -> Render a
forall a. (Surface -> Render a) -> Render a
withTargetSurface ((Surface -> Render a) -> Render a)
-> (Surface -> Render a) -> Render a
forall a b. (a -> b) -> a -> b
$ \surface :: Surface
surface ->
IO Surface
-> (Surface -> IO ()) -> (Surface -> Render a) -> Render a
forall a b c. IO a -> (a -> IO b) -> (a -> Render c) -> Render c
bracketR (Surface -> Content -> Int -> Int -> IO Surface
Internal.surfaceCreateSimilar Surface
surface Content
contentType Int
width Int
height)
(\surface' :: Surface
surface' -> do Status
status <- Surface -> IO Status
Internal.surfaceStatus Surface
surface'
Surface -> IO ()
Internal.surfaceDestroy Surface
surface'
Bool -> IO () -> IO ()
forall (f :: * -> *). Applicative f => Bool -> f () -> f ()
unless (Status
status Status -> Status -> Bool
forall a. Eq a => a -> a -> Bool
== Status
StatusSuccess) (IO () -> IO ()) -> IO () -> IO ()
forall a b. (a -> b) -> a -> b
$
Status -> IO String
Internal.statusToString Status
status IO String -> (String -> IO ()) -> IO ()
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= String -> IO ()
forall (m :: * -> *) a. MonadFail m => String -> m a
fail)
(\surface' :: Surface
surface' -> Surface -> Render a
render Surface
surface')
surfaceFinish :: MonadIO m => Surface -> m ()
surfaceFinish :: Surface -> m ()
surfaceFinish surface :: Surface
surface = IO () -> m ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> m ()) -> IO () -> m ()
forall a b. (a -> b) -> a -> b
$ do
Status
status <- Surface -> IO Status
Internal.surfaceStatus Surface
surface
Surface -> IO ()
Internal.surfaceFinish Surface
surface
Bool -> IO () -> IO ()
forall (f :: * -> *). Applicative f => Bool -> f () -> f ()
unless (Status
status Status -> Status -> Bool
forall a. Eq a => a -> a -> Bool
== Status
StatusSuccess) (IO () -> IO ()) -> IO () -> IO ()
forall a b. (a -> b) -> a -> b
$
Status -> IO String
Internal.statusToString Status
status IO String -> (String -> IO ()) -> IO ()
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= String -> IO ()
forall (m :: * -> *) a. MonadFail m => String -> m a
fail
surfaceFlush :: MonadIO m => Surface -> m ()
surfaceFlush :: Surface -> m ()
surfaceFlush a :: Surface
a = IO () -> m ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> m ()) -> IO () -> m ()
forall a b. (a -> b) -> a -> b
$ Surface -> IO ()
Internal.surfaceFlush Surface
a
surfaceGetFontOptions :: Surface -> Render FontOptions
surfaceGetFontOptions :: Surface -> Render FontOptions
surfaceGetFontOptions surface :: Surface
surface = do
FontOptions
fontOptions <- Render FontOptions
forall (m :: * -> *). MonadIO m => m FontOptions
fontOptionsCreate
IO () -> Render ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> Render ()) -> IO () -> Render ()
forall a b. (a -> b) -> a -> b
$ Surface -> FontOptions -> IO ()
Internal.surfaceGetFontOptions Surface
surface FontOptions
fontOptions
FontOptions -> Render FontOptions
forall (m :: * -> *) a. Monad m => a -> m a
return FontOptions
fontOptions
surfaceMarkDirty :: MonadIO m => Surface -> m ()
surfaceMarkDirty :: Surface -> m ()
surfaceMarkDirty a :: Surface
a = IO () -> m ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> m ()) -> IO () -> m ()
forall a b. (a -> b) -> a -> b
$ Surface -> IO ()
Internal.surfaceMarkDirty Surface
a
surfaceMarkDirtyRectangle ::
MonadIO m =>
Surface
-> Int
-> Int
-> Int
-> Int
-> m ()
surfaceMarkDirtyRectangle :: Surface -> Int -> Int -> Int -> Int -> m ()
surfaceMarkDirtyRectangle a :: Surface
a b :: Int
b c :: Int
c d :: Int
d e :: Int
e = IO () -> m ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> m ()) -> IO () -> m ()
forall a b. (a -> b) -> a -> b
$ Surface -> Int -> Int -> Int -> Int -> IO ()
Internal.surfaceMarkDirtyRectangle Surface
a Int
b Int
c Int
d Int
e
surfaceSetDeviceOffset ::
MonadIO m =>
Surface
-> Double
-> Double
-> m ()
surfaceSetDeviceOffset :: Surface -> Double -> Double -> m ()
surfaceSetDeviceOffset a :: Surface
a b :: Double
b c :: Double
c = IO () -> m ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> m ()) -> IO () -> m ()
forall a b. (a -> b) -> a -> b
$ Surface -> Double -> Double -> IO ()
Internal.surfaceSetDeviceOffset Surface
a Double
b Double
c
#if CAIRO_CHECK_VERSION(1,6,0)
formatStrideForWidth ::
Format
-> Int
-> Int
formatStrideForWidth :: Format -> Int -> Int
formatStrideForWidth = Format -> Int -> Int
Internal.formatStrideForWidth
#endif
withImageSurface ::
Format
-> Int
-> Int
-> (Surface -> IO a)
-> IO a
withImageSurface :: Format -> Int -> Int -> (Surface -> IO a) -> IO a
withImageSurface format :: Format
format width :: Int
width height :: Int
height f :: Surface -> IO a
f =
IO Surface -> (Surface -> IO ()) -> (Surface -> IO a) -> IO a
forall a b c. IO a -> (a -> IO b) -> (a -> IO c) -> IO c
bracket (Format -> Int -> Int -> IO Surface
Internal.imageSurfaceCreate Format
format Int
width Int
height)
(\surface :: Surface
surface -> do Status
status <- Surface -> IO Status
Internal.surfaceStatus Surface
surface
Surface -> IO ()
Internal.surfaceDestroy Surface
surface
Bool -> IO () -> IO ()
forall (f :: * -> *). Applicative f => Bool -> f () -> f ()
unless (Status
status Status -> Status -> Bool
forall a. Eq a => a -> a -> Bool
== Status
StatusSuccess) (IO () -> IO ()) -> IO () -> IO ()
forall a b. (a -> b) -> a -> b
$
Status -> IO String
Internal.statusToString Status
status IO String -> (String -> IO ()) -> IO ()
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= String -> IO ()
forall (m :: * -> *) a. MonadFail m => String -> m a
fail)
(\surface :: Surface
surface -> Surface -> IO a
f Surface
surface)
createImageSurface ::
Format
-> Int
-> Int
-> IO Surface
createImageSurface :: Format -> Int -> Int -> IO Surface
createImageSurface format :: Format
format width :: Int
width height :: Int
height = do
Surface
surface <- Format -> Int -> Int -> IO Surface
Internal.imageSurfaceCreate Format
format Int
width Int
height
Surface -> IO ()
Internal.manageSurface Surface
surface
Surface -> IO Surface
forall (m :: * -> *) a. Monad m => a -> m a
return Surface
surface
withImageSurfaceForData ::
PixelData
-> Format
-> Int
-> Int
-> Int
-> (Surface -> IO a)
-> IO a
withImageSurfaceForData :: PixelData
-> Format -> Int -> Int -> Int -> (Surface -> IO a) -> IO a
withImageSurfaceForData pixels :: PixelData
pixels format :: Format
format width :: Int
width height :: Int
height stride :: Int
stride f :: Surface -> IO a
f =
IO Surface -> (Surface -> IO ()) -> (Surface -> IO a) -> IO a
forall a b c. IO a -> (a -> IO b) -> (a -> IO c) -> IO c
bracket (PixelData -> Format -> Int -> Int -> Int -> IO Surface
Internal.imageSurfaceCreateForData PixelData
pixels Format
format Int
width Int
height Int
stride)
(\surface :: Surface
surface -> do Status
status <- Surface -> IO Status
Internal.surfaceStatus Surface
surface
Surface -> IO ()
Internal.surfaceDestroy Surface
surface
Bool -> IO () -> IO ()
forall (f :: * -> *). Applicative f => Bool -> f () -> f ()
unless (Status
status Status -> Status -> Bool
forall a. Eq a => a -> a -> Bool
== Status
StatusSuccess) (IO () -> IO ()) -> IO () -> IO ()
forall a b. (a -> b) -> a -> b
$
Status -> IO String
Internal.statusToString Status
status IO String -> (String -> IO ()) -> IO ()
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= String -> IO ()
forall (m :: * -> *) a. MonadFail m => String -> m a
fail)
(\surface :: Surface
surface -> Surface -> IO a
f Surface
surface)
createImageSurfaceForData ::
PixelData
-> Format
-> Int
-> Int
-> Int
-> IO Surface
createImageSurfaceForData :: PixelData -> Format -> Int -> Int -> Int -> IO Surface
createImageSurfaceForData pixels :: PixelData
pixels format :: Format
format width :: Int
width height :: Int
height stride :: Int
stride = do
Surface
surface <- PixelData -> Format -> Int -> Int -> Int -> IO Surface
Internal.imageSurfaceCreateForData PixelData
pixels Format
format Int
width Int
height Int
stride
Surface -> IO ()
Internal.manageSurface Surface
surface
Surface -> IO Surface
forall (m :: * -> *) a. Monad m => a -> m a
return Surface
surface
imageSurfaceGetWidth :: MonadIO m => Surface -> m Int
imageSurfaceGetWidth :: Surface -> m Int
imageSurfaceGetWidth a :: Surface
a = IO Int -> m Int
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO Int -> m Int) -> IO Int -> m Int
forall a b. (a -> b) -> a -> b
$ Surface -> IO Int
Internal.imageSurfaceGetWidth Surface
a
imageSurfaceGetHeight :: MonadIO m => Surface -> m Int
imageSurfaceGetHeight :: Surface -> m Int
imageSurfaceGetHeight a :: Surface
a = IO Int -> m Int
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO Int -> m Int) -> IO Int -> m Int
forall a b. (a -> b) -> a -> b
$ Surface -> IO Int
Internal.imageSurfaceGetHeight Surface
a
#if CAIRO_CHECK_VERSION(1,2,0)
imageSurfaceGetStride :: MonadIO m => Surface -> m Int
imageSurfaceGetStride :: Surface -> m Int
imageSurfaceGetStride = IO Int -> m Int
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO Int -> m Int) -> (Surface -> IO Int) -> Surface -> m Int
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Surface -> IO Int
Internal.imageSurfaceGetStride
imageSurfaceGetFormat :: MonadIO m => Surface -> m Format
imageSurfaceGetFormat :: Surface -> m Format
imageSurfaceGetFormat a :: Surface
a = IO Format -> m Format
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO Format -> m Format) -> IO Format -> m Format
forall a b. (a -> b) -> a -> b
$ Surface -> IO Format
Internal.imageSurfaceGetFormat Surface
a
#if __GLASGOW_HASKELL__ >= 606
imageSurfaceGetData :: Surface -> IO BS.ByteString
imageSurfaceGetData :: Surface -> IO ByteString
imageSurfaceGetData a :: Surface
a = do
Int
height <- Surface -> IO Int
Internal.imageSurfaceGetHeight Surface
a
Int
stride <- Surface -> IO Int
Internal.imageSurfaceGetStride Surface
a
PixelData
ptr <- Surface -> IO PixelData
Internal.imageSurfaceGetData Surface
a
#if __GLASGOW_HASKELL__ < 608
BS.copyCStringLen (castPtr ptr, height * stride)
#else
CStringLen -> IO ByteString
BS.packCStringLen (PixelData -> Ptr CChar
forall a b. Ptr a -> Ptr b
castPtr PixelData
ptr, Int
height Int -> Int -> Int
forall a. Num a => a -> a -> a
* Int
stride)
#endif
#endif
imageSurfaceGetPixels :: Storable e => Surface -> IO (SurfaceData Int e)
imageSurfaceGetPixels :: Surface -> IO (SurfaceData Int e)
imageSurfaceGetPixels pb :: Surface
pb = do
PixelData
pixPtr <- Surface -> IO PixelData
Internal.imageSurfaceGetData Surface
pb
Bool -> IO () -> IO ()
forall (f :: * -> *). Applicative f => Bool -> f () -> f ()
when (PixelData
pixPtrPixelData -> PixelData -> Bool
forall a. Eq a => a -> a -> Bool
==PixelData
forall a. Ptr a
nullPtr) (IO () -> IO ()) -> IO () -> IO ()
forall a b. (a -> b) -> a -> b
$ do
String -> IO ()
forall (m :: * -> *) a. MonadFail m => String -> m a
fail "imageSurfaceGetPixels: image surface not available"
Int
h <- Surface -> IO Int
forall (m :: * -> *). MonadIO m => Surface -> m Int
imageSurfaceGetHeight Surface
pb
Int
r <- Surface -> IO Int
forall (m :: * -> *). MonadIO m => Surface -> m Int
imageSurfaceGetStride Surface
pb
SurfaceData Int e -> IO (SurfaceData Int e)
forall (m :: * -> *) a. Monad m => a -> m a
return (Surface -> Ptr e -> Int -> SurfaceData Int e
forall e.
Storable e =>
Surface -> Ptr e -> Int -> SurfaceData Int e
mkSurfaceData Surface
pb (PixelData -> Ptr e
forall a b. Ptr a -> Ptr b
castPtr PixelData
pixPtr) (Int
hInt -> Int -> Int
forall a. Num a => a -> a -> a
*Int
r))
data SurfaceData i e = SurfaceData !Surface
{-# UNPACK #-} !(Ptr e)
!(i,i)
{-# UNPACK #-} !Int
mkSurfaceData :: Storable e => Surface -> Ptr e -> Int -> SurfaceData Int e
mkSurfaceData :: Surface -> Ptr e -> Int -> SurfaceData Int e
mkSurfaceData pb :: Surface
pb (Ptr e
ptr :: Ptr e) size :: Int
size =
Surface -> Ptr e -> (Int, Int) -> Int -> SurfaceData Int e
forall i e. Surface -> Ptr e -> (i, i) -> Int -> SurfaceData i e
SurfaceData Surface
pb Ptr e
ptr (0, Int
countInt -> Int -> Int
forall a. Num a => a -> a -> a
-1) Int
count
where count :: Int
count = Int -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Int
size Int -> Int -> Int
forall a. Integral a => a -> a -> a
`div` e -> Int
forall a. Storable a => a -> Int
sizeOf (e
forall a. HasCallStack => a
undefined :: e))
#if __GLASGOW_HASKELL__ < 605
instance HasBounds SurfaceData where
bounds (SurfaceData pb ptr bd cnt) = bd
#endif
instance Storable e => MArray SurfaceData e IO where
newArray :: (i, i) -> e -> IO (SurfaceData i e)
newArray (l :: i
l,u :: i
u) e :: e
e = String -> IO (SurfaceData i e)
forall a. HasCallStack => String -> a
error "GI.Cairo.Render.newArray: not implemented"
newArray_ :: (i, i) -> IO (SurfaceData i e)
newArray_ (l :: i
l,u :: i
u) = String -> IO (SurfaceData i e)
forall a. HasCallStack => String -> a
error "GI.Cairo.Render.newArray_: not implemented"
{-# INLINE unsafeRead #-}
unsafeRead :: SurfaceData i e -> Int -> IO e
unsafeRead (SurfaceData (Surface pb :: ForeignPtr Surface
pb) pixPtr :: Ptr e
pixPtr _ _) idx :: Int
idx = do
e
e <- Ptr e -> Int -> IO e
forall a. Storable a => Ptr a -> Int -> IO a
peekElemOff Ptr e
pixPtr Int
idx
ForeignPtr Surface -> IO ()
forall a. ForeignPtr a -> IO ()
touchForeignPtr ForeignPtr Surface
pb
e -> IO e
forall (m :: * -> *) a. Monad m => a -> m a
return e
e
{-# INLINE unsafeWrite #-}
unsafeWrite :: SurfaceData i e -> Int -> e -> IO ()
unsafeWrite (SurfaceData (Surface pb :: ForeignPtr Surface
pb) pixPtr :: Ptr e
pixPtr _ _) idx :: Int
idx elem :: e
elem = do
Ptr e -> Int -> e -> IO ()
forall a. Storable a => Ptr a -> Int -> a -> IO ()
pokeElemOff Ptr e
pixPtr Int
idx e
elem
ForeignPtr Surface -> IO ()
forall a. ForeignPtr a -> IO ()
touchForeignPtr ForeignPtr Surface
pb
#if __GLASGOW_HASKELL__ >= 605
{-# INLINE getBounds #-}
getBounds :: SurfaceData i e -> IO (i, i)
getBounds (SurfaceData _ _ bd :: (i, i)
bd _) = (i, i) -> IO (i, i)
forall (m :: * -> *) a. Monad m => a -> m a
return (i, i)
bd
#endif
#if __GLASGOW_HASKELL__ >= 608
{-# INLINE getNumElements #-}
getNumElements :: SurfaceData i e -> IO Int
getNumElements (SurfaceData _ _ _ count :: Int
count) = Int -> IO Int
forall (m :: * -> *) a. Monad m => a -> m a
return Int
count
#endif
#endif
#ifdef CAIRO_HAS_PDF_SURFACE
withPDFSurface ::
FilePath
-> Double
-> Double
-> (Surface -> IO a)
-> IO a
withPDFSurface :: String -> Double -> Double -> (Surface -> IO a) -> IO a
withPDFSurface filename :: String
filename width :: Double
width height :: Double
height f :: Surface -> IO a
f = do
Surface
surface <- String -> Double -> Double -> IO Surface
Internal.pdfSurfaceCreate String
filename Double
width Double
height
a
ret <- Surface -> IO a
f Surface
surface
Surface -> IO ()
Internal.surfaceDestroy Surface
surface
a -> IO a
forall (m :: * -> *) a. Monad m => a -> m a
return a
ret
#if CAIRO_CHECK_VERSION(1,2,0)
pdfSurfaceSetSize :: MonadIO m => Surface -> Double -> Double -> m ()
pdfSurfaceSetSize :: Surface -> Double -> Double -> m ()
pdfSurfaceSetSize s :: Surface
s x :: Double
x y :: Double
y = IO () -> m ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> m ()) -> IO () -> m ()
forall a b. (a -> b) -> a -> b
$ Surface -> Double -> Double -> IO ()
Internal.pdfSurfaceSetSize Surface
s Double
x Double
y
#endif
#endif
#ifdef CAIRO_HAS_PNG_FUNCTIONS
withImageSurfaceFromPNG :: FilePath -> (Surface -> IO a) -> IO a
withImageSurfaceFromPNG :: String -> (Surface -> IO a) -> IO a
withImageSurfaceFromPNG filename :: String
filename f :: Surface -> IO a
f =
IO Surface -> (Surface -> IO ()) -> (Surface -> IO a) -> IO a
forall a b c. IO a -> (a -> IO b) -> (a -> IO c) -> IO c
bracket (String -> IO Surface
Internal.imageSurfaceCreateFromPNG String
filename)
(\surface :: Surface
surface -> do Status
status <- Surface -> IO Status
Internal.surfaceStatus Surface
surface
Surface -> IO ()
Internal.surfaceDestroy Surface
surface
Bool -> IO () -> IO ()
forall (f :: * -> *). Applicative f => Bool -> f () -> f ()
unless (Status
status Status -> Status -> Bool
forall a. Eq a => a -> a -> Bool
== Status
StatusSuccess) (IO () -> IO ()) -> IO () -> IO ()
forall a b. (a -> b) -> a -> b
$
Status -> IO String
Internal.statusToString Status
status IO String -> (String -> IO ()) -> IO ()
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= String -> IO ()
forall (m :: * -> *) a. MonadFail m => String -> m a
fail)
(\surface :: Surface
surface -> Surface -> IO a
f Surface
surface)
surfaceWriteToPNG ::
Surface
-> FilePath
-> IO ()
surfaceWriteToPNG :: Surface -> String -> IO ()
surfaceWriteToPNG surface :: Surface
surface filename :: String
filename = do
Status
status <- Surface -> String -> IO Status
Internal.surfaceWriteToPNG Surface
surface String
filename
Bool -> IO () -> IO ()
forall (f :: * -> *). Applicative f => Bool -> f () -> f ()
unless (Status
status Status -> Status -> Bool
forall a. Eq a => a -> a -> Bool
== Status
StatusSuccess) (IO () -> IO ()) -> IO () -> IO ()
forall a b. (a -> b) -> a -> b
$
String -> IO ()
forall (m :: * -> *) a. MonadFail m => String -> m a
fail (String -> IO ()) -> IO String -> IO ()
forall (m :: * -> *) a b. Monad m => (a -> m b) -> m a -> m b
=<< Status -> IO String
Internal.statusToString Status
status
() -> IO ()
forall (m :: * -> *) a. Monad m => a -> m a
return ()
#endif
#ifdef CAIRO_HAS_PS_SURFACE
withPSSurface ::
FilePath
-> Double
-> Double
-> (Surface -> IO a)
-> IO a
withPSSurface :: String -> Double -> Double -> (Surface -> IO a) -> IO a
withPSSurface filename :: String
filename width :: Double
width height :: Double
height f :: Surface -> IO a
f =
IO Surface -> (Surface -> IO ()) -> (Surface -> IO a) -> IO a
forall a b c. IO a -> (a -> IO b) -> (a -> IO c) -> IO c
bracket (String -> Double -> Double -> IO Surface
Internal.psSurfaceCreate String
filename Double
width Double
height)
(\surface :: Surface
surface -> do Status
status <- Surface -> IO Status
Internal.surfaceStatus Surface
surface
Surface -> IO ()
Internal.surfaceDestroy Surface
surface
Bool -> IO () -> IO ()
forall (f :: * -> *). Applicative f => Bool -> f () -> f ()
unless (Status
status Status -> Status -> Bool
forall a. Eq a => a -> a -> Bool
== Status
StatusSuccess) (IO () -> IO ()) -> IO () -> IO ()
forall a b. (a -> b) -> a -> b
$
Status -> IO String
Internal.statusToString Status
status IO String -> (String -> IO ()) -> IO ()
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= String -> IO ()
forall (m :: * -> *) a. MonadFail m => String -> m a
fail)
(\surface :: Surface
surface -> Surface -> IO a
f Surface
surface)
#if CAIRO_CHECK_VERSION(1,2,0)
psSurfaceSetSize :: MonadIO m => Surface -> Double -> Double -> m ()
psSurfaceSetSize :: Surface -> Double -> Double -> m ()
psSurfaceSetSize s :: Surface
s x :: Double
x y :: Double
y = IO () -> m ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> m ()) -> IO () -> m ()
forall a b. (a -> b) -> a -> b
$ Surface -> Double -> Double -> IO ()
Internal.psSurfaceSetSize Surface
s Double
x Double
y
#endif
#endif
#ifdef CAIRO_HAS_SVG_SURFACE
withSVGSurface ::
FilePath
-> Double
-> Double
-> (Surface -> IO a)
-> IO a
withSVGSurface :: String -> Double -> Double -> (Surface -> IO a) -> IO a
withSVGSurface filename :: String
filename width :: Double
width height :: Double
height f :: Surface -> IO a
f =
IO Surface -> (Surface -> IO ()) -> (Surface -> IO a) -> IO a
forall a b c. IO a -> (a -> IO b) -> (a -> IO c) -> IO c
bracket (String -> Double -> Double -> IO Surface
Internal.svgSurfaceCreate String
filename Double
width Double
height)
(\surface :: Surface
surface -> do Status
status <- Surface -> IO Status
Internal.surfaceStatus Surface
surface
Surface -> IO ()
Internal.surfaceDestroy Surface
surface
Bool -> IO () -> IO ()
forall (f :: * -> *). Applicative f => Bool -> f () -> f ()
unless (Status
status Status -> Status -> Bool
forall a. Eq a => a -> a -> Bool
== Status
StatusSuccess) (IO () -> IO ()) -> IO () -> IO ()
forall a b. (a -> b) -> a -> b
$
Status -> IO String
Internal.statusToString Status
status IO String -> (String -> IO ()) -> IO ()
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= String -> IO ()
forall (m :: * -> *) a. MonadFail m => String -> m a
fail)
(\surface :: Surface
surface -> Surface -> IO a
f Surface
surface)
#endif
#if CAIRO_CHECK_VERSION(1,10,0)
regionCreate :: MonadIO m => m Region
regionCreate :: m Region
regionCreate = IO Region -> m Region
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO Region -> m Region) -> IO Region -> m Region
forall a b. (a -> b) -> a -> b
$ IO Region
Internal.regionCreate
regionCreateRectangle ::
MonadIO m =>
RectangleInt
-> m Region
regionCreateRectangle :: RectangleInt -> m Region
regionCreateRectangle a :: RectangleInt
a = IO Region -> m Region
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO Region -> m Region) -> IO Region -> m Region
forall a b. (a -> b) -> a -> b
$ RectangleInt -> IO Region
Internal.regionCreateRectangle RectangleInt
a
regionCreateRectangles ::
MonadIO m =>
[RectangleInt]
-> m Region
regionCreateRectangles :: [RectangleInt] -> m Region
regionCreateRectangles a :: [RectangleInt]
a = IO Region -> m Region
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO Region -> m Region) -> IO Region -> m Region
forall a b. (a -> b) -> a -> b
$ [RectangleInt] -> IO Region
Internal.regionCreateRectangles [RectangleInt]
a
regionCopy ::
MonadIO m =>
Region
-> m Region
regionCopy :: Region -> m Region
regionCopy a :: Region
a = IO Region -> m Region
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO Region -> m Region) -> IO Region -> m Region
forall a b. (a -> b) -> a -> b
$ Region -> IO Region
Internal.regionCopy Region
a
regionGetExtents ::
MonadIO m =>
Region
-> m RectangleInt
regionGetExtents :: Region -> m RectangleInt
regionGetExtents a :: Region
a = IO RectangleInt -> m RectangleInt
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO RectangleInt -> m RectangleInt)
-> IO RectangleInt -> m RectangleInt
forall a b. (a -> b) -> a -> b
$ Region -> IO RectangleInt
Internal.regionGetExtents Region
a
regionNumRectangles ::
MonadIO m =>
Region
-> m Int
regionNumRectangles :: Region -> m Int
regionNumRectangles a :: Region
a = IO Int -> m Int
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO Int -> m Int) -> IO Int -> m Int
forall a b. (a -> b) -> a -> b
$ Region -> IO Int
Internal.regionNumRectangles Region
a
regionGetRectangle ::
MonadIO m =>
Region
-> Int
-> m RectangleInt
regionGetRectangle :: Region -> Int -> m RectangleInt
regionGetRectangle a :: Region
a n :: Int
n = IO RectangleInt -> m RectangleInt
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO RectangleInt -> m RectangleInt)
-> IO RectangleInt -> m RectangleInt
forall a b. (a -> b) -> a -> b
$ Region -> Int -> IO RectangleInt
Internal.regionGetRectangle Region
a Int
n
regionIsEmpty ::
MonadIO m =>
Region
-> m Bool
regionIsEmpty :: Region -> m Bool
regionIsEmpty a :: Region
a = IO Bool -> m Bool
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO Bool -> m Bool) -> IO Bool -> m Bool
forall a b. (a -> b) -> a -> b
$ Region -> IO Bool
Internal.regionIsEmpty Region
a
regionContainsPoint ::
MonadIO m =>
Region
-> Int
-> Int
-> m Bool
regionContainsPoint :: Region -> Int -> Int -> m Bool
regionContainsPoint a :: Region
a x :: Int
x y :: Int
y = IO Bool -> m Bool
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO Bool -> m Bool) -> IO Bool -> m Bool
forall a b. (a -> b) -> a -> b
$ Region -> Int -> Int -> IO Bool
Internal.regionContainsPoint Region
a Int
x Int
y
regionContainsRectangle ::
MonadIO m =>
Region
-> RectangleInt
-> m RegionOverlap
regionContainsRectangle :: Region -> RectangleInt -> m RegionOverlap
regionContainsRectangle a :: Region
a rect :: RectangleInt
rect = IO RegionOverlap -> m RegionOverlap
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO RegionOverlap -> m RegionOverlap)
-> IO RegionOverlap -> m RegionOverlap
forall a b. (a -> b) -> a -> b
$ Region -> RectangleInt -> IO RegionOverlap
Internal.regionContainsRectangle Region
a RectangleInt
rect
regionEqual ::
MonadIO m =>
Region
-> Region
-> m Bool
regionEqual :: Region -> Region -> m Bool
regionEqual a :: Region
a b :: Region
b = IO Bool -> m Bool
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO Bool -> m Bool) -> IO Bool -> m Bool
forall a b. (a -> b) -> a -> b
$ Region -> Region -> IO Bool
Internal.regionEqual Region
a Region
b
regionTranslate ::
MonadIO m =>
Region
-> Int
-> Int
-> m ()
regionTranslate :: Region -> Int -> Int -> m ()
regionTranslate a :: Region
a dx :: Int
dx dy :: Int
dy = IO () -> m ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> m ()) -> IO () -> m ()
forall a b. (a -> b) -> a -> b
$ Region -> Int -> Int -> IO ()
Internal.regionTranslate Region
a Int
dx Int
dy
regionIntersect ::
MonadIO m =>
Region
-> Region
-> m ()
regionIntersect :: Region -> Region -> m ()
regionIntersect a :: Region
a b :: Region
b = IO () -> m ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> m ()) -> IO () -> m ()
forall a b. (a -> b) -> a -> b
$ do
Status
status <- Region -> Region -> IO Status
Internal.regionIntersect Region
a Region
b
Bool -> IO () -> IO ()
forall (f :: * -> *). Applicative f => Bool -> f () -> f ()
unless (Status
status Status -> Status -> Bool
forall a. Eq a => a -> a -> Bool
== Status
StatusSuccess) (IO () -> IO ()) -> IO () -> IO ()
forall a b. (a -> b) -> a -> b
$
Status -> IO String
Internal.statusToString Status
status IO String -> (String -> IO ()) -> IO ()
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= String -> IO ()
forall (m :: * -> *) a. MonadFail m => String -> m a
fail
regionIntersectRectangle ::
MonadIO m =>
Region
-> RectangleInt
-> m ()
regionIntersectRectangle :: Region -> RectangleInt -> m ()
regionIntersectRectangle a :: Region
a rect :: RectangleInt
rect = IO () -> m ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> m ()) -> IO () -> m ()
forall a b. (a -> b) -> a -> b
$ do
Status
status <- Region -> RectangleInt -> IO Status
Internal.regionIntersectRectangle Region
a RectangleInt
rect
Bool -> IO () -> IO ()
forall (f :: * -> *). Applicative f => Bool -> f () -> f ()
unless (Status
status Status -> Status -> Bool
forall a. Eq a => a -> a -> Bool
== Status
StatusSuccess) (IO () -> IO ()) -> IO () -> IO ()
forall a b. (a -> b) -> a -> b
$
Status -> IO String
Internal.statusToString Status
status IO String -> (String -> IO ()) -> IO ()
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= String -> IO ()
forall (m :: * -> *) a. MonadFail m => String -> m a
fail
regionSubtract ::
MonadIO m =>
Region
-> Region
-> m ()
regionSubtract :: Region -> Region -> m ()
regionSubtract a :: Region
a b :: Region
b = IO () -> m ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> m ()) -> IO () -> m ()
forall a b. (a -> b) -> a -> b
$ do
Status
status <- Region -> Region -> IO Status
Internal.regionSubtract Region
a Region
b
Bool -> IO () -> IO ()
forall (f :: * -> *). Applicative f => Bool -> f () -> f ()
unless (Status
status Status -> Status -> Bool
forall a. Eq a => a -> a -> Bool
== Status
StatusSuccess) (IO () -> IO ()) -> IO () -> IO ()
forall a b. (a -> b) -> a -> b
$
Status -> IO String
Internal.statusToString Status
status IO String -> (String -> IO ()) -> IO ()
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= String -> IO ()
forall (m :: * -> *) a. MonadFail m => String -> m a
fail
regionSubtractRectangle ::
MonadIO m =>
Region
-> RectangleInt
-> m ()
regionSubtractRectangle :: Region -> RectangleInt -> m ()
regionSubtractRectangle a :: Region
a rect :: RectangleInt
rect = IO () -> m ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> m ()) -> IO () -> m ()
forall a b. (a -> b) -> a -> b
$ do
Status
status <- Region -> RectangleInt -> IO Status
Internal.regionSubtractRectangle Region
a RectangleInt
rect
Bool -> IO () -> IO ()
forall (f :: * -> *). Applicative f => Bool -> f () -> f ()
unless (Status
status Status -> Status -> Bool
forall a. Eq a => a -> a -> Bool
== Status
StatusSuccess) (IO () -> IO ()) -> IO () -> IO ()
forall a b. (a -> b) -> a -> b
$
Status -> IO String
Internal.statusToString Status
status IO String -> (String -> IO ()) -> IO ()
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= String -> IO ()
forall (m :: * -> *) a. MonadFail m => String -> m a
fail
regionUnion ::
MonadIO m =>
Region
-> Region
-> m ()
regionUnion :: Region -> Region -> m ()
regionUnion a :: Region
a b :: Region
b = IO () -> m ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> m ()) -> IO () -> m ()
forall a b. (a -> b) -> a -> b
$ do
Status
status <- Region -> Region -> IO Status
Internal.regionUnion Region
a Region
b
Bool -> IO () -> IO ()
forall (f :: * -> *). Applicative f => Bool -> f () -> f ()
unless (Status
status Status -> Status -> Bool
forall a. Eq a => a -> a -> Bool
== Status
StatusSuccess) (IO () -> IO ()) -> IO () -> IO ()
forall a b. (a -> b) -> a -> b
$
Status -> IO String
Internal.statusToString Status
status IO String -> (String -> IO ()) -> IO ()
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= String -> IO ()
forall (m :: * -> *) a. MonadFail m => String -> m a
fail
regionUnionRectangle ::
MonadIO m =>
Region
-> RectangleInt
-> m ()
regionUnionRectangle :: Region -> RectangleInt -> m ()
regionUnionRectangle a :: Region
a rect :: RectangleInt
rect = IO () -> m ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> m ()) -> IO () -> m ()
forall a b. (a -> b) -> a -> b
$ do
Status
status <- Region -> RectangleInt -> IO Status
Internal.regionUnionRectangle Region
a RectangleInt
rect
Bool -> IO () -> IO ()
forall (f :: * -> *). Applicative f => Bool -> f () -> f ()
unless (Status
status Status -> Status -> Bool
forall a. Eq a => a -> a -> Bool
== Status
StatusSuccess) (IO () -> IO ()) -> IO () -> IO ()
forall a b. (a -> b) -> a -> b
$
Status -> IO String
Internal.statusToString Status
status IO String -> (String -> IO ()) -> IO ()
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= String -> IO ()
forall (m :: * -> *) a. MonadFail m => String -> m a
fail
regionXor ::
MonadIO m =>
Region
-> Region
-> m ()
regionXor :: Region -> Region -> m ()
regionXor a :: Region
a b :: Region
b = IO () -> m ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> m ()) -> IO () -> m ()
forall a b. (a -> b) -> a -> b
$ do
Status
status <- Region -> Region -> IO Status
Internal.regionXor Region
a Region
b
Bool -> IO () -> IO ()
forall (f :: * -> *). Applicative f => Bool -> f () -> f ()
unless (Status
status Status -> Status -> Bool
forall a. Eq a => a -> a -> Bool
== Status
StatusSuccess) (IO () -> IO ()) -> IO () -> IO ()
forall a b. (a -> b) -> a -> b
$
Status -> IO String
Internal.statusToString Status
status IO String -> (String -> IO ()) -> IO ()
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= String -> IO ()
forall (m :: * -> *) a. MonadFail m => String -> m a
fail
regionXorRectangle ::
MonadIO m =>
Region
-> RectangleInt
-> m ()
regionXorRectangle :: Region -> RectangleInt -> m ()
regionXorRectangle a :: Region
a rect :: RectangleInt
rect = IO () -> m ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> m ()) -> IO () -> m ()
forall a b. (a -> b) -> a -> b
$ do
Status
status <- Region -> RectangleInt -> IO Status
Internal.regionXorRectangle Region
a RectangleInt
rect
Bool -> IO () -> IO ()
forall (f :: * -> *). Applicative f => Bool -> f () -> f ()
unless (Status
status Status -> Status -> Bool
forall a. Eq a => a -> a -> Bool
== Status
StatusSuccess) (IO () -> IO ()) -> IO () -> IO ()
forall a b. (a -> b) -> a -> b
$
Status -> IO String
Internal.statusToString Status
status IO String -> (String -> IO ()) -> IO ()
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= String -> IO ()
forall (m :: * -> *) a. MonadFail m => String -> m a
fail
#endif
version :: Int
version :: Int
version = Int
Internal.version
versionString :: String
versionString :: String
versionString = String
Internal.versionString