{-# 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 = 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
>>= \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 :: forall a b. (Cairo -> a -> IO b) -> a -> Render b
liftRender1 Cairo -> a -> IO b
f 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
>>= \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 :: forall a b c. (Cairo -> a -> b -> IO c) -> a -> b -> Render c
liftRender2 Cairo -> a -> b -> IO c
f a
a 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
>>= \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 :: 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 = 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
>>= \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 :: 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 = 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
>>= \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 :: 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 = 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
>>= \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 :: 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 = 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
>>= \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 :: forall (m :: * -> *) a. MonadIO m => Surface -> Render a -> m a
renderWith Surface
surface (Render 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 (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
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)
(\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 :: forall a. (Surface -> Render a) -> Render a
withTargetSurface 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 :: forall string. CairoString string => 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
copyPath :: Render Path
copyPath :: Render Path
copyPath = (Cairo -> IO Path) -> Render Path
forall a. (Cairo -> IO a) -> Render a
liftRender0 Cairo -> IO Path
Internal.copyPath
copyPathFlat :: Render Path
copyPathFlat :: Render Path
copyPathFlat = (Cairo -> IO Path) -> Render Path
forall a. (Cairo -> IO a) -> Render a
liftRender0 Cairo -> IO Path
Internal.copyPathFlat
appendPath :: Path
-> Render ()
appendPath :: Path -> Render ()
appendPath = (Cairo -> Path -> IO ()) -> Path -> Render ()
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 = (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.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 = IO Pattern -> m Pattern
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO(IO Pattern -> m Pattern) -> IO Pattern -> m Pattern
forall 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 = IO Pattern -> m Pattern
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO(IO Pattern -> m Pattern) -> IO Pattern -> m Pattern
forall 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 = IO Pattern -> m Pattern
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO(IO Pattern -> m Pattern) -> IO Pattern -> m Pattern
forall 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 = IO Pattern -> m Pattern
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO(IO Pattern -> m Pattern) -> IO Pattern -> m Pattern
forall 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 =
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 -> do Status
status <- Pattern -> IO Status
Internal.patternStatus 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 -> 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 =
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 -> do Status
status <- Pattern -> IO Status
Internal.patternStatus 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 -> 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 =
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 -> do Status
status <- Pattern -> IO Status
Internal.patternStatus 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 -> 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 <- 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 -> do Status
status <- Pattern -> IO Status
Internal.patternStatus 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 :: forall a.
Double
-> Double -> Double -> Double -> (Pattern -> Render a) -> Render a
withLinearPattern Double
x0 Double
y0 Double
x1 Double
y1 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 -> do Status
status <- Pattern -> IO Status
Internal.patternStatus 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 -> 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 =
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 -> do Status
status <- Pattern -> IO Status
Internal.patternStatus 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 -> 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 = 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 :: forall (m :: * -> *).
MonadIO m =>
Pattern -> Double -> Double -> Double -> Double -> Double -> m ()
patternAddColorStopRGBA Pattern
p Double
offset Double
r Double
g Double
b 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 :: forall (m :: * -> *). MonadIO m => Pattern -> Matrix -> m ()
patternSetMatrix Pattern
p 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 :: forall (m :: * -> *). MonadIO m => Pattern -> m Matrix
patternGetMatrix 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 :: forall (m :: * -> *). MonadIO m => Pattern -> Extend -> m ()
patternSetExtend Pattern
p 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 :: forall (m :: * -> *). MonadIO m => Pattern -> m Extend
patternGetExtend 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 :: forall (m :: * -> *). MonadIO m => Pattern -> Filter -> m ()
patternSetFilter Pattern
p 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 :: forall (m :: * -> *). MonadIO m => Pattern -> m Filter
patternGetFilter 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
#if CAIRO_CHECK_VERSION(1,12,0)
createMeshPattern ::
MonadIO m =>
m Pattern
createMeshPattern :: forall (m :: * -> *). MonadIO m => m Pattern
createMeshPattern = IO Pattern -> m Pattern
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO(IO Pattern -> m Pattern) -> IO Pattern -> m Pattern
forall 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
Pattern -> m ()
forall (m :: * -> *). MonadIO m => Pattern -> m ()
meshPatternBeginPatch Pattern
pat
(PathElement -> m ()) -> Path -> m ()
forall (t :: * -> *) (m :: * -> *) a b.
(Foldable t, Monad m) =>
(a -> m b) -> t a -> m ()
mapM_ (IO () -> m ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> m ()) -> (PathElement -> IO ()) -> PathElement -> m ()
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Pattern -> PathElement -> IO ()
Internal.convertPathElement Pattern
pat) (Int -> Path -> Path
forall a. Int -> [a] -> [a]
take Int
4 Path
elems)
[m ()] -> m ()
forall (t :: * -> *) (m :: * -> *) a.
(Foldable t, Monad m) =>
t (m a) -> m ()
sequence_ ([m ()] -> m ()) -> [m ()] -> m ()
forall a b. (a -> b) -> a -> b
$ ((Double, Double) -> Int -> m ())
-> [(Double, Double)] -> [Int] -> [m ()]
forall a b c. (a -> b -> c) -> [a] -> [b] -> [c]
zipWith (\(Double
x,Double
y) Int
n -> Pattern -> Int -> Double -> Double -> m ()
forall (m :: * -> *).
MonadIO m =>
Pattern -> Int -> Double -> Double -> m ()
meshPatternSetControlPoint Pattern
pat Int
n Double
x Double
y) (Int -> [(Double, Double)] -> [(Double, Double)]
forall a. Int -> [a] -> [a]
take Int
4 [(Double, Double)]
controlPoints) [Int
0..Int
3]
[m ()] -> m ()
forall (t :: * -> *) (m :: * -> *) a.
(Foldable t, Monad m) =>
t (m a) -> m ()
sequence_ ([m ()] -> m ()) -> [m ()] -> m ()
forall a b. (a -> b) -> a -> b
$ ((Double, Double, Double) -> Int -> m ())
-> [(Double, Double, Double)] -> [Int] -> [m ()]
forall a b c. (a -> b -> c) -> [a] -> [b] -> [c]
zipWith (\(Double
r,Double
g,Double
b) Int
n -> Pattern -> Int -> Double -> Double -> Double -> m ()
forall (m :: * -> *).
MonadIO m =>
Pattern -> Int -> Double -> Double -> Double -> m ()
meshPatternSetCornerColorRGB Pattern
pat Int
n Double
r Double
g Double
b) (Int -> [(Double, Double, Double)] -> [(Double, Double, Double)]
forall a. Int -> [a] -> [a]
take Int
4 [(Double, Double, Double)]
colors) [Int
0..Int
3]
Pattern -> m ()
forall (m :: * -> *). MonadIO m => Pattern -> m ()
meshPatternEndPatch Pattern
pat
IO Status -> m Status
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO(IO Status -> m Status) -> IO Status -> m Status
forall 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
Pattern -> m ()
forall (m :: * -> *). MonadIO m => Pattern -> m ()
meshPatternBeginPatch Pattern
pat
(PathElement -> m ()) -> Path -> m ()
forall (t :: * -> *) (m :: * -> *) a b.
(Foldable t, Monad m) =>
(a -> m b) -> t a -> m ()
mapM_ (IO () -> m ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> m ()) -> (PathElement -> IO ()) -> PathElement -> m ()
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Pattern -> PathElement -> IO ()
Internal.convertPathElement Pattern
pat) (Int -> Path -> Path
forall a. Int -> [a] -> [a]
take Int
4 Path
elems)
[m ()] -> m ()
forall (t :: * -> *) (m :: * -> *) a.
(Foldable t, Monad m) =>
t (m a) -> m ()
sequence_ ([m ()] -> m ()) -> [m ()] -> m ()
forall a b. (a -> b) -> a -> b
$ ((Double, Double) -> Int -> m ())
-> [(Double, Double)] -> [Int] -> [m ()]
forall a b c. (a -> b -> c) -> [a] -> [b] -> [c]
zipWith (\(Double
x,Double
y) Int
n -> Pattern -> Int -> Double -> Double -> m ()
forall (m :: * -> *).
MonadIO m =>
Pattern -> Int -> Double -> Double -> m ()
meshPatternSetControlPoint Pattern
pat Int
n Double
x Double
y) (Int -> [(Double, Double)] -> [(Double, Double)]
forall a. Int -> [a] -> [a]
take Int
4 [(Double, Double)]
controlPoints) [Int
0..Int
3]
[m ()] -> m ()
forall (t :: * -> *) (m :: * -> *) a.
(Foldable t, Monad m) =>
t (m a) -> m ()
sequence_ ([m ()] -> m ()) -> [m ()] -> m ()
forall a b. (a -> b) -> a -> b
$ ((Double, Double, Double, Double) -> Int -> m ())
-> [(Double, Double, Double, Double)] -> [Int] -> [m ()]
forall a b c. (a -> b -> c) -> [a] -> [b] -> [c]
zipWith (\(Double
r,Double
g,Double
b,Double
a) Int
n -> Pattern -> Int -> Double -> Double -> Double -> Double -> m ()
forall (m :: * -> *).
MonadIO m =>
Pattern -> Int -> Double -> Double -> Double -> Double -> m ()
meshPatternSetCornerColorRGBA Pattern
pat Int
n Double
r Double
g Double
b Double
a) (Int
-> [(Double, Double, Double, Double)]
-> [(Double, Double, Double, Double)]
forall a. Int -> [a] -> [a]
take Int
4 [(Double, Double, Double, Double)]
colors) [Int
0..Int
3]
Pattern -> m ()
forall (m :: * -> *). MonadIO m => Pattern -> m ()
meshPatternEndPatch Pattern
pat
IO Status -> m Status
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO(IO Status -> m Status) -> IO Status -> m Status
forall 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 = IO () -> m ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO(IO () -> m ()) -> IO () -> m ()
forall 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 = IO () -> m ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO(IO () -> m ()) -> IO () -> m ()
forall 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 = 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 -> 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 = 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 -> 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 = 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
-> 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 = IO () -> m ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO(IO () -> m ()) -> IO () -> m ()
forall 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 = IO () -> m ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO(IO () -> m ()) -> IO () -> m ()
forall 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 = IO () -> m ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO(IO () -> m ()) -> IO () -> m ()
forall 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 = IO (Status, Int) -> m (Status, Int)
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO(IO (Status, Int) -> m (Status, Int))
-> IO (Status, Int) -> m (Status, Int)
forall 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 = IO Path -> m Path
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO(IO Path -> m Path) -> IO Path -> m Path
forall 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 = IO (Status, Double, Double) -> m (Status, Double, Double)
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO(IO (Status, Double, Double) -> m (Status, Double, Double))
-> IO (Status, Double, Double) -> m (Status, Double, Double)
forall 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 = IO (Status, Double, Double, Double, Double)
-> m (Status, Double, Double, Double, Double)
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO(IO (Status, Double, Double, Double, Double)
-> m (Status, Double, Double, Double, Double))
-> IO (Status, Double, Double, Double, Double)
-> m (Status, Double, Double, Double, Double)
forall 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 = (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 :: forall string.
CairoString string =>
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 :: forall string. CairoString string => 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 :: forall string. CairoString string => 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 :: forall (m :: * -> *). MonadIO m => 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 :: forall (m :: * -> *). MonadIO m => FontOptions -> m FontOptions
fontOptionsCopy 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 :: forall (m :: * -> *).
MonadIO m =>
FontOptions -> FontOptions -> m ()
fontOptionsMerge FontOptions
a 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 :: forall (m :: * -> *). MonadIO m => FontOptions -> m Int
fontOptionsHash 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 :: forall (m :: * -> *).
MonadIO m =>
FontOptions -> FontOptions -> m Bool
fontOptionsEqual FontOptions
a 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 :: forall (m :: * -> *). MonadIO m => FontOptions -> Antialias -> m ()
fontOptionsSetAntialias FontOptions
a 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 :: forall (m :: * -> *). MonadIO m => FontOptions -> m Antialias
fontOptionsGetAntialias 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 :: forall (m :: * -> *).
MonadIO m =>
FontOptions -> SubpixelOrder -> m ()
fontOptionsSetSubpixelOrder FontOptions
a 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 :: forall (m :: * -> *). MonadIO m => FontOptions -> m SubpixelOrder
fontOptionsGetSubpixelOrder 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 :: forall (m :: * -> *). MonadIO m => FontOptions -> HintStyle -> m ()
fontOptionsSetHintStyle FontOptions
a 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 :: forall (m :: * -> *). MonadIO m => FontOptions -> m HintStyle
fontOptionsGetHintStyle 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 :: forall (m :: * -> *).
MonadIO m =>
FontOptions -> HintMetrics -> m ()
fontOptionsSetHintMetrics FontOptions
a 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 :: forall (m :: * -> *). MonadIO m => FontOptions -> m HintMetrics
fontOptionsGetHintMetrics 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 :: forall a.
Surface -> Content -> Int -> Int -> (Surface -> IO a) -> IO a
withSimilarSurface Surface
surface Content
contentType Int
width Int
height 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' -> 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 -> 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
Surface -> IO 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 =
(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 ->
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' -> 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 -> Render a
render Surface
surface')
surfaceFinish :: MonadIO m => Surface -> m ()
surfaceFinish :: forall (m :: * -> *). MonadIO m => Surface -> m ()
surfaceFinish 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 :: forall (m :: * -> *). MonadIO m => Surface -> m ()
surfaceFlush 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 = 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 :: forall (m :: * -> *). MonadIO m => Surface -> m ()
surfaceMarkDirty 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 :: forall (m :: * -> *).
MonadIO m =>
Surface -> Int -> Int -> Int -> Int -> m ()
surfaceMarkDirtyRectangle Surface
a Int
b Int
c Int
d 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 :: forall (m :: * -> *).
MonadIO m =>
Surface -> Double -> Double -> m ()
surfaceSetDeviceOffset Surface
a Double
b 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 :: forall a. Format -> Int -> Int -> (Surface -> IO a) -> IO a
withImageSurface Format
format Int
width Int
height 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 -> 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 -> 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
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 :: 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 =
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 -> 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 -> 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
Surface -> IO 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 = 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 :: forall (m :: * -> *). MonadIO m => Surface -> m Int
imageSurfaceGetHeight 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 :: forall (m :: * -> *). MonadIO m => 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 :: forall (m :: * -> *). MonadIO m => Surface -> m Format
imageSurfaceGetFormat 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 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 :: forall e. Storable e => Surface -> IO (SurfaceData Int e)
imageSurfaceGetPixels 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 String
"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 :: forall e.
Storable e =>
Surface -> Ptr e -> Int -> SurfaceData Int e
mkSurfaceData Surface
pb (Ptr e
ptr :: Ptr e) 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 (Int
0, Int
countInt -> Int -> Int
forall a. Num a => a -> a -> a
-Int
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 :: forall i. Ix i => (i, i) -> e -> IO (SurfaceData i e)
newArray (i
l,i
u) e
e = String -> IO (SurfaceData i 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) = String -> IO (SurfaceData i e)
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 <- 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 :: 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
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 :: forall i. Ix i => SurfaceData i e -> IO (i, i)
getBounds (SurfaceData Surface
_ Ptr e
_ (i, i)
bd Int
_) = (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 :: forall i. Ix i => SurfaceData i e -> IO Int
getNumElements (SurfaceData Surface
_ Ptr e
_ (i, i)
_ 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 :: 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
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 :: forall (m :: * -> *).
MonadIO m =>
Surface -> Double -> Double -> m ()
pdfSurfaceSetSize Surface
s Double
x 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 :: forall a. String -> (Surface -> IO a) -> IO a
withImageSurfaceFromPNG String
filename 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 -> 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 -> 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
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 :: forall a. String -> Double -> Double -> (Surface -> IO a) -> IO a
withPSSurface String
filename Double
width Double
height 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 -> 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 -> 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 = 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 :: forall a. String -> Double -> Double -> (Surface -> IO a) -> IO a
withSVGSurface String
filename Double
width Double
height 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 -> 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 -> 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 = 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 :: forall (m :: * -> *). MonadIO m => RectangleInt -> m Region
regionCreateRectangle 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 :: forall (m :: * -> *). MonadIO m => [RectangleInt] -> m Region
regionCreateRectangles [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 :: forall (m :: * -> *). MonadIO m => Region -> m Region
regionCopy 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 :: forall (m :: * -> *). MonadIO m => Region -> m RectangleInt
regionGetExtents 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 :: forall (m :: * -> *). MonadIO m => Region -> m Int
regionNumRectangles 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 :: forall (m :: * -> *). MonadIO m => Region -> Int -> m RectangleInt
regionGetRectangle Region
a 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 :: forall (m :: * -> *). MonadIO m => Region -> m Bool
regionIsEmpty 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 :: forall (m :: * -> *). MonadIO m => Region -> Int -> Int -> m Bool
regionContainsPoint Region
a Int
x 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 :: forall (m :: * -> *).
MonadIO m =>
Region -> RectangleInt -> m RegionOverlap
regionContainsRectangle Region
a 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 :: forall (m :: * -> *). MonadIO m => Region -> Region -> m Bool
regionEqual Region
a 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 :: forall (m :: * -> *). MonadIO m => Region -> Int -> Int -> m ()
regionTranslate Region
a Int
dx 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 :: forall (m :: * -> *). MonadIO m => Region -> Region -> m ()
regionIntersect Region
a 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 :: forall (m :: * -> *). MonadIO m => Region -> RectangleInt -> m ()
regionIntersectRectangle Region
a 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 :: forall (m :: * -> *). MonadIO m => Region -> Region -> m ()
regionSubtract Region
a 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 :: forall (m :: * -> *). MonadIO m => Region -> RectangleInt -> m ()
regionSubtractRectangle Region
a 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 :: forall (m :: * -> *). MonadIO m => Region -> Region -> m ()
regionUnion Region
a 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 :: forall (m :: * -> *). MonadIO m => Region -> RectangleInt -> m ()
regionUnionRectangle Region
a 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 :: forall (m :: * -> *). MonadIO m => Region -> Region -> m ()
regionXor Region
a 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 :: forall (m :: * -> *). MonadIO m => Region -> RectangleInt -> m ()
regionXorRectangle Region
a 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