{-# 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 Graphics.Rendering.Cairo (
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
, copyPath
, copyPathFlat
, appendPath
, pathExtents
, createRGBPattern
, createRGBAPattern
, createLinearPattern
, createRadialPattern
, 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
, PathElement(..)
, SurfaceType(..)
, PatternType(..)
#if CAIRO_CHECK_VERSION(1,10,0)
, RectangleInt(..)
, RegionOverlap(..)
, Region
#endif
, Content(..)
, Format(..)
, Extend(..)
, Filter(..)
#if CAIRO_CHECK_VERSION(1,12,0)
, createMeshPattern
, meshPatternAddPatchRGB
, meshPatternAddPatchRGBA
, meshPatternBeginPatch
, meshPatternEndPatch
, meshPatternMoveTo
, meshPatternLineTo
, meshPatternCurveTo
, meshPatternSetControlPoint
, meshPatternSetCornerColorRGB
, meshPatternSetCornerColorRGBA
, meshPatternGetPatchCount
, meshPatternGetPath
, meshPatternGetControlPoint
, meshPatternGetCornerColorRGBA
#endif
) where
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 Graphics.Rendering.Cairo.Internal (imageSurfaceCreateFromPNG)
#endif
import Graphics.Rendering.Cairo.Types
import Graphics.Rendering.Cairo.Internal.Utilities (CairoString(..))
import qualified Graphics.Rendering.Cairo.Internal as Internal
import Graphics.Rendering.Cairo.Internal (Render(..), bracketR)
liftRender0 :: (Cairo -> IO a) -> Render a
liftRender0 :: forall a. (Cairo -> IO a) -> Render a
liftRender0 Cairo -> IO a
f = forall r (m :: * -> *). MonadReader r m => m r
ask forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= \Cairo
context -> 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 :: forall a b. (Cairo -> a -> IO b) -> a -> Render b
liftRender1 Cairo -> a -> IO b
f a
a = forall r (m :: * -> *). MonadReader r m => m r
ask forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= \Cairo
context -> 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 :: forall a b c. (Cairo -> a -> b -> IO c) -> a -> b -> Render c
liftRender2 Cairo -> a -> b -> IO c
f a
a b
b = forall r (m :: * -> *). MonadReader r m => m r
ask forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= \Cairo
context -> 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 :: forall a b c d.
(Cairo -> a -> b -> c -> IO d) -> a -> b -> c -> Render d
liftRender3 Cairo -> a -> b -> c -> IO d
f a
a b
b c
c = forall r (m :: * -> *). MonadReader r m => m r
ask forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= \Cairo
context -> 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 :: forall a b c d e.
(Cairo -> a -> b -> c -> d -> IO e) -> a -> b -> c -> d -> Render e
liftRender4 Cairo -> a -> b -> c -> d -> IO e
f a
a b
b c
c d
d = forall r (m :: * -> *). MonadReader r m => m r
ask forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= \Cairo
context -> 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 :: forall a b c d e f.
(Cairo -> a -> b -> c -> d -> e -> IO f)
-> a -> b -> c -> d -> e -> Render f
liftRender5 Cairo -> a -> b -> c -> d -> e -> IO f
f a
a b
b c
c d
d e
e = forall r (m :: * -> *). MonadReader r m => m r
ask forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= \Cairo
context -> 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 :: 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 -> a -> b -> c -> d -> e -> f -> IO g
f a
a b
b c
c d
d e
e f
g = forall r (m :: * -> *). MonadReader r m => m r
ask forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= \Cairo
context -> 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 :: forall (m :: * -> *) a. MonadIO m => Surface -> Render a -> m a
renderWith Surface
surface (Render ReaderT Cairo IO a
m) = forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO forall a b. (a -> b) -> a -> b
$
forall a b c. IO a -> (a -> IO b) -> (a -> IO c) -> IO c
bracket (Surface -> IO Cairo
Internal.create Surface
surface)
(\Cairo
context -> do Status
status <- Cairo -> IO Status
Internal.status Cairo
context
Cairo -> IO ()
Internal.destroy Cairo
context
forall (f :: * -> *). Applicative f => Bool -> f () -> f ()
unless (Status
status forall a. Eq a => a -> a -> Bool
== Status
StatusSuccess) forall a b. (a -> b) -> a -> b
$
forall (m :: * -> *) a. MonadFail m => String -> m a
fail forall (m :: * -> *) a b. Monad m => (a -> m b) -> m a -> m b
=<< Status -> IO String
Internal.statusToString Status
status)
(\Cairo
context -> forall r (m :: * -> *) a. ReaderT r m a -> r -> m a
runReaderT ReaderT Cairo IO a
m Cairo
context)
save :: Render ()
save :: Render ()
save = forall a. (Cairo -> IO a) -> Render a
liftRender0 Cairo -> IO ()
Internal.save
restore :: Render ()
restore :: Render ()
restore = forall a. (Cairo -> IO a) -> Render a
liftRender0 Cairo -> IO ()
Internal.restore
status :: Render Status
status :: Render Status
status = forall a. (Cairo -> IO a) -> Render a
liftRender0 Cairo -> IO Status
Internal.status
withTargetSurface :: (Surface -> Render a) -> Render a
withTargetSurface :: forall a. (Surface -> Render a) -> Render a
withTargetSurface Surface -> Render a
f = do
Cairo
context <- forall r (m :: * -> *). MonadReader r m => m r
ask
Surface
surface <- forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO 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 = forall a. (Cairo -> IO a) -> Render a
liftRender0 Cairo -> IO ()
Internal.pushGroup
pushGroupWithContent :: Content -> Render ()
pushGroupWithContent :: Content -> Render ()
pushGroupWithContent = forall a b. (Cairo -> a -> IO b) -> a -> Render b
liftRender1 Cairo -> Content -> IO ()
Internal.pushGroupWithContent
popGroupToSource :: Render ()
popGroupToSource :: Render ()
popGroupToSource = forall a. (Cairo -> IO a) -> Render a
liftRender0 Cairo -> IO ()
Internal.popGroupToSource
setSourceRGB ::
Double
-> Double
-> Double
-> Render ()
setSourceRGB :: Double -> Double -> Double -> Render ()
setSourceRGB = 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 = 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 = 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 = 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 = forall a. (Cairo -> IO a) -> Render a
liftRender0 Cairo -> IO Pattern
Internal.getSource
setAntialias ::
Antialias
-> Render ()
setAntialias :: Antialias -> Render ()
setAntialias = forall a b. (Cairo -> a -> IO b) -> a -> Render b
liftRender1 Cairo -> Antialias -> IO ()
Internal.setAntialias
getAntialias :: Render Antialias
getAntialias :: Render Antialias
getAntialias = forall a. (Cairo -> IO a) -> Render a
liftRender0 Cairo -> IO Antialias
Internal.getAntialias
setDash ::
[Double]
-> Double
-> Render ()
setDash :: [Double] -> Double -> Render ()
setDash = forall a b c. (Cairo -> a -> b -> IO c) -> a -> b -> Render c
liftRender2 forall {a1} {a2}.
(RealFloat a1, RealFloat a2) =>
Cairo -> [a1] -> a2 -> IO ()
Internal.setDash
setFillRule ::
FillRule
-> Render ()
setFillRule :: FillRule -> Render ()
setFillRule = forall a b. (Cairo -> a -> IO b) -> a -> Render b
liftRender1 Cairo -> FillRule -> IO ()
Internal.setFillRule
getFillRule :: Render FillRule
getFillRule :: Render FillRule
getFillRule = forall a. (Cairo -> IO a) -> Render a
liftRender0 Cairo -> IO FillRule
Internal.getFillRule
setLineCap ::
LineCap
-> Render ()
setLineCap :: LineCap -> Render ()
setLineCap = forall a b. (Cairo -> a -> IO b) -> a -> Render b
liftRender1 Cairo -> LineCap -> IO ()
Internal.setLineCap
getLineCap :: Render LineCap
getLineCap :: Render LineCap
getLineCap = forall a. (Cairo -> IO a) -> Render a
liftRender0 Cairo -> IO LineCap
Internal.getLineCap
setLineJoin ::
LineJoin
-> Render ()
setLineJoin :: LineJoin -> Render ()
setLineJoin = forall a b. (Cairo -> a -> IO b) -> a -> Render b
liftRender1 Cairo -> LineJoin -> IO ()
Internal.setLineJoin
getLineJoin :: Render LineJoin
getLineJoin :: Render LineJoin
getLineJoin = forall a. (Cairo -> IO a) -> Render a
liftRender0 Cairo -> IO LineJoin
Internal.getLineJoin
setLineWidth ::
Double
-> Render ()
setLineWidth :: Double -> Render ()
setLineWidth = forall a b. (Cairo -> a -> IO b) -> a -> Render b
liftRender1 Cairo -> Double -> IO ()
Internal.setLineWidth
getLineWidth :: Render Double
getLineWidth :: Render Double
getLineWidth = forall a. (Cairo -> IO a) -> Render a
liftRender0 Cairo -> IO Double
Internal.getLineWidth
setMiterLimit ::
Double
-> Render ()
setMiterLimit :: Double -> Render ()
setMiterLimit = forall a b. (Cairo -> a -> IO b) -> a -> Render b
liftRender1 Cairo -> Double -> IO ()
Internal.setMiterLimit
getMiterLimit :: Render Double
getMiterLimit :: Render Double
getMiterLimit = forall a. (Cairo -> IO a) -> Render a
liftRender0 Cairo -> IO Double
Internal.getMiterLimit
setOperator ::
Operator
-> Render ()
setOperator :: Operator -> Render ()
setOperator = forall a b. (Cairo -> a -> IO b) -> a -> Render b
liftRender1 Cairo -> Operator -> IO ()
Internal.setOperator
getOperator :: Render Operator
getOperator :: Render Operator
getOperator = forall a. (Cairo -> IO a) -> Render a
liftRender0 Cairo -> IO Operator
Internal.getOperator
setTolerance ::
Double
-> Render ()
setTolerance :: Double -> Render ()
setTolerance = forall a b. (Cairo -> a -> IO b) -> a -> Render b
liftRender1 Cairo -> Double -> IO ()
Internal.setTolerance
getTolerance :: Render Double
getTolerance :: Render Double
getTolerance = forall a. (Cairo -> IO a) -> Render a
liftRender0 Cairo -> IO Double
Internal.getTolerance
clip :: Render ()
clip :: Render ()
clip = forall a. (Cairo -> IO a) -> Render a
liftRender0 Cairo -> IO ()
Internal.clip
clipPreserve :: Render ()
clipPreserve :: Render ()
clipPreserve = forall a. (Cairo -> IO a) -> Render a
liftRender0 Cairo -> IO ()
Internal.clipPreserve
resetClip :: Render ()
resetClip :: Render ()
resetClip = 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 = forall a. (Cairo -> IO a) -> Render a
liftRender0 Cairo -> IO (Double, Double, Double, Double)
Internal.clipExtents
fill :: Render ()
fill :: Render ()
fill = forall a. (Cairo -> IO a) -> Render a
liftRender0 Cairo -> IO ()
Internal.fill
fillPreserve :: Render ()
fillPreserve :: Render ()
fillPreserve = 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 = 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 = 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 = 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 = 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 = forall a. (Cairo -> IO a) -> Render a
liftRender0 Cairo -> IO ()
Internal.paint
paintWithAlpha ::
Double
-> Render ()
paintWithAlpha :: Double -> Render ()
paintWithAlpha = forall a b. (Cairo -> a -> IO b) -> a -> Render b
liftRender1 Cairo -> Double -> IO ()
Internal.paintWithAlpha
stroke :: Render ()
stroke :: Render ()
stroke = forall a. (Cairo -> IO a) -> Render a
liftRender0 Cairo -> IO ()
Internal.stroke
strokePreserve :: Render ()
strokePreserve :: Render ()
strokePreserve = 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 = 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 = 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 = forall a. (Cairo -> IO a) -> Render a
liftRender0 Cairo -> IO ()
Internal.copyPage
showPage :: Render ()
showPage :: Render ()
showPage = forall a. (Cairo -> IO a) -> Render a
liftRender0 Cairo -> IO ()
Internal.showPage
getCurrentPoint :: Render (Double,Double)
getCurrentPoint :: Render (Double, Double)
getCurrentPoint = forall a. (Cairo -> IO a) -> Render a
liftRender0 Cairo -> IO (Double, Double)
Internal.getCurrentPoint
newPath :: Render ()
newPath :: Render ()
newPath = forall a. (Cairo -> IO a) -> Render a
liftRender0 Cairo -> IO ()
Internal.newPath
closePath :: Render ()
closePath :: Render ()
closePath = 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 = 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 = 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 = 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 = 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 = 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 = 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 :: forall string. CairoString string => string -> Render ()
textPath = forall a b. (Cairo -> a -> IO b) -> a -> Render b
liftRender1 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 = 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 = 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 = forall a b c. (Cairo -> a -> b -> IO c) -> a -> b -> Render c
liftRender2 Cairo -> Double -> Double -> IO ()
Internal.relMoveTo
copyPath :: Render Path
copyPath :: Render Path
copyPath = forall a. (Cairo -> IO a) -> Render a
liftRender0 Cairo -> IO Path
Internal.copyPath
copyPathFlat :: Render Path
copyPathFlat :: Render Path
copyPathFlat = forall a. (Cairo -> IO a) -> Render a
liftRender0 Cairo -> IO Path
Internal.copyPathFlat
appendPath :: Path
-> Render ()
appendPath :: Path -> Render ()
appendPath = forall a b. (Cairo -> a -> IO b) -> a -> Render b
liftRender1 Cairo -> Path -> IO ()
Internal.appendPath
pathExtents :: Render (Double,Double,Double,Double)
pathExtents :: Render (Double, Double, Double, Double)
pathExtents = forall a. (Cairo -> IO a) -> Render a
liftRender0 Cairo -> IO (Double, Double, Double, Double)
Internal.pathExtents
createRGBPattern ::
MonadIO m =>
Double
-> Double
-> Double
-> m Pattern
createRGBPattern :: forall (m :: * -> *).
MonadIO m =>
Double -> Double -> Double -> m Pattern
createRGBPattern Double
r Double
g Double
b = forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIOforall a b. (a -> b) -> a -> b
$ Double -> Double -> Double -> IO Pattern
Internal.patternCreateRGB Double
r Double
g Double
b
createRGBAPattern ::
MonadIO m =>
Double
-> Double
-> Double
-> Double
-> m Pattern
createRGBAPattern :: forall (m :: * -> *).
MonadIO m =>
Double -> Double -> Double -> Double -> m Pattern
createRGBAPattern Double
r Double
g Double
b Double
a = forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIOforall a b. (a -> b) -> a -> b
$ Double -> Double -> Double -> Double -> IO Pattern
Internal.patternCreateRGBA Double
r Double
g Double
b Double
a
createLinearPattern ::
MonadIO m =>
Double
-> Double
-> Double
-> Double
-> m Pattern
createLinearPattern :: forall (m :: * -> *).
MonadIO m =>
Double -> Double -> Double -> Double -> m Pattern
createLinearPattern Double
x1 Double
y1 Double
x2 Double
y2 = forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIOforall a b. (a -> b) -> a -> b
$ Double -> Double -> Double -> Double -> IO Pattern
Internal.patternCreateLinear Double
x1 Double
y1 Double
x2 Double
y2
createRadialPattern ::
MonadIO m =>
Double
-> Double
-> Double
-> Double
-> Double
-> Double
-> m Pattern
createRadialPattern :: forall (m :: * -> *).
MonadIO m =>
Double
-> Double -> Double -> Double -> Double -> Double -> m Pattern
createRadialPattern Double
x1 Double
y1 Double
r1 Double
x2 Double
y2 Double
r2 = forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIOforall a b. (a -> b) -> a -> b
$ Double
-> Double -> Double -> Double -> Double -> Double -> IO Pattern
Internal.patternCreateRadial Double
x1 Double
y1 Double
r1 Double
x2 Double
y2 Double
r2
withRGBPattern ::
Double
-> Double
-> Double
-> (Pattern -> Render a)
-> Render a
withRGBPattern :: forall a.
Double -> Double -> Double -> (Pattern -> Render a) -> Render a
withRGBPattern Double
r Double
g Double
b Pattern -> Render a
f =
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 -> do Status
status <- Pattern -> IO Status
Internal.patternStatus Pattern
pattern
forall (f :: * -> *). Applicative f => Bool -> f () -> f ()
unless (Status
status forall a. Eq a => a -> a -> Bool
== Status
StatusSuccess) forall a b. (a -> b) -> a -> b
$
forall (m :: * -> *) a. MonadFail m => String -> m a
fail forall (m :: * -> *) a b. Monad m => (a -> m b) -> m a -> m b
=<< Status -> IO String
Internal.statusToString Status
status)
(\Pattern
pattern -> Pattern -> Render a
f Pattern
pattern)
withRGBAPattern ::
Double
-> Double
-> Double
-> Double
-> (Pattern -> Render a)
-> Render a
withRGBAPattern :: forall a.
Double
-> Double -> Double -> Double -> (Pattern -> Render a) -> Render a
withRGBAPattern Double
r Double
g Double
b Double
a Pattern -> Render a
f =
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 -> do Status
status <- Pattern -> IO Status
Internal.patternStatus Pattern
pattern
forall (f :: * -> *). Applicative f => Bool -> f () -> f ()
unless (Status
status forall a. Eq a => a -> a -> Bool
== Status
StatusSuccess) forall a b. (a -> b) -> a -> b
$
forall (m :: * -> *) a. MonadFail m => String -> m a
fail forall (m :: * -> *) a b. Monad m => (a -> m b) -> m a -> m b
=<< Status -> IO String
Internal.statusToString Status
status)
(\Pattern
pattern -> Pattern -> Render a
f Pattern
pattern)
withPatternForSurface ::
Surface
-> (Pattern -> Render a)
-> Render a
withPatternForSurface :: forall a. Surface -> (Pattern -> Render a) -> Render a
withPatternForSurface Surface
surface Pattern -> Render a
f =
forall a b c. IO a -> (a -> IO b) -> (a -> Render c) -> Render c
bracketR (Surface -> IO Pattern
Internal.patternCreateForSurface Surface
surface)
(\Pattern
pattern -> do Status
status <- Pattern -> IO Status
Internal.patternStatus Pattern
pattern
forall (f :: * -> *). Applicative f => Bool -> f () -> f ()
unless (Status
status forall a. Eq a => a -> a -> Bool
== Status
StatusSuccess) forall a b. (a -> b) -> a -> b
$
forall (m :: * -> *) a. MonadFail m => String -> m a
fail forall (m :: * -> *) a b. Monad m => (a -> m b) -> m a -> m b
=<< Status -> IO String
Internal.statusToString Status
status)
(\Pattern
pattern -> Pattern -> Render a
f Pattern
pattern)
withGroupPattern :: (Pattern -> Render a)
-> Render a
withGroupPattern :: forall a. (Pattern -> Render a) -> Render a
withGroupPattern Pattern -> Render a
f = do
Cairo
context <- forall r (m :: * -> *). MonadReader r m => m r
ask
forall a b c. IO a -> (a -> IO b) -> (a -> Render c) -> Render c
bracketR (Cairo -> IO Pattern
Internal.popGroup Cairo
context)
(\Pattern
pattern -> do Status
status <- Pattern -> IO Status
Internal.patternStatus Pattern
pattern
forall (f :: * -> *). Applicative f => Bool -> f () -> f ()
unless (Status
status forall a. Eq a => a -> a -> Bool
== Status
StatusSuccess) forall a b. (a -> b) -> a -> b
$
forall (m :: * -> *) a. MonadFail m => String -> m a
fail 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 :: forall a.
Double
-> Double -> Double -> Double -> (Pattern -> Render a) -> Render a
withLinearPattern Double
x0 Double
y0 Double
x1 Double
y1 Pattern -> Render a
f =
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 -> do Status
status <- Pattern -> IO Status
Internal.patternStatus Pattern
pattern
forall (f :: * -> *). Applicative f => Bool -> f () -> f ()
unless (Status
status forall a. Eq a => a -> a -> Bool
== Status
StatusSuccess) forall a b. (a -> b) -> a -> b
$
forall (m :: * -> *) a. MonadFail m => String -> m a
fail forall (m :: * -> *) a b. Monad m => (a -> m b) -> m a -> m b
=<< Status -> IO String
Internal.statusToString Status
status)
(\Pattern
pattern -> Pattern -> Render a
f Pattern
pattern)
withRadialPattern ::
Double
-> Double
-> Double
-> Double
-> Double
-> Double
-> (Pattern -> Render a)
-> Render a
withRadialPattern :: forall a.
Double
-> Double
-> Double
-> Double
-> Double
-> Double
-> (Pattern -> Render a)
-> Render a
withRadialPattern Double
cx0 Double
cy0 Double
radius0 Double
cx1 Double
cy1 Double
radius1 Pattern -> Render a
f =
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 -> do Status
status <- Pattern -> IO Status
Internal.patternStatus Pattern
pattern
forall (f :: * -> *). Applicative f => Bool -> f () -> f ()
unless (Status
status forall a. Eq a => a -> a -> Bool
== Status
StatusSuccess) forall a b. (a -> b) -> a -> b
$
forall (m :: * -> *) a. MonadFail m => String -> m a
fail forall (m :: * -> *) a b. Monad m => (a -> m b) -> m a -> m b
=<< Status -> IO String
Internal.statusToString Status
status)
(\Pattern
pattern -> Pattern -> Render a
f Pattern
pattern)
patternAddColorStopRGB ::
MonadIO m =>
Pattern
-> Double
-> Double
-> Double
-> Double
-> m ()
patternAddColorStopRGB :: forall (m :: * -> *).
MonadIO m =>
Pattern -> Double -> Double -> Double -> Double -> m ()
patternAddColorStopRGB Pattern
p Double
offset Double
r Double
g Double
b = forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO 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 :: forall (m :: * -> *).
MonadIO m =>
Pattern -> Double -> Double -> Double -> Double -> Double -> m ()
patternAddColorStopRGBA Pattern
p Double
offset Double
r Double
g Double
b Double
a = forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO 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 :: forall (m :: * -> *). MonadIO m => Pattern -> Matrix -> m ()
patternSetMatrix Pattern
p Matrix
m = forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO forall a b. (a -> b) -> a -> b
$ Pattern -> Matrix -> IO ()
Internal.patternSetMatrix Pattern
p Matrix
m
patternGetMatrix ::
MonadIO m =>
Pattern
-> m Matrix
patternGetMatrix :: forall (m :: * -> *). MonadIO m => Pattern -> m Matrix
patternGetMatrix Pattern
p = forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO forall a b. (a -> b) -> a -> b
$ Pattern -> IO Matrix
Internal.patternGetMatrix Pattern
p
patternSetExtend ::
MonadIO m =>
Pattern
-> Extend
-> m ()
patternSetExtend :: forall (m :: * -> *). MonadIO m => Pattern -> Extend -> m ()
patternSetExtend Pattern
p Extend
e = forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO forall a b. (a -> b) -> a -> b
$ Pattern -> Extend -> IO ()
Internal.patternSetExtend Pattern
p Extend
e
patternGetExtend ::
MonadIO m =>
Pattern
-> m Extend
patternGetExtend :: forall (m :: * -> *). MonadIO m => Pattern -> m Extend
patternGetExtend Pattern
p = forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO forall a b. (a -> b) -> a -> b
$ Pattern -> IO Extend
Internal.patternGetExtend Pattern
p
patternSetFilter ::
MonadIO m =>
Pattern
-> Filter
-> m ()
patternSetFilter :: forall (m :: * -> *). MonadIO m => Pattern -> Filter -> m ()
patternSetFilter Pattern
p Filter
f = forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO forall a b. (a -> b) -> a -> b
$ Pattern -> Filter -> IO ()
Internal.patternSetFilter Pattern
p Filter
f
patternGetFilter ::
MonadIO m =>
Pattern
-> m Filter
patternGetFilter :: forall (m :: * -> *). MonadIO m => Pattern -> m Filter
patternGetFilter Pattern
p = forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO forall a b. (a -> b) -> a -> b
$ Pattern -> IO Filter
Internal.patternGetFilter Pattern
p
#if CAIRO_CHECK_VERSION(1,12,0)
createMeshPattern ::
MonadIO m =>
m Pattern
createMeshPattern :: forall (m :: * -> *). MonadIO m => m Pattern
createMeshPattern = forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIOforall a b. (a -> b) -> a -> b
$ IO Pattern
Internal.patternCreateMesh
meshPatternAddPatchRGB ::
MonadIO m =>
Pattern
-> Path
-> [(Double,Double)]
-> [(Double,Double,Double)]
-> m Status
meshPatternAddPatchRGB :: forall (m :: * -> *).
MonadIO m =>
Pattern
-> Path
-> [(Double, Double)]
-> [(Double, Double, Double)]
-> m Status
meshPatternAddPatchRGB Pattern
pat Path
elems [(Double, Double)]
controlPoints [(Double, Double, Double)]
colors = do
forall (m :: * -> *). MonadIO m => Pattern -> m ()
meshPatternBeginPatch Pattern
pat
forall (t :: * -> *) (m :: * -> *) a b.
(Foldable t, Monad m) =>
(a -> m b) -> t a -> m ()
mapM_ (forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO forall b c a. (b -> c) -> (a -> b) -> a -> c
. Pattern -> PathElement -> IO ()
Internal.convertPathElement Pattern
pat) (forall a. Int -> [a] -> [a]
take Int
4 Path
elems)
forall (t :: * -> *) (m :: * -> *) a.
(Foldable t, Monad m) =>
t (m a) -> m ()
sequence_ forall a b. (a -> b) -> a -> b
$ forall a b c. (a -> b -> c) -> [a] -> [b] -> [c]
zipWith (\(Double
x,Double
y) Int
n -> forall (m :: * -> *).
MonadIO m =>
Pattern -> Int -> Double -> Double -> m ()
meshPatternSetControlPoint Pattern
pat Int
n Double
x Double
y) (forall a. Int -> [a] -> [a]
take Int
4 [(Double, Double)]
controlPoints) [Int
0..Int
3]
forall (t :: * -> *) (m :: * -> *) a.
(Foldable t, Monad m) =>
t (m a) -> m ()
sequence_ forall a b. (a -> b) -> a -> b
$ forall a b c. (a -> b -> c) -> [a] -> [b] -> [c]
zipWith (\(Double
r,Double
g,Double
b) Int
n -> forall (m :: * -> *).
MonadIO m =>
Pattern -> Int -> Double -> Double -> Double -> m ()
meshPatternSetCornerColorRGB Pattern
pat Int
n Double
r Double
g Double
b) (forall a. Int -> [a] -> [a]
take Int
4 [(Double, Double, Double)]
colors) [Int
0..Int
3]
forall (m :: * -> *). MonadIO m => Pattern -> m ()
meshPatternEndPatch Pattern
pat
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIOforall a b. (a -> b) -> a -> b
$ Pattern -> IO Status
Internal.patternStatus Pattern
pat
meshPatternAddPatchRGBA ::
MonadIO m =>
Pattern
-> Path
-> [(Double,Double)]
-> [(Double,Double,Double,Double)]
-> m Status
meshPatternAddPatchRGBA :: forall (m :: * -> *).
MonadIO m =>
Pattern
-> Path
-> [(Double, Double)]
-> [(Double, Double, Double, Double)]
-> m Status
meshPatternAddPatchRGBA Pattern
pat Path
elems [(Double, Double)]
controlPoints [(Double, Double, Double, Double)]
colors = do
forall (m :: * -> *). MonadIO m => Pattern -> m ()
meshPatternBeginPatch Pattern
pat
forall (t :: * -> *) (m :: * -> *) a b.
(Foldable t, Monad m) =>
(a -> m b) -> t a -> m ()
mapM_ (forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO forall b c a. (b -> c) -> (a -> b) -> a -> c
. Pattern -> PathElement -> IO ()
Internal.convertPathElement Pattern
pat) (forall a. Int -> [a] -> [a]
take Int
4 Path
elems)
forall (t :: * -> *) (m :: * -> *) a.
(Foldable t, Monad m) =>
t (m a) -> m ()
sequence_ forall a b. (a -> b) -> a -> b
$ forall a b c. (a -> b -> c) -> [a] -> [b] -> [c]
zipWith (\(Double
x,Double
y) Int
n -> forall (m :: * -> *).
MonadIO m =>
Pattern -> Int -> Double -> Double -> m ()
meshPatternSetControlPoint Pattern
pat Int
n Double
x Double
y) (forall a. Int -> [a] -> [a]
take Int
4 [(Double, Double)]
controlPoints) [Int
0..Int
3]
forall (t :: * -> *) (m :: * -> *) a.
(Foldable t, Monad m) =>
t (m a) -> m ()
sequence_ forall a b. (a -> b) -> a -> b
$ forall a b c. (a -> b -> c) -> [a] -> [b] -> [c]
zipWith (\(Double
r,Double
g,Double
b,Double
a) Int
n -> forall (m :: * -> *).
MonadIO m =>
Pattern -> Int -> Double -> Double -> Double -> Double -> m ()
meshPatternSetCornerColorRGBA Pattern
pat Int
n Double
r Double
g Double
b Double
a) (forall a. Int -> [a] -> [a]
take Int
4 [(Double, Double, Double, Double)]
colors) [Int
0..Int
3]
forall (m :: * -> *). MonadIO m => Pattern -> m ()
meshPatternEndPatch Pattern
pat
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIOforall a b. (a -> b) -> a -> b
$ Pattern -> IO Status
Internal.patternStatus Pattern
pat
meshPatternBeginPatch ::
MonadIO m =>
Pattern
-> m ()
meshPatternBeginPatch :: forall (m :: * -> *). MonadIO m => Pattern -> m ()
meshPatternBeginPatch Pattern
p = forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIOforall a b. (a -> b) -> a -> b
$ Pattern -> IO ()
Internal.meshPatternBeginPatch Pattern
p
meshPatternEndPatch ::
MonadIO m =>
Pattern
-> m ()
meshPatternEndPatch :: forall (m :: * -> *). MonadIO m => Pattern -> m ()
meshPatternEndPatch Pattern
p = forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIOforall a b. (a -> b) -> a -> b
$ Pattern -> IO ()
Internal.meshPatternEndPatch Pattern
p
meshPatternMoveTo ::
MonadIO m =>
Pattern
-> Double
-> Double
-> m ()
meshPatternMoveTo :: forall (m :: * -> *).
MonadIO m =>
Pattern -> Double -> Double -> m ()
meshPatternMoveTo Pattern
p Double
x Double
y = forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIOforall a b. (a -> b) -> a -> b
$ Pattern -> Double -> Double -> IO ()
Internal.meshPatternMoveTo Pattern
p Double
x Double
y
meshPatternLineTo ::
MonadIO m =>
Pattern
-> Double
-> Double
-> m ()
meshPatternLineTo :: forall (m :: * -> *).
MonadIO m =>
Pattern -> Double -> Double -> m ()
meshPatternLineTo Pattern
p Double
x Double
y = forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIOforall a b. (a -> b) -> a -> b
$ Pattern -> Double -> Double -> IO ()
Internal.meshPatternLineTo Pattern
p Double
x Double
y
meshPatternCurveTo ::
MonadIO m =>
Pattern
-> Double
-> Double
-> Double
-> Double
-> Double
-> Double
-> m ()
meshPatternCurveTo :: forall (m :: * -> *).
MonadIO m =>
Pattern
-> Double -> Double -> Double -> Double -> Double -> Double -> m ()
meshPatternCurveTo Pattern
p Double
x1 Double
y1 Double
x2 Double
y2 Double
x3 Double
y3 = forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIOforall a b. (a -> b) -> a -> b
$ Pattern
-> Double
-> Double
-> Double
-> Double
-> Double
-> Double
-> IO ()
Internal.meshPatternCurveTo Pattern
p Double
x1 Double
y1 Double
x2 Double
y2 Double
x3 Double
y3
meshPatternSetControlPoint ::
MonadIO m =>
Pattern
-> Int
-> Double
-> Double
-> m ()
meshPatternSetControlPoint :: forall (m :: * -> *).
MonadIO m =>
Pattern -> Int -> Double -> Double -> m ()
meshPatternSetControlPoint Pattern
p Int
n Double
x Double
y = forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIOforall a b. (a -> b) -> a -> b
$ Pattern -> Int -> Double -> Double -> IO ()
Internal.meshPatternSetControlPoint Pattern
p Int
n Double
x Double
y
meshPatternSetCornerColorRGB ::
MonadIO m =>
Pattern
-> Int
-> Double
-> Double
-> Double
-> m ()
meshPatternSetCornerColorRGB :: forall (m :: * -> *).
MonadIO m =>
Pattern -> Int -> Double -> Double -> Double -> m ()
meshPatternSetCornerColorRGB Pattern
p Int
n Double
r Double
g Double
b = forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIOforall a b. (a -> b) -> a -> b
$ Pattern -> Int -> Double -> Double -> Double -> IO ()
Internal.meshPatternSetCornerColorRGB Pattern
p Int
n Double
r Double
g Double
b
meshPatternSetCornerColorRGBA ::
MonadIO m =>
Pattern
-> Int
-> Double
-> Double
-> Double
-> Double
-> m ()
meshPatternSetCornerColorRGBA :: forall (m :: * -> *).
MonadIO m =>
Pattern -> Int -> Double -> Double -> Double -> Double -> m ()
meshPatternSetCornerColorRGBA Pattern
p Int
n Double
r Double
g Double
b Double
a = forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIOforall a b. (a -> b) -> a -> b
$ Pattern -> Int -> Double -> Double -> Double -> Double -> IO ()
Internal.meshPatternSetCornerColorRGBA Pattern
p Int
n Double
r Double
g Double
b Double
a
meshPatternGetPatchCount ::
MonadIO m =>
Pattern
-> m (Status, Int)
meshPatternGetPatchCount :: forall (m :: * -> *). MonadIO m => Pattern -> m (Status, Int)
meshPatternGetPatchCount Pattern
p = forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIOforall a b. (a -> b) -> a -> b
$ Pattern -> IO (Status, Int)
Internal.meshPatternGetPatchCount Pattern
p
meshPatternGetPath ::
MonadIO m =>
Pattern
-> Int
-> m Path
meshPatternGetPath :: forall (m :: * -> *). MonadIO m => Pattern -> Int -> m Path
meshPatternGetPath Pattern
p Int
n = forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIOforall a b. (a -> b) -> a -> b
$ Pattern -> Int -> IO Path
Internal.meshPatternGetPath Pattern
p Int
n
meshPatternGetControlPoint ::
MonadIO m =>
Pattern
-> Int
-> Int
-> m (Status, Double, Double)
meshPatternGetControlPoint :: forall (m :: * -> *).
MonadIO m =>
Pattern -> Int -> Int -> m (Status, Double, Double)
meshPatternGetControlPoint Pattern
p Int
point_num Int
patch_num = forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIOforall a b. (a -> b) -> a -> b
$ Pattern -> Int -> Int -> IO (Status, Double, Double)
Internal.meshPatternGetControlPoint Pattern
p Int
point_num Int
patch_num
meshPatternGetCornerColorRGBA ::
MonadIO m =>
Pattern
-> Int
-> Int
-> m (Status, Double, Double, Double, Double)
meshPatternGetCornerColorRGBA :: forall (m :: * -> *).
MonadIO m =>
Pattern -> Int -> Int -> m (Status, Double, Double, Double, Double)
meshPatternGetCornerColorRGBA Pattern
p Int
corner_num Int
patch_num = forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIOforall a b. (a -> b) -> a -> b
$ Pattern
-> Int -> Int -> IO (Status, Double, Double, Double, Double)
Internal.meshPatternGetCornerColorRGBA Pattern
p Int
corner_num Int
patch_num
#endif
translate ::
Double
-> Double
-> Render ()
translate :: Double -> Double -> Render ()
translate = 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 = 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 = forall a b. (Cairo -> a -> IO b) -> a -> Render b
liftRender1 Cairo -> Double -> IO ()
Internal.rotate
transform ::
Matrix
-> Render ()
transform :: Matrix -> Render ()
transform = forall a b. (Cairo -> a -> IO b) -> a -> Render b
liftRender1 Cairo -> Matrix -> IO ()
Internal.transform
setMatrix ::
Matrix
-> Render ()
setMatrix :: Matrix -> Render ()
setMatrix = forall a b. (Cairo -> a -> IO b) -> a -> Render b
liftRender1 Cairo -> Matrix -> IO ()
Internal.setMatrix
getMatrix :: Render Matrix
getMatrix :: Render Matrix
getMatrix = forall a. (Cairo -> IO a) -> Render a
liftRender0 Cairo -> IO Matrix
Internal.getMatrix
identityMatrix :: Render ()
identityMatrix :: Render ()
identityMatrix = 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 = 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 = 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 = 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 = 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 :: forall string.
CairoString string =>
string -> FontSlant -> FontWeight -> Render ()
selectFontFace = forall a b c d.
(Cairo -> a -> b -> c -> IO d) -> a -> b -> c -> Render d
liftRender3 forall string.
CairoString string =>
Cairo -> string -> FontSlant -> FontWeight -> IO ()
Internal.selectFontFace
setFontSize ::
Double
-> Render ()
setFontSize :: Double -> Render ()
setFontSize = forall a b. (Cairo -> a -> IO b) -> a -> Render b
liftRender1 Cairo -> Double -> IO ()
Internal.setFontSize
setFontMatrix ::
Matrix
-> Render ()
setFontMatrix :: Matrix -> Render ()
setFontMatrix = forall a b. (Cairo -> a -> IO b) -> a -> Render b
liftRender1 Cairo -> Matrix -> IO ()
Internal.setFontMatrix
getFontMatrix :: Render Matrix
getFontMatrix :: Render Matrix
getFontMatrix = forall a. (Cairo -> IO a) -> Render a
liftRender0 Cairo -> IO Matrix
Internal.getFontMatrix
setFontOptions :: FontOptions -> Render ()
setFontOptions :: FontOptions -> Render ()
setFontOptions = forall a b. (Cairo -> a -> IO b) -> a -> Render b
liftRender1 Cairo -> FontOptions -> IO ()
Internal.setFontOptions
showText ::
CairoString string
=> string
-> Render ()
showText :: forall string. CairoString string => string -> Render ()
showText = forall a b. (Cairo -> a -> IO b) -> a -> Render b
liftRender1 forall string. CairoString string => Cairo -> string -> IO ()
Internal.showText
fontExtents :: Render FontExtents
fontExtents :: Render FontExtents
fontExtents = forall a. (Cairo -> IO a) -> Render a
liftRender0 Cairo -> IO FontExtents
Internal.fontExtents
textExtents ::
CairoString string
=> string
-> Render TextExtents
textExtents :: forall string. CairoString string => string -> Render TextExtents
textExtents = forall a b. (Cairo -> a -> IO b) -> a -> Render b
liftRender1 forall string.
CairoString string =>
Cairo -> string -> IO TextExtents
Internal.textExtents
fontOptionsCreate :: MonadIO m => m FontOptions
fontOptionsCreate :: forall (m :: * -> *). MonadIO m => m FontOptions
fontOptionsCreate = forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO forall a b. (a -> b) -> a -> b
$ IO FontOptions
Internal.fontOptionsCreate
fontOptionsCopy ::
MonadIO m =>
FontOptions
-> m FontOptions
fontOptionsCopy :: forall (m :: * -> *). MonadIO m => FontOptions -> m FontOptions
fontOptionsCopy FontOptions
a = forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO forall a b. (a -> b) -> a -> b
$ FontOptions -> IO FontOptions
Internal.fontOptionsCopy FontOptions
a
fontOptionsMerge ::
MonadIO m =>
FontOptions
-> FontOptions
-> m ()
fontOptionsMerge :: forall (m :: * -> *).
MonadIO m =>
FontOptions -> FontOptions -> m ()
fontOptionsMerge FontOptions
a FontOptions
b = forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO forall a b. (a -> b) -> a -> b
$ FontOptions -> FontOptions -> IO ()
Internal.fontOptionsMerge FontOptions
a FontOptions
b
fontOptionsHash :: MonadIO m => FontOptions -> m Int
fontOptionsHash :: forall (m :: * -> *). MonadIO m => FontOptions -> m Int
fontOptionsHash FontOptions
a = forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO forall a b. (a -> b) -> a -> b
$ FontOptions -> IO Int
Internal.fontOptionsHash FontOptions
a
fontOptionsEqual :: MonadIO m => FontOptions -> FontOptions -> m Bool
fontOptionsEqual :: forall (m :: * -> *).
MonadIO m =>
FontOptions -> FontOptions -> m Bool
fontOptionsEqual FontOptions
a FontOptions
b = forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO forall a b. (a -> b) -> a -> b
$ FontOptions -> FontOptions -> IO Bool
Internal.fontOptionsEqual FontOptions
a FontOptions
b
fontOptionsSetAntialias :: MonadIO m => FontOptions -> Antialias -> m ()
fontOptionsSetAntialias :: forall (m :: * -> *). MonadIO m => FontOptions -> Antialias -> m ()
fontOptionsSetAntialias FontOptions
a Antialias
b = forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO forall a b. (a -> b) -> a -> b
$ FontOptions -> Antialias -> IO ()
Internal.fontOptionsSetAntialias FontOptions
a Antialias
b
fontOptionsGetAntialias :: MonadIO m => FontOptions -> m Antialias
fontOptionsGetAntialias :: forall (m :: * -> *). MonadIO m => FontOptions -> m Antialias
fontOptionsGetAntialias FontOptions
a = forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO forall a b. (a -> b) -> a -> b
$ FontOptions -> IO Antialias
Internal.fontOptionsGetAntialias FontOptions
a
fontOptionsSetSubpixelOrder :: MonadIO m => FontOptions -> SubpixelOrder-> m ()
fontOptionsSetSubpixelOrder :: forall (m :: * -> *).
MonadIO m =>
FontOptions -> SubpixelOrder -> m ()
fontOptionsSetSubpixelOrder FontOptions
a SubpixelOrder
b = forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO forall a b. (a -> b) -> a -> b
$ FontOptions -> SubpixelOrder -> IO ()
Internal.fontOptionsSetSubpixelOrder FontOptions
a SubpixelOrder
b
fontOptionsGetSubpixelOrder :: MonadIO m => FontOptions -> m SubpixelOrder
fontOptionsGetSubpixelOrder :: forall (m :: * -> *). MonadIO m => FontOptions -> m SubpixelOrder
fontOptionsGetSubpixelOrder FontOptions
a = forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO forall a b. (a -> b) -> a -> b
$ FontOptions -> IO SubpixelOrder
Internal.fontOptionsGetSubpixelOrder FontOptions
a
fontOptionsSetHintStyle :: MonadIO m => FontOptions -> HintStyle -> m ()
fontOptionsSetHintStyle :: forall (m :: * -> *). MonadIO m => FontOptions -> HintStyle -> m ()
fontOptionsSetHintStyle FontOptions
a HintStyle
b = forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO forall a b. (a -> b) -> a -> b
$ FontOptions -> HintStyle -> IO ()
Internal.fontOptionsSetHintStyle FontOptions
a HintStyle
b
fontOptionsGetHintStyle :: MonadIO m => FontOptions -> m HintStyle
fontOptionsGetHintStyle :: forall (m :: * -> *). MonadIO m => FontOptions -> m HintStyle
fontOptionsGetHintStyle FontOptions
a = forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO forall a b. (a -> b) -> a -> b
$ FontOptions -> IO HintStyle
Internal.fontOptionsGetHintStyle FontOptions
a
fontOptionsSetHintMetrics :: MonadIO m => FontOptions -> HintMetrics -> m ()
fontOptionsSetHintMetrics :: forall (m :: * -> *).
MonadIO m =>
FontOptions -> HintMetrics -> m ()
fontOptionsSetHintMetrics FontOptions
a HintMetrics
b = forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO forall a b. (a -> b) -> a -> b
$ FontOptions -> HintMetrics -> IO ()
Internal.fontOptionsSetHintMetrics FontOptions
a HintMetrics
b
fontOptionsGetHintMetrics :: MonadIO m => FontOptions -> m HintMetrics
fontOptionsGetHintMetrics :: forall (m :: * -> *). MonadIO m => FontOptions -> m HintMetrics
fontOptionsGetHintMetrics FontOptions
a = forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO 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 :: forall a.
Surface -> Content -> Int -> Int -> (Surface -> IO a) -> IO a
withSimilarSurface Surface
surface Content
contentType Int
width Int
height Surface -> IO a
f =
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' -> do Status
status <- Surface -> IO Status
Internal.surfaceStatus Surface
surface'
Surface -> IO ()
Internal.surfaceDestroy Surface
surface'
forall (f :: * -> *). Applicative f => Bool -> f () -> f ()
unless (Status
status forall a. Eq a => a -> a -> Bool
== Status
StatusSuccess) forall a b. (a -> b) -> a -> b
$
Status -> IO String
Internal.statusToString Status
status forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= forall (m :: * -> *) a. MonadFail m => String -> m a
fail)
(\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 Content
contentType Int
width 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
forall (m :: * -> *) a. Monad m => a -> m a
return Surface
surface
renderWithSimilarSurface ::
Content
-> Int
-> Int
-> (Surface -> Render a)
-> Render a
renderWithSimilarSurface :: forall a.
Content -> Int -> Int -> (Surface -> Render a) -> Render a
renderWithSimilarSurface Content
contentType Int
width Int
height Surface -> Render a
render =
forall a. (Surface -> Render a) -> Render a
withTargetSurface forall a b. (a -> b) -> a -> b
$ \Surface
surface ->
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' -> do Status
status <- Surface -> IO Status
Internal.surfaceStatus Surface
surface'
Surface -> IO ()
Internal.surfaceDestroy Surface
surface'
forall (f :: * -> *). Applicative f => Bool -> f () -> f ()
unless (Status
status forall a. Eq a => a -> a -> Bool
== Status
StatusSuccess) forall a b. (a -> b) -> a -> b
$
Status -> IO String
Internal.statusToString Status
status forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= forall (m :: * -> *) a. MonadFail m => String -> m a
fail)
(\Surface
surface' -> Surface -> Render a
render Surface
surface')
surfaceFinish :: MonadIO m => Surface -> m ()
surfaceFinish :: forall (m :: * -> *). MonadIO m => Surface -> m ()
surfaceFinish Surface
surface = forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO forall a b. (a -> b) -> a -> b
$ do
Status
status <- Surface -> IO Status
Internal.surfaceStatus Surface
surface
Surface -> IO ()
Internal.surfaceFinish Surface
surface
forall (f :: * -> *). Applicative f => Bool -> f () -> f ()
unless (Status
status forall a. Eq a => a -> a -> Bool
== Status
StatusSuccess) forall a b. (a -> b) -> a -> b
$
Status -> IO String
Internal.statusToString Status
status forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= forall (m :: * -> *) a. MonadFail m => String -> m a
fail
surfaceFlush :: MonadIO m => Surface -> m ()
surfaceFlush :: forall (m :: * -> *). MonadIO m => Surface -> m ()
surfaceFlush Surface
a = forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO forall a b. (a -> b) -> a -> b
$ Surface -> IO ()
Internal.surfaceFlush Surface
a
surfaceGetFontOptions :: Surface -> Render FontOptions
surfaceGetFontOptions :: Surface -> Render FontOptions
surfaceGetFontOptions Surface
surface = do
FontOptions
fontOptions <- forall (m :: * -> *). MonadIO m => m FontOptions
fontOptionsCreate
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO forall a b. (a -> b) -> a -> b
$ Surface -> FontOptions -> IO ()
Internal.surfaceGetFontOptions Surface
surface FontOptions
fontOptions
forall (m :: * -> *) a. Monad m => a -> m a
return FontOptions
fontOptions
surfaceMarkDirty :: MonadIO m => Surface -> m ()
surfaceMarkDirty :: forall (m :: * -> *). MonadIO m => Surface -> m ()
surfaceMarkDirty Surface
a = forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO forall a b. (a -> b) -> a -> b
$ Surface -> IO ()
Internal.surfaceMarkDirty Surface
a
surfaceMarkDirtyRectangle ::
MonadIO m =>
Surface
-> Int
-> Int
-> Int
-> Int
-> m ()
surfaceMarkDirtyRectangle :: forall (m :: * -> *).
MonadIO m =>
Surface -> Int -> Int -> Int -> Int -> m ()
surfaceMarkDirtyRectangle Surface
a Int
b Int
c Int
d Int
e = forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO 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 :: forall (m :: * -> *).
MonadIO m =>
Surface -> Double -> Double -> m ()
surfaceSetDeviceOffset Surface
a Double
b Double
c = forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO 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 :: forall a. Format -> Int -> Int -> (Surface -> IO a) -> IO a
withImageSurface Format
format Int
width Int
height Surface -> IO a
f =
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 -> do Status
status <- Surface -> IO Status
Internal.surfaceStatus Surface
surface
Surface -> IO ()
Internal.surfaceDestroy Surface
surface
forall (f :: * -> *). Applicative f => Bool -> f () -> f ()
unless (Status
status forall a. Eq a => a -> a -> Bool
== Status
StatusSuccess) forall a b. (a -> b) -> a -> b
$
Status -> IO String
Internal.statusToString Status
status forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= forall (m :: * -> *) a. MonadFail m => String -> m a
fail)
(\Surface
surface -> Surface -> IO a
f Surface
surface)
createImageSurface ::
Format
-> Int
-> Int
-> IO Surface
createImageSurface :: Format -> Int -> Int -> IO Surface
createImageSurface Format
format Int
width Int
height = do
Surface
surface <- Format -> Int -> Int -> IO Surface
Internal.imageSurfaceCreate Format
format Int
width Int
height
Surface -> IO ()
Internal.manageSurface Surface
surface
forall (m :: * -> *) a. Monad m => a -> m a
return Surface
surface
withImageSurfaceForData ::
PixelData
-> Format
-> Int
-> Int
-> Int
-> (Surface -> IO a)
-> IO a
withImageSurfaceForData :: forall a.
PixelData
-> Format -> Int -> Int -> Int -> (Surface -> IO a) -> IO a
withImageSurfaceForData PixelData
pixels Format
format Int
width Int
height Int
stride Surface -> IO a
f =
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 -> do Status
status <- Surface -> IO Status
Internal.surfaceStatus Surface
surface
Surface -> IO ()
Internal.surfaceDestroy Surface
surface
forall (f :: * -> *). Applicative f => Bool -> f () -> f ()
unless (Status
status forall a. Eq a => a -> a -> Bool
== Status
StatusSuccess) forall a b. (a -> b) -> a -> b
$
Status -> IO String
Internal.statusToString Status
status forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= forall (m :: * -> *) a. MonadFail m => String -> m a
fail)
(\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 PixelData
pixels Format
format Int
width Int
height 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
forall (m :: * -> *) a. Monad m => a -> m a
return Surface
surface
imageSurfaceGetWidth :: MonadIO m => Surface -> m Int
imageSurfaceGetWidth :: forall (m :: * -> *). MonadIO m => Surface -> m Int
imageSurfaceGetWidth Surface
a = forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO forall a b. (a -> b) -> a -> b
$ Surface -> IO Int
Internal.imageSurfaceGetWidth Surface
a
imageSurfaceGetHeight :: MonadIO m => Surface -> m Int
imageSurfaceGetHeight :: forall (m :: * -> *). MonadIO m => Surface -> m Int
imageSurfaceGetHeight Surface
a = forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO 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 :: forall (m :: * -> *). MonadIO m => Surface -> m Int
imageSurfaceGetStride = forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO forall b c a. (b -> c) -> (a -> b) -> a -> c
. Surface -> IO Int
Internal.imageSurfaceGetStride
imageSurfaceGetFormat :: MonadIO m => Surface -> m Format
imageSurfaceGetFormat :: forall (m :: * -> *). MonadIO m => Surface -> m Format
imageSurfaceGetFormat Surface
a = forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO 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 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 (forall a b. Ptr a -> Ptr b
castPtr PixelData
ptr, Int
height forall a. Num a => a -> a -> a
* Int
stride)
#endif
#endif
imageSurfaceGetPixels :: Storable e => Surface -> IO (SurfaceData Int e)
imageSurfaceGetPixels :: forall e. Storable e => Surface -> IO (SurfaceData Int e)
imageSurfaceGetPixels Surface
pb = do
PixelData
pixPtr <- Surface -> IO PixelData
Internal.imageSurfaceGetData Surface
pb
forall (f :: * -> *). Applicative f => Bool -> f () -> f ()
when (PixelData
pixPtrforall a. Eq a => a -> a -> Bool
==forall a. Ptr a
nullPtr) forall a b. (a -> b) -> a -> b
$ do
forall (m :: * -> *) a. MonadFail m => String -> m a
fail String
"imageSurfaceGetPixels: image surface not available"
Int
h <- forall (m :: * -> *). MonadIO m => Surface -> m Int
imageSurfaceGetHeight Surface
pb
Int
r <- forall (m :: * -> *). MonadIO m => Surface -> m Int
imageSurfaceGetStride Surface
pb
forall (m :: * -> *) a. Monad m => a -> m a
return (forall e.
Storable e =>
Surface -> Ptr e -> Int -> SurfaceData Int e
mkSurfaceData Surface
pb (forall a b. Ptr a -> Ptr b
castPtr PixelData
pixPtr) (Int
hforall 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 :: forall e.
Storable e =>
Surface -> Ptr e -> Int -> SurfaceData Int e
mkSurfaceData Surface
pb (Ptr e
ptr :: Ptr e) Int
size =
forall i e. Surface -> Ptr e -> (i, i) -> Int -> SurfaceData i e
SurfaceData Surface
pb Ptr e
ptr (Int
0, Int
countforall a. Num a => a -> a -> a
-Int
1) Int
count
where count :: Int
count = forall a b. (Integral a, Num b) => a -> b
fromIntegral (Int
size forall a. Integral a => a -> a -> a
`div` forall a. Storable a => a -> Int
sizeOf (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 :: forall i. Ix i => (i, i) -> e -> IO (SurfaceData i e)
newArray (i
l,i
u) e
e = forall a. HasCallStack => String -> a
error String
"Graphics.Rendering.Cairo.newArray: not implemented"
newArray_ :: forall i. Ix i => (i, i) -> IO (SurfaceData i e)
newArray_ (i
l,i
u) = forall a. HasCallStack => String -> a
error String
"Graphics.Rendering.Cairo.newArray_: not implemented"
{-# INLINE unsafeRead #-}
unsafeRead :: forall i. Ix i => SurfaceData i e -> Int -> IO e
unsafeRead (SurfaceData (Surface ForeignPtr Surface
pb) Ptr e
pixPtr (i, i)
_ Int
_) Int
idx = do
e
e <- forall a. Storable a => Ptr a -> Int -> IO a
peekElemOff Ptr e
pixPtr Int
idx
forall a. ForeignPtr a -> IO ()
touchForeignPtr ForeignPtr Surface
pb
forall (m :: * -> *) a. Monad m => a -> m a
return e
e
{-# INLINE unsafeWrite #-}
unsafeWrite :: forall i. Ix i => SurfaceData i e -> Int -> e -> IO ()
unsafeWrite (SurfaceData (Surface ForeignPtr Surface
pb) Ptr e
pixPtr (i, i)
_ Int
_) Int
idx e
elem = do
forall a. Storable a => Ptr a -> Int -> a -> IO ()
pokeElemOff Ptr e
pixPtr Int
idx e
elem
forall a. ForeignPtr a -> IO ()
touchForeignPtr ForeignPtr Surface
pb
#if __GLASGOW_HASKELL__ >= 605
{-# INLINE getBounds #-}
getBounds :: forall i. Ix i => SurfaceData i e -> IO (i, i)
getBounds (SurfaceData Surface
_ Ptr e
_ (i, i)
bd Int
_) = forall (m :: * -> *) a. Monad m => a -> m a
return (i, i)
bd
#endif
#if __GLASGOW_HASKELL__ >= 608
{-# INLINE getNumElements #-}
getNumElements :: forall i. Ix i => SurfaceData i e -> IO Int
getNumElements (SurfaceData Surface
_ Ptr e
_ (i, i)
_ Int
count) = 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 :: forall a. String -> Double -> Double -> (Surface -> IO a) -> IO a
withPDFSurface String
filename Double
width Double
height 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
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 :: forall (m :: * -> *).
MonadIO m =>
Surface -> Double -> Double -> m ()
pdfSurfaceSetSize Surface
s Double
x Double
y = forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO 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 :: forall a. String -> (Surface -> IO a) -> IO a
withImageSurfaceFromPNG String
filename Surface -> IO a
f =
forall a b c. IO a -> (a -> IO b) -> (a -> IO c) -> IO c
bracket (String -> IO Surface
Internal.imageSurfaceCreateFromPNG String
filename)
(\Surface
surface -> do Status
status <- Surface -> IO Status
Internal.surfaceStatus Surface
surface
Surface -> IO ()
Internal.surfaceDestroy Surface
surface
forall (f :: * -> *). Applicative f => Bool -> f () -> f ()
unless (Status
status forall a. Eq a => a -> a -> Bool
== Status
StatusSuccess) forall a b. (a -> b) -> a -> b
$
Status -> IO String
Internal.statusToString Status
status forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= forall (m :: * -> *) a. MonadFail m => String -> m a
fail)
(\Surface
surface -> Surface -> IO a
f Surface
surface)
surfaceWriteToPNG ::
Surface
-> FilePath
-> IO ()
surfaceWriteToPNG :: Surface -> String -> IO ()
surfaceWriteToPNG Surface
surface String
filename = do
Status
status <- Surface -> String -> IO Status
Internal.surfaceWriteToPNG Surface
surface String
filename
forall (f :: * -> *). Applicative f => Bool -> f () -> f ()
unless (Status
status forall a. Eq a => a -> a -> Bool
== Status
StatusSuccess) forall a b. (a -> b) -> a -> b
$
forall (m :: * -> *) a. MonadFail m => String -> m a
fail forall (m :: * -> *) a b. Monad m => (a -> m b) -> m a -> m b
=<< Status -> IO String
Internal.statusToString Status
status
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 :: forall a. String -> Double -> Double -> (Surface -> IO a) -> IO a
withPSSurface String
filename Double
width Double
height Surface -> IO a
f =
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 -> do Status
status <- Surface -> IO Status
Internal.surfaceStatus Surface
surface
Surface -> IO ()
Internal.surfaceDestroy Surface
surface
forall (f :: * -> *). Applicative f => Bool -> f () -> f ()
unless (Status
status forall a. Eq a => a -> a -> Bool
== Status
StatusSuccess) forall a b. (a -> b) -> a -> b
$
Status -> IO String
Internal.statusToString Status
status forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= forall (m :: * -> *) a. MonadFail m => String -> m a
fail)
(\Surface
surface -> Surface -> IO a
f Surface
surface)
#if CAIRO_CHECK_VERSION(1,2,0)
psSurfaceSetSize :: MonadIO m => Surface -> Double -> Double -> m ()
psSurfaceSetSize :: forall (m :: * -> *).
MonadIO m =>
Surface -> Double -> Double -> m ()
psSurfaceSetSize Surface
s Double
x Double
y = forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO 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 :: forall a. String -> Double -> Double -> (Surface -> IO a) -> IO a
withSVGSurface String
filename Double
width Double
height Surface -> IO a
f =
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 -> do Status
status <- Surface -> IO Status
Internal.surfaceStatus Surface
surface
Surface -> IO ()
Internal.surfaceDestroy Surface
surface
forall (f :: * -> *). Applicative f => Bool -> f () -> f ()
unless (Status
status forall a. Eq a => a -> a -> Bool
== Status
StatusSuccess) forall a b. (a -> b) -> a -> b
$
Status -> IO String
Internal.statusToString Status
status forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= forall (m :: * -> *) a. MonadFail m => String -> m a
fail)
(\Surface
surface -> Surface -> IO a
f Surface
surface)
#endif
#if CAIRO_CHECK_VERSION(1,10,0)
regionCreate :: MonadIO m => m Region
regionCreate :: forall (m :: * -> *). MonadIO m => m Region
regionCreate = forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO forall a b. (a -> b) -> a -> b
$ IO Region
Internal.regionCreate
regionCreateRectangle ::
MonadIO m =>
RectangleInt
-> m Region
regionCreateRectangle :: forall (m :: * -> *). MonadIO m => RectangleInt -> m Region
regionCreateRectangle RectangleInt
a = forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO forall a b. (a -> b) -> a -> b
$ RectangleInt -> IO Region
Internal.regionCreateRectangle RectangleInt
a
regionCreateRectangles ::
MonadIO m =>
[RectangleInt]
-> m Region
regionCreateRectangles :: forall (m :: * -> *). MonadIO m => [RectangleInt] -> m Region
regionCreateRectangles [RectangleInt]
a = forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO forall a b. (a -> b) -> a -> b
$ [RectangleInt] -> IO Region
Internal.regionCreateRectangles [RectangleInt]
a
regionCopy ::
MonadIO m =>
Region
-> m Region
regionCopy :: forall (m :: * -> *). MonadIO m => Region -> m Region
regionCopy Region
a = forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO forall a b. (a -> b) -> a -> b
$ Region -> IO Region
Internal.regionCopy Region
a
regionGetExtents ::
MonadIO m =>
Region
-> m RectangleInt
regionGetExtents :: forall (m :: * -> *). MonadIO m => Region -> m RectangleInt
regionGetExtents Region
a = forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO forall a b. (a -> b) -> a -> b
$ Region -> IO RectangleInt
Internal.regionGetExtents Region
a
regionNumRectangles ::
MonadIO m =>
Region
-> m Int
regionNumRectangles :: forall (m :: * -> *). MonadIO m => Region -> m Int
regionNumRectangles Region
a = forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO forall a b. (a -> b) -> a -> b
$ Region -> IO Int
Internal.regionNumRectangles Region
a
regionGetRectangle ::
MonadIO m =>
Region
-> Int
-> m RectangleInt
regionGetRectangle :: forall (m :: * -> *). MonadIO m => Region -> Int -> m RectangleInt
regionGetRectangle Region
a Int
n = forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO forall a b. (a -> b) -> a -> b
$ Region -> Int -> IO RectangleInt
Internal.regionGetRectangle Region
a Int
n
regionIsEmpty ::
MonadIO m =>
Region
-> m Bool
regionIsEmpty :: forall (m :: * -> *). MonadIO m => Region -> m Bool
regionIsEmpty Region
a = forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO forall a b. (a -> b) -> a -> b
$ Region -> IO Bool
Internal.regionIsEmpty Region
a
regionContainsPoint ::
MonadIO m =>
Region
-> Int
-> Int
-> m Bool
regionContainsPoint :: forall (m :: * -> *). MonadIO m => Region -> Int -> Int -> m Bool
regionContainsPoint Region
a Int
x Int
y = forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO 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 :: forall (m :: * -> *).
MonadIO m =>
Region -> RectangleInt -> m RegionOverlap
regionContainsRectangle Region
a RectangleInt
rect = forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO 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 :: forall (m :: * -> *). MonadIO m => Region -> Region -> m Bool
regionEqual Region
a Region
b = forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO 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 :: forall (m :: * -> *). MonadIO m => Region -> Int -> Int -> m ()
regionTranslate Region
a Int
dx Int
dy = forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO 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 :: forall (m :: * -> *). MonadIO m => Region -> Region -> m ()
regionIntersect Region
a Region
b = forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO forall a b. (a -> b) -> a -> b
$ do
Status
status <- Region -> Region -> IO Status
Internal.regionIntersect Region
a Region
b
forall (f :: * -> *). Applicative f => Bool -> f () -> f ()
unless (Status
status forall a. Eq a => a -> a -> Bool
== Status
StatusSuccess) forall a b. (a -> b) -> a -> b
$
Status -> IO String
Internal.statusToString Status
status forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= forall (m :: * -> *) a. MonadFail m => String -> m a
fail
regionIntersectRectangle ::
MonadIO m =>
Region
-> RectangleInt
-> m ()
regionIntersectRectangle :: forall (m :: * -> *). MonadIO m => Region -> RectangleInt -> m ()
regionIntersectRectangle Region
a RectangleInt
rect = forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO forall a b. (a -> b) -> a -> b
$ do
Status
status <- Region -> RectangleInt -> IO Status
Internal.regionIntersectRectangle Region
a RectangleInt
rect
forall (f :: * -> *). Applicative f => Bool -> f () -> f ()
unless (Status
status forall a. Eq a => a -> a -> Bool
== Status
StatusSuccess) forall a b. (a -> b) -> a -> b
$
Status -> IO String
Internal.statusToString Status
status forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= forall (m :: * -> *) a. MonadFail m => String -> m a
fail
regionSubtract ::
MonadIO m =>
Region
-> Region
-> m ()
regionSubtract :: forall (m :: * -> *). MonadIO m => Region -> Region -> m ()
regionSubtract Region
a Region
b = forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO forall a b. (a -> b) -> a -> b
$ do
Status
status <- Region -> Region -> IO Status
Internal.regionSubtract Region
a Region
b
forall (f :: * -> *). Applicative f => Bool -> f () -> f ()
unless (Status
status forall a. Eq a => a -> a -> Bool
== Status
StatusSuccess) forall a b. (a -> b) -> a -> b
$
Status -> IO String
Internal.statusToString Status
status forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= forall (m :: * -> *) a. MonadFail m => String -> m a
fail
regionSubtractRectangle ::
MonadIO m =>
Region
-> RectangleInt
-> m ()
regionSubtractRectangle :: forall (m :: * -> *). MonadIO m => Region -> RectangleInt -> m ()
regionSubtractRectangle Region
a RectangleInt
rect = forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO forall a b. (a -> b) -> a -> b
$ do
Status
status <- Region -> RectangleInt -> IO Status
Internal.regionSubtractRectangle Region
a RectangleInt
rect
forall (f :: * -> *). Applicative f => Bool -> f () -> f ()
unless (Status
status forall a. Eq a => a -> a -> Bool
== Status
StatusSuccess) forall a b. (a -> b) -> a -> b
$
Status -> IO String
Internal.statusToString Status
status forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= forall (m :: * -> *) a. MonadFail m => String -> m a
fail
regionUnion ::
MonadIO m =>
Region
-> Region
-> m ()
regionUnion :: forall (m :: * -> *). MonadIO m => Region -> Region -> m ()
regionUnion Region
a Region
b = forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO forall a b. (a -> b) -> a -> b
$ do
Status
status <- Region -> Region -> IO Status
Internal.regionUnion Region
a Region
b
forall (f :: * -> *). Applicative f => Bool -> f () -> f ()
unless (Status
status forall a. Eq a => a -> a -> Bool
== Status
StatusSuccess) forall a b. (a -> b) -> a -> b
$
Status -> IO String
Internal.statusToString Status
status forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= forall (m :: * -> *) a. MonadFail m => String -> m a
fail
regionUnionRectangle ::
MonadIO m =>
Region
-> RectangleInt
-> m ()
regionUnionRectangle :: forall (m :: * -> *). MonadIO m => Region -> RectangleInt -> m ()
regionUnionRectangle Region
a RectangleInt
rect = forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO forall a b. (a -> b) -> a -> b
$ do
Status
status <- Region -> RectangleInt -> IO Status
Internal.regionUnionRectangle Region
a RectangleInt
rect
forall (f :: * -> *). Applicative f => Bool -> f () -> f ()
unless (Status
status forall a. Eq a => a -> a -> Bool
== Status
StatusSuccess) forall a b. (a -> b) -> a -> b
$
Status -> IO String
Internal.statusToString Status
status forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= forall (m :: * -> *) a. MonadFail m => String -> m a
fail
regionXor ::
MonadIO m =>
Region
-> Region
-> m ()
regionXor :: forall (m :: * -> *). MonadIO m => Region -> Region -> m ()
regionXor Region
a Region
b = forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO forall a b. (a -> b) -> a -> b
$ do
Status
status <- Region -> Region -> IO Status
Internal.regionXor Region
a Region
b
forall (f :: * -> *). Applicative f => Bool -> f () -> f ()
unless (Status
status forall a. Eq a => a -> a -> Bool
== Status
StatusSuccess) forall a b. (a -> b) -> a -> b
$
Status -> IO String
Internal.statusToString Status
status forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= forall (m :: * -> *) a. MonadFail m => String -> m a
fail
regionXorRectangle ::
MonadIO m =>
Region
-> RectangleInt
-> m ()
regionXorRectangle :: forall (m :: * -> *). MonadIO m => Region -> RectangleInt -> m ()
regionXorRectangle Region
a RectangleInt
rect = forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO forall a b. (a -> b) -> a -> b
$ do
Status
status <- Region -> RectangleInt -> IO Status
Internal.regionXorRectangle Region
a RectangleInt
rect
forall (f :: * -> *). Applicative f => Bool -> f () -> f ()
unless (Status
status forall a. Eq a => a -> a -> Bool
== Status
StatusSuccess) forall a b. (a -> b) -> a -> b
$
Status -> IO String
Internal.statusToString Status
status forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= 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