-- GENERATED by C->Haskell Compiler, version 0.13.13 (gtk2hs branch) "Bin IO", 27 May 2012 (Haskell)
-- Edit the ORIGNAL .chs file instead!


{-# LINE 1 "./Graphics/Rendering/Cairo/Internal/Drawing/Cairo.chs" #-}
-----------------------------------------------------------------------------
-- |
-- Module      :  Graphics.Rendering.Cairo.Internal.Drawing.Cairo
-- Copyright   :  (c) Paolo Martini 2005
-- License     :  BSD-style (see cairo/COPYRIGHT)
--
-- Maintainer  :  p.martini@neuralnoise.com
-- Stability   :  experimental
-- Portability :  portable
--
-- The cairo drawing context functions.
-----------------------------------------------------------------------------

module Graphics.Rendering.Cairo.Internal.Drawing.Cairo where

import Graphics.Rendering.Cairo.Types
{-# LINE 16 "./Graphics/Rendering/Cairo/Internal/Drawing/Cairo.chs" #-}

import Foreign
import Foreign.C


{-# LINE 21 "./Graphics/Rendering/Cairo/Internal/Drawing/Cairo.chs" #-}

create :: Surface -> IO (Cairo)
create a1 =
  withSurface a1 $ \a1' -> 
  create'_ a1' >>= \res ->
  let {res' = Cairo res} in
  return (res')
{-# LINE 23 "./Graphics/Rendering/Cairo/Internal/Drawing/Cairo.chs" #-}
reference :: Cairo -> IO ()
reference a1 =
  let {a1' = unCairo a1} in 
  reference'_ a1' >>= \res ->
  return ()
{-# LINE 24 "./Graphics/Rendering/Cairo/Internal/Drawing/Cairo.chs" #-}
destroy :: Cairo -> IO ()
destroy a1 =
  let {a1' = unCairo a1} in 
  destroy'_ a1' >>= \res ->
  return ()
{-# LINE 25 "./Graphics/Rendering/Cairo/Internal/Drawing/Cairo.chs" #-}
save :: Cairo -> IO ()
save a1 =
  let {a1' = unCairo a1} in 
  save'_ a1' >>= \res ->
  return ()
{-# LINE 26 "./Graphics/Rendering/Cairo/Internal/Drawing/Cairo.chs" #-}
restore :: Cairo -> IO ()
restore a1 =
  let {a1' = unCairo a1} in 
  restore'_ a1' >>= \res ->
  return ()
{-# LINE 27 "./Graphics/Rendering/Cairo/Internal/Drawing/Cairo.chs" #-}
status :: Cairo -> IO (Status)
status a1 =
  let {a1' = unCairo a1} in 
  status'_ a1' >>= \res ->
  let {res' = cToEnum res} in
  return (res')
{-# LINE 28 "./Graphics/Rendering/Cairo/Internal/Drawing/Cairo.chs" #-}
getTarget :: Cairo -> IO (Surface)
getTarget a1 =
  let {a1' = unCairo a1} in 
  getTarget'_ a1' >>= \res ->
  mkSurface res >>= \res' ->
  return (res')
{-# LINE 29 "./Graphics/Rendering/Cairo/Internal/Drawing/Cairo.chs" #-}
pushGroup :: Cairo -> IO ()
pushGroup a1 =
  let {a1' = unCairo a1} in 
  pushGroup'_ a1' >>= \res ->
  return ()
{-# LINE 30 "./Graphics/Rendering/Cairo/Internal/Drawing/Cairo.chs" #-}
pushGroupWithContent :: Cairo -> Content -> IO ()
pushGroupWithContent a1 a2 =
  let {a1' = unCairo a1} in 
  let {a2' = cFromEnum a2} in 
  pushGroupWithContent'_ a1' a2' >>= \res ->
  return ()
{-# LINE 31 "./Graphics/Rendering/Cairo/Internal/Drawing/Cairo.chs" #-}
popGroup :: Cairo -> IO (Pattern)
popGroup a1 =
  let {a1' = unCairo a1} in 
  popGroup'_ a1' >>= \res ->
  mkPattern res >>= \res' ->
  return (res')
{-# LINE 32 "./Graphics/Rendering/Cairo/Internal/Drawing/Cairo.chs" #-}
popGroupToSource :: Cairo -> IO ()
popGroupToSource a1 =
  let {a1' = unCairo a1} in 
  popGroupToSource'_ a1' >>= \res ->
  return ()
{-# LINE 33 "./Graphics/Rendering/Cairo/Internal/Drawing/Cairo.chs" #-}
setSourceRGB :: Cairo -> Double -> Double -> Double -> IO ()
setSourceRGB a1 a2 a3 a4 =
  let {a1' = unCairo a1} in 
  let {a2' = cFloatConv a2} in 
  let {a3' = cFloatConv a3} in 
  let {a4' = cFloatConv a4} in 
  setSourceRGB'_ a1' a2' a3' a4' >>= \res ->
  return ()
{-# LINE 34 "./Graphics/Rendering/Cairo/Internal/Drawing/Cairo.chs" #-}
setSourceRGBA :: Cairo -> Double -> Double -> Double -> Double -> IO ()
setSourceRGBA a1 a2 a3 a4 a5 =
  let {a1' = unCairo a1} in 
  let {a2' = cFloatConv a2} in 
  let {a3' = cFloatConv a3} in 
  let {a4' = cFloatConv a4} in 
  let {a5' = cFloatConv a5} in 
  setSourceRGBA'_ a1' a2' a3' a4' a5' >>= \res ->
  return ()
{-# LINE 35 "./Graphics/Rendering/Cairo/Internal/Drawing/Cairo.chs" #-}
setSource :: Cairo -> Pattern -> IO ()
setSource a1 a2 =
  let {a1' = unCairo a1} in 
  withPattern a2 $ \a2' -> 
  setSource'_ a1' a2' >>= \res ->
  return ()
{-# LINE 36 "./Graphics/Rendering/Cairo/Internal/Drawing/Cairo.chs" #-}
setSourceSurface :: Cairo -> Surface -> Double -> Double -> IO ()
setSourceSurface a1 a2 a3 a4 =
  let {a1' = unCairo a1} in 
  withSurface a2 $ \a2' -> 
  let {a3' = cFloatConv a3} in 
  let {a4' = cFloatConv a4} in 
  setSourceSurface'_ a1' a2' a3' a4' >>= \res ->
  return ()
{-# LINE 37 "./Graphics/Rendering/Cairo/Internal/Drawing/Cairo.chs" #-}
getSource :: Cairo -> IO (Pattern)
getSource a1 =
  let {a1' = unCairo a1} in 
  getSource'_ a1' >>= \res ->
  clonePattern res >>= \res' ->
  return (res')
{-# LINE 38 "./Graphics/Rendering/Cairo/Internal/Drawing/Cairo.chs" #-}
setAntialias :: Cairo -> Antialias -> IO ()
setAntialias a1 a2 =
  let {a1' = unCairo a1} in 
  let {a2' = cFromEnum a2} in 
  setAntialias'_ a1' a2' >>= \res ->
  return ()
{-# LINE 39 "./Graphics/Rendering/Cairo/Internal/Drawing/Cairo.chs" #-}
getAntialias :: Cairo -> IO (Antialias)
getAntialias a1 =
  let {a1' = unCairo a1} in 
  getAntialias'_ a1' >>= \res ->
  let {res' = cToEnum res} in
  return (res')
{-# LINE 40 "./Graphics/Rendering/Cairo/Internal/Drawing/Cairo.chs" #-}
setDash context xs offset = withArrayLen (map (cFloatConv) xs) $ \len ptr ->
  (\(Cairo arg1) arg2 arg3 arg4 -> cairo_set_dash arg1 arg2 arg3 arg4) context ptr (cIntConv len) (cFloatConv offset)
setFillRule :: Cairo -> FillRule -> IO ()
setFillRule a1 a2 =
  let {a1' = unCairo a1} in 
  let {a2' = cFromEnum a2} in 
  setFillRule'_ a1' a2' >>= \res ->
  return ()
{-# LINE 43 "./Graphics/Rendering/Cairo/Internal/Drawing/Cairo.chs" #-}
getFillRule :: Cairo -> IO (FillRule)
getFillRule a1 =
  let {a1' = unCairo a1} in 
  getFillRule'_ a1' >>= \res ->
  let {res' = cToEnum res} in
  return (res')
{-# LINE 44 "./Graphics/Rendering/Cairo/Internal/Drawing/Cairo.chs" #-}
setLineCap :: Cairo -> LineCap -> IO ()
setLineCap a1 a2 =
  let {a1' = unCairo a1} in 
  let {a2' = cFromEnum a2} in 
  setLineCap'_ a1' a2' >>= \res ->
  return ()
{-# LINE 45 "./Graphics/Rendering/Cairo/Internal/Drawing/Cairo.chs" #-}
getLineCap :: Cairo -> IO (LineCap)
getLineCap a1 =
  let {a1' = unCairo a1} in 
  getLineCap'_ a1' >>= \res ->
  let {res' = cToEnum res} in
  return (res')
{-# LINE 46 "./Graphics/Rendering/Cairo/Internal/Drawing/Cairo.chs" #-}
setLineJoin :: Cairo -> LineJoin -> IO ()
setLineJoin a1 a2 =
  let {a1' = unCairo a1} in 
  let {a2' = cFromEnum a2} in 
  setLineJoin'_ a1' a2' >>= \res ->
  return ()
{-# LINE 47 "./Graphics/Rendering/Cairo/Internal/Drawing/Cairo.chs" #-}
getLineJoin :: Cairo -> IO (LineJoin)
getLineJoin a1 =
  let {a1' = unCairo a1} in 
  getLineJoin'_ a1' >>= \res ->
  let {res' = cToEnum res} in
  return (res')
{-# LINE 48 "./Graphics/Rendering/Cairo/Internal/Drawing/Cairo.chs" #-}
setLineWidth :: Cairo -> Double -> IO ()
setLineWidth a1 a2 =
  let {a1' = unCairo a1} in 
  let {a2' = cFloatConv a2} in 
  setLineWidth'_ a1' a2' >>= \res ->
  return ()
{-# LINE 49 "./Graphics/Rendering/Cairo/Internal/Drawing/Cairo.chs" #-}
getLineWidth :: Cairo -> IO (Double)
getLineWidth a1 =
  let {a1' = unCairo a1} in 
  getLineWidth'_ a1' >>= \res ->
  let {res' = cFloatConv res} in
  return (res')
{-# LINE 50 "./Graphics/Rendering/Cairo/Internal/Drawing/Cairo.chs" #-}
setMiterLimit :: Cairo -> Double -> IO ()
setMiterLimit a1 a2 =
  let {a1' = unCairo a1} in 
  let {a2' = cFloatConv a2} in 
  setMiterLimit'_ a1' a2' >>= \res ->
  return ()
{-# LINE 51 "./Graphics/Rendering/Cairo/Internal/Drawing/Cairo.chs" #-}
getMiterLimit :: Cairo -> IO (Double)
getMiterLimit a1 =
  let {a1' = unCairo a1} in 
  getMiterLimit'_ a1' >>= \res ->
  let {res' = cFloatConv res} in
  return (res')
{-# LINE 52 "./Graphics/Rendering/Cairo/Internal/Drawing/Cairo.chs" #-}
setOperator :: Cairo -> Operator -> IO ()
setOperator a1 a2 =
  let {a1' = unCairo a1} in 
  let {a2' = cFromEnum a2} in 
  setOperator'_ a1' a2' >>= \res ->
  return ()
{-# LINE 53 "./Graphics/Rendering/Cairo/Internal/Drawing/Cairo.chs" #-}
getOperator :: Cairo -> IO (Operator)
getOperator a1 =
  let {a1' = unCairo a1} in 
  getOperator'_ a1' >>= \res ->
  let {res' = cToEnum res} in
  return (res')
{-# LINE 54 "./Graphics/Rendering/Cairo/Internal/Drawing/Cairo.chs" #-}
setTolerance :: Cairo -> Double -> IO ()
setTolerance a1 a2 =
  let {a1' = unCairo a1} in 
  let {a2' = cFloatConv a2} in 
  setTolerance'_ a1' a2' >>= \res ->
  return ()
{-# LINE 55 "./Graphics/Rendering/Cairo/Internal/Drawing/Cairo.chs" #-}
getTolerance :: Cairo -> IO (Double)
getTolerance a1 =
  let {a1' = unCairo a1} in 
  getTolerance'_ a1' >>= \res ->
  let {res' = cFloatConv res} in
  return (res')
{-# LINE 56 "./Graphics/Rendering/Cairo/Internal/Drawing/Cairo.chs" #-}
clip :: Cairo -> IO ()
clip a1 =
  let {a1' = unCairo a1} in 
  clip'_ a1' >>= \res ->
  return ()
{-# LINE 57 "./Graphics/Rendering/Cairo/Internal/Drawing/Cairo.chs" #-}
clipPreserve :: Cairo -> IO ()
clipPreserve a1 =
  let {a1' = unCairo a1} in 
  clipPreserve'_ a1' >>= \res ->
  return ()
{-# LINE 58 "./Graphics/Rendering/Cairo/Internal/Drawing/Cairo.chs" #-}
resetClip :: Cairo -> IO ()
resetClip a1 =
  let {a1' = unCairo a1} in 
  resetClip'_ a1' >>= \res ->
  return ()
{-# LINE 59 "./Graphics/Rendering/Cairo/Internal/Drawing/Cairo.chs" #-}
clipExtents :: Cairo -> IO (Double, Double, Double, Double)
clipExtents a1 =
  let {a1' = unCairo a1} in 
  alloca $ \a2' -> 
  alloca $ \a3' -> 
  alloca $ \a4' -> 
  alloca $ \a5' -> 
  clipExtents'_ a1' a2' a3' a4' a5' >>= \res ->
  peekFloatConv a2'>>= \a2'' -> 
  peekFloatConv a3'>>= \a3'' -> 
  peekFloatConv a4'>>= \a4'' -> 
  peekFloatConv a5'>>= \a5'' -> 
  return (a2'', a3'', a4'', a5'')
{-# LINE 60 "./Graphics/Rendering/Cairo/Internal/Drawing/Cairo.chs" #-}
fill :: Cairo -> IO ()
fill a1 =
  let {a1' = unCairo a1} in 
  fill'_ a1' >>= \res ->
  return ()
{-# LINE 61 "./Graphics/Rendering/Cairo/Internal/Drawing/Cairo.chs" #-}
fillPreserve :: Cairo -> IO ()
fillPreserve a1 =
  let {a1' = unCairo a1} in 
  fillPreserve'_ a1' >>= \res ->
  return ()
{-# LINE 62 "./Graphics/Rendering/Cairo/Internal/Drawing/Cairo.chs" #-}
fillExtents :: Cairo -> IO (Double, Double, Double, Double)
fillExtents a1 =
  let {a1' = unCairo a1} in 
  alloca $ \a2' -> 
  alloca $ \a3' -> 
  alloca $ \a4' -> 
  alloca $ \a5' -> 
  fillExtents'_ a1' a2' a3' a4' a5' >>= \res ->
  peekFloatConv a2'>>= \a2'' -> 
  peekFloatConv a3'>>= \a3'' -> 
  peekFloatConv a4'>>= \a4'' -> 
  peekFloatConv a5'>>= \a5'' -> 
  return (a2'', a3'', a4'', a5'')
{-# LINE 63 "./Graphics/Rendering/Cairo/Internal/Drawing/Cairo.chs" #-}
inFill :: Cairo -> Double -> Double -> IO (Bool)
inFill a1 a2 a3 =
  let {a1' = unCairo a1} in 
  let {a2' = cFloatConv a2} in 
  let {a3' = cFloatConv a3} in 
  inFill'_ a1' a2' a3' >>= \res ->
  let {res' = cToBool res} in
  return (res')
{-# LINE 64 "./Graphics/Rendering/Cairo/Internal/Drawing/Cairo.chs" #-}
mask :: Cairo -> Pattern -> IO ()
mask a1 a2 =
  let {a1' = unCairo a1} in 
  withPattern a2 $ \a2' -> 
  mask'_ a1' a2' >>= \res ->
  return ()
{-# LINE 65 "./Graphics/Rendering/Cairo/Internal/Drawing/Cairo.chs" #-}
maskSurface :: Cairo -> Surface -> Double -> Double -> IO ()
maskSurface a1 a2 a3 a4 =
  let {a1' = unCairo a1} in 
  withSurface a2 $ \a2' -> 
  let {a3' = cFloatConv a3} in 
  let {a4' = cFloatConv a4} in 
  maskSurface'_ a1' a2' a3' a4' >>= \res ->
  return ()
{-# LINE 66 "./Graphics/Rendering/Cairo/Internal/Drawing/Cairo.chs" #-}
paint :: Cairo -> IO ()
paint a1 =
  let {a1' = unCairo a1} in 
  paint'_ a1' >>= \res ->
  return ()
{-# LINE 67 "./Graphics/Rendering/Cairo/Internal/Drawing/Cairo.chs" #-}
paintWithAlpha :: Cairo -> Double -> IO ()
paintWithAlpha a1 a2 =
  let {a1' = unCairo a1} in 
  let {a2' = cFloatConv a2} in 
  paintWithAlpha'_ a1' a2' >>= \res ->
  return ()
{-# LINE 68 "./Graphics/Rendering/Cairo/Internal/Drawing/Cairo.chs" #-}
stroke :: Cairo -> IO ()
stroke a1 =
  let {a1' = unCairo a1} in 
  stroke'_ a1' >>= \res ->
  return ()
{-# LINE 69 "./Graphics/Rendering/Cairo/Internal/Drawing/Cairo.chs" #-}
strokePreserve :: Cairo -> IO ()
strokePreserve a1 =
  let {a1' = unCairo a1} in 
  strokePreserve'_ a1' >>= \res ->
  return ()
{-# LINE 70 "./Graphics/Rendering/Cairo/Internal/Drawing/Cairo.chs" #-}
strokeExtents :: Cairo -> IO (Double, Double, Double, Double)
strokeExtents a1 =
  let {a1' = unCairo a1} in 
  alloca $ \a2' -> 
  alloca $ \a3' -> 
  alloca $ \a4' -> 
  alloca $ \a5' -> 
  strokeExtents'_ a1' a2' a3' a4' a5' >>= \res ->
  peekFloatConv a2'>>= \a2'' -> 
  peekFloatConv a3'>>= \a3'' -> 
  peekFloatConv a4'>>= \a4'' -> 
  peekFloatConv a5'>>= \a5'' -> 
  return (a2'', a3'', a4'', a5'')
{-# LINE 71 "./Graphics/Rendering/Cairo/Internal/Drawing/Cairo.chs" #-}
inStroke :: Cairo -> Double -> Double -> IO (Bool)
inStroke a1 a2 a3 =
  let {a1' = unCairo a1} in 
  let {a2' = cFloatConv a2} in 
  let {a3' = cFloatConv a3} in 
  inStroke'_ a1' a2' a3' >>= \res ->
  let {res' = cToBool res} in
  return (res')
{-# LINE 72 "./Graphics/Rendering/Cairo/Internal/Drawing/Cairo.chs" #-}
copyPage :: Cairo -> IO ()
copyPage a1 =
  let {a1' = unCairo a1} in 
  copyPage'_ a1' >>= \res ->
  return ()
{-# LINE 73 "./Graphics/Rendering/Cairo/Internal/Drawing/Cairo.chs" #-}
showPage :: Cairo -> IO ()
showPage a1 =
  let {a1' = unCairo a1} in 
  showPage'_ a1' >>= \res ->
  return ()
{-# LINE 74 "./Graphics/Rendering/Cairo/Internal/Drawing/Cairo.chs" #-}

foreign import ccall safe "cairo_create"
  create'_ :: ((Ptr Surface) -> (IO (Ptr Cairo)))

foreign import ccall safe "cairo_reference"
  reference'_ :: ((Ptr Cairo) -> (IO (Ptr Cairo)))

foreign import ccall safe "cairo_destroy"
  destroy'_ :: ((Ptr Cairo) -> (IO ()))

foreign import ccall safe "cairo_save"
  save'_ :: ((Ptr Cairo) -> (IO ()))

foreign import ccall safe "cairo_restore"
  restore'_ :: ((Ptr Cairo) -> (IO ()))

foreign import ccall safe "cairo_status"
  status'_ :: ((Ptr Cairo) -> (IO CInt))

foreign import ccall safe "cairo_get_target"
  getTarget'_ :: ((Ptr Cairo) -> (IO (Ptr Surface)))

foreign import ccall safe "cairo_push_group"
  pushGroup'_ :: ((Ptr Cairo) -> (IO ()))

foreign import ccall safe "cairo_push_group_with_content"
  pushGroupWithContent'_ :: ((Ptr Cairo) -> (CInt -> (IO ())))

foreign import ccall safe "cairo_pop_group"
  popGroup'_ :: ((Ptr Cairo) -> (IO (Ptr Pattern)))

foreign import ccall safe "cairo_pop_group_to_source"
  popGroupToSource'_ :: ((Ptr Cairo) -> (IO ()))

foreign import ccall safe "cairo_set_source_rgb"
  setSourceRGB'_ :: ((Ptr Cairo) -> (CDouble -> (CDouble -> (CDouble -> (IO ())))))

foreign import ccall safe "cairo_set_source_rgba"
  setSourceRGBA'_ :: ((Ptr Cairo) -> (CDouble -> (CDouble -> (CDouble -> (CDouble -> (IO ()))))))

foreign import ccall safe "cairo_set_source"
  setSource'_ :: ((Ptr Cairo) -> ((Ptr Pattern) -> (IO ())))

foreign import ccall safe "cairo_set_source_surface"
  setSourceSurface'_ :: ((Ptr Cairo) -> ((Ptr Surface) -> (CDouble -> (CDouble -> (IO ())))))

foreign import ccall safe "cairo_get_source"
  getSource'_ :: ((Ptr Cairo) -> (IO (Ptr Pattern)))

foreign import ccall safe "cairo_set_antialias"
  setAntialias'_ :: ((Ptr Cairo) -> (CInt -> (IO ())))

foreign import ccall safe "cairo_get_antialias"
  getAntialias'_ :: ((Ptr Cairo) -> (IO CInt))

foreign import ccall safe "cairo_set_dash"
  cairo_set_dash :: ((Ptr Cairo) -> ((Ptr CDouble) -> (CInt -> (CDouble -> (IO ())))))

foreign import ccall safe "cairo_set_fill_rule"
  setFillRule'_ :: ((Ptr Cairo) -> (CInt -> (IO ())))

foreign import ccall safe "cairo_get_fill_rule"
  getFillRule'_ :: ((Ptr Cairo) -> (IO CInt))

foreign import ccall safe "cairo_set_line_cap"
  setLineCap'_ :: ((Ptr Cairo) -> (CInt -> (IO ())))

foreign import ccall safe "cairo_get_line_cap"
  getLineCap'_ :: ((Ptr Cairo) -> (IO CInt))

foreign import ccall safe "cairo_set_line_join"
  setLineJoin'_ :: ((Ptr Cairo) -> (CInt -> (IO ())))

foreign import ccall safe "cairo_get_line_join"
  getLineJoin'_ :: ((Ptr Cairo) -> (IO CInt))

foreign import ccall safe "cairo_set_line_width"
  setLineWidth'_ :: ((Ptr Cairo) -> (CDouble -> (IO ())))

foreign import ccall safe "cairo_get_line_width"
  getLineWidth'_ :: ((Ptr Cairo) -> (IO CDouble))

foreign import ccall safe "cairo_set_miter_limit"
  setMiterLimit'_ :: ((Ptr Cairo) -> (CDouble -> (IO ())))

foreign import ccall safe "cairo_get_miter_limit"
  getMiterLimit'_ :: ((Ptr Cairo) -> (IO CDouble))

foreign import ccall safe "cairo_set_operator"
  setOperator'_ :: ((Ptr Cairo) -> (CInt -> (IO ())))

foreign import ccall safe "cairo_get_operator"
  getOperator'_ :: ((Ptr Cairo) -> (IO CInt))

foreign import ccall safe "cairo_set_tolerance"
  setTolerance'_ :: ((Ptr Cairo) -> (CDouble -> (IO ())))

foreign import ccall safe "cairo_get_tolerance"
  getTolerance'_ :: ((Ptr Cairo) -> (IO CDouble))

foreign import ccall safe "cairo_clip"
  clip'_ :: ((Ptr Cairo) -> (IO ()))

foreign import ccall safe "cairo_clip_preserve"
  clipPreserve'_ :: ((Ptr Cairo) -> (IO ()))

foreign import ccall safe "cairo_reset_clip"
  resetClip'_ :: ((Ptr Cairo) -> (IO ()))

foreign import ccall safe "cairo_clip_extents"
  clipExtents'_ :: ((Ptr Cairo) -> ((Ptr CDouble) -> ((Ptr CDouble) -> ((Ptr CDouble) -> ((Ptr CDouble) -> (IO ()))))))

foreign import ccall safe "cairo_fill"
  fill'_ :: ((Ptr Cairo) -> (IO ()))

foreign import ccall safe "cairo_fill_preserve"
  fillPreserve'_ :: ((Ptr Cairo) -> (IO ()))

foreign import ccall safe "cairo_fill_extents"
  fillExtents'_ :: ((Ptr Cairo) -> ((Ptr CDouble) -> ((Ptr CDouble) -> ((Ptr CDouble) -> ((Ptr CDouble) -> (IO ()))))))

foreign import ccall safe "cairo_in_fill"
  inFill'_ :: ((Ptr Cairo) -> (CDouble -> (CDouble -> (IO CInt))))

foreign import ccall safe "cairo_mask"
  mask'_ :: ((Ptr Cairo) -> ((Ptr Pattern) -> (IO ())))

foreign import ccall safe "cairo_mask_surface"
  maskSurface'_ :: ((Ptr Cairo) -> ((Ptr Surface) -> (CDouble -> (CDouble -> (IO ())))))

foreign import ccall safe "cairo_paint"
  paint'_ :: ((Ptr Cairo) -> (IO ()))

foreign import ccall safe "cairo_paint_with_alpha"
  paintWithAlpha'_ :: ((Ptr Cairo) -> (CDouble -> (IO ())))

foreign import ccall safe "cairo_stroke"
  stroke'_ :: ((Ptr Cairo) -> (IO ()))

foreign import ccall safe "cairo_stroke_preserve"
  strokePreserve'_ :: ((Ptr Cairo) -> (IO ()))

foreign import ccall safe "cairo_stroke_extents"
  strokeExtents'_ :: ((Ptr Cairo) -> ((Ptr CDouble) -> ((Ptr CDouble) -> ((Ptr CDouble) -> ((Ptr CDouble) -> (IO ()))))))

foreign import ccall safe "cairo_in_stroke"
  inStroke'_ :: ((Ptr Cairo) -> (CDouble -> (CDouble -> (IO CInt))))

foreign import ccall safe "cairo_copy_page"
  copyPage'_ :: ((Ptr Cairo) -> (IO ()))

foreign import ccall safe "cairo_show_page"
  showPage'_ :: ((Ptr Cairo) -> (IO ()))