    -- GENERATED by C->Haskell Compiler, version 0.13.5 (gtk2hs branch) "Bin IO", 13 Nov 2004 (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 ->
      let {res' = Pattern res} in
      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
      let {a2' = unPattern a2} in
      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 ->
      let {res' = Pattern res} in
      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" #-}
    fill :: Cairo -> IO ()
    fill a1 =
      let {a1' = unCairo a1} in
      fill'_ a1' >>= \res ->
      return ()
    {-# LINE 60 "./Graphics/Rendering/Cairo/Internal/Drawing/Cairo.chs" #-}
    fillPreserve :: Cairo -> IO ()
    fillPreserve a1 =
      let {a1' = unCairo a1} in
      fillPreserve'_ a1' >>= \res ->
      return ()
    {-# LINE 61 "./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 62 "./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 63 "./Graphics/Rendering/Cairo/Internal/Drawing/Cairo.chs" #-}
    mask :: Cairo -> Pattern -> IO ()
    mask a1 a2 =
      let {a1' = unCairo a1} in
      let {a2' = unPattern a2} in
      mask'_ a1' a2' >>= \res ->
      return ()
    {-# LINE 64 "./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 65 "./Graphics/Rendering/Cairo/Internal/Drawing/Cairo.chs" #-}
    paint :: Cairo -> IO ()
    paint a1 =
      let {a1' = unCairo a1} in
      paint'_ a1' >>= \res ->
      return ()
    {-# LINE 66 "./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 67 "./Graphics/Rendering/Cairo/Internal/Drawing/Cairo.chs" #-}
    stroke :: Cairo -> IO ()
    stroke a1 =
      let {a1' = unCairo a1} in
      stroke'_ a1' >>= \res ->
      return ()
    {-# LINE 68 "./Graphics/Rendering/Cairo/Internal/Drawing/Cairo.chs" #-}
    strokePreserve :: Cairo -> IO ()
    strokePreserve a1 =
      let {a1' = unCairo a1} in
      strokePreserve'_ a1' >>= \res ->
      return ()
    {-# LINE 69 "./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 70 "./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 71 "./Graphics/Rendering/Cairo/Internal/Drawing/Cairo.chs" #-}
    copyPage :: Cairo -> IO ()
    copyPage a1 =
      let {a1' = unCairo a1} in
      copyPage'_ a1' >>= \res ->
      return ()
    {-# LINE 72 "./Graphics/Rendering/Cairo/Internal/Drawing/Cairo.chs" #-}
    showPage :: Cairo -> IO ()
    showPage a1 =
      let {a1' = unCairo a1} in
      showPage'_ a1' >>= \res ->
      return ()
    {-# LINE 73 "./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_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 ()))