    -- 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/Paths.chs" #-}
    -----------------------------------------------------------------------------
    -- |
    -- Module      :  Graphics.Rendering.Cairo.Internal.Drawing.Paths
    -- Copyright   :  (c) Paolo Martini 2005
    -- License     :  BSD-style (see cairo/COPYRIGHT)
    --
    -- Maintainer  :  p.martini@neuralnoise.com
    -- Stability   :  experimental
    -- Portability :  portable
    --
    -- Creating paths and manipulating path data.
    -----------------------------------------------------------------------------

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

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

    import Foreign
    import Foreign.C

    import Graphics.Rendering.Cairo.Internal.Utilities (withUTFString)

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

    getCurrentPoint :: Cairo -> IO (Double, Double)
    getCurrentPoint a1 =
      let {a1' = unCairo a1} in
      alloca $ \a2' ->
      alloca $ \a3' ->
      getCurrentPoint'_ a1' a2' a3' >>= \res ->
      peekFloatConv a2'>>= \a2'' ->
      peekFloatConv a3'>>= \a3'' ->
      return (a2'', a3'')
    {-# LINE 25 "./Graphics/Rendering/Cairo/Internal/Drawing/Paths.chs" #-}
    newPath :: Cairo -> IO ()
    newPath a1 =
      let {a1' = unCairo a1} in
      newPath'_ a1' >>= \res ->
      return ()
    {-# LINE 26 "./Graphics/Rendering/Cairo/Internal/Drawing/Paths.chs" #-}
    closePath :: Cairo -> IO ()
    closePath a1 =
      let {a1' = unCairo a1} in
      closePath'_ a1' >>= \res ->
      return ()
    {-# LINE 27 "./Graphics/Rendering/Cairo/Internal/Drawing/Paths.chs" #-}
    arc :: Cairo -> Double -> Double -> Double -> Double -> Double -> IO ()
    arc a1 a2 a3 a4 a5 a6 =
      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
      let {a6' = cFloatConv a6} in
      arc'_ a1' a2' a3' a4' a5' a6' >>= \res ->
      return ()
    {-# LINE 28 "./Graphics/Rendering/Cairo/Internal/Drawing/Paths.chs" #-}
    arcNegative :: Cairo -> Double -> Double -> Double -> Double -> Double -> IO ()
    arcNegative a1 a2 a3 a4 a5 a6 =
      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
      let {a6' = cFloatConv a6} in
      arcNegative'_ a1' a2' a3' a4' a5' a6' >>= \res ->
      return ()
    {-# LINE 29 "./Graphics/Rendering/Cairo/Internal/Drawing/Paths.chs" #-}
    curveTo :: Cairo -> Double -> Double -> Double -> Double -> Double -> Double -> IO ()
    curveTo a1 a2 a3 a4 a5 a6 a7 =
      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
      let {a6' = cFloatConv a6} in
      let {a7' = cFloatConv a7} in
      curveTo'_ a1' a2' a3' a4' a5' a6' a7' >>= \res ->
      return ()
    {-# LINE 30 "./Graphics/Rendering/Cairo/Internal/Drawing/Paths.chs" #-}
    lineTo :: Cairo -> Double -> Double -> IO ()
    lineTo a1 a2 a3 =
      let {a1' = unCairo a1} in
      let {a2' = cFloatConv a2} in
      let {a3' = cFloatConv a3} in
      lineTo'_ a1' a2' a3' >>= \res ->
      return ()
    {-# LINE 31 "./Graphics/Rendering/Cairo/Internal/Drawing/Paths.chs" #-}
    moveTo :: Cairo -> Double -> Double -> IO ()
    moveTo a1 a2 a3 =
      let {a1' = unCairo a1} in
      let {a2' = cFloatConv a2} in
      let {a3' = cFloatConv a3} in
      moveTo'_ a1' a2' a3' >>= \res ->
      return ()
    {-# LINE 32 "./Graphics/Rendering/Cairo/Internal/Drawing/Paths.chs" #-}
    rectangle :: Cairo -> Double -> Double -> Double -> Double -> IO ()
    rectangle 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
      rectangle'_ a1' a2' a3' a4' a5' >>= \res ->
      return ()
    {-# LINE 33 "./Graphics/Rendering/Cairo/Internal/Drawing/Paths.chs" #-}
    textPath :: Cairo -> String -> IO ()
    textPath a1 a2 =
      let {a1' = unCairo a1} in
      withUTFString a2 $ \a2' ->
      textPath'_ a1' a2' >>= \res ->
      return ()
    {-# LINE 34 "./Graphics/Rendering/Cairo/Internal/Drawing/Paths.chs" #-}
    relCurveTo :: Cairo -> Double -> Double -> Double -> Double -> Double -> Double -> IO ()
    relCurveTo a1 a2 a3 a4 a5 a6 a7 =
      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
      let {a6' = cFloatConv a6} in
      let {a7' = cFloatConv a7} in
      relCurveTo'_ a1' a2' a3' a4' a5' a6' a7' >>= \res ->
      return ()
    {-# LINE 35 "./Graphics/Rendering/Cairo/Internal/Drawing/Paths.chs" #-}
    relLineTo :: Cairo -> Double -> Double -> IO ()
    relLineTo a1 a2 a3 =
      let {a1' = unCairo a1} in
      let {a2' = cFloatConv a2} in
      let {a3' = cFloatConv a3} in
      relLineTo'_ a1' a2' a3' >>= \res ->
      return ()
    {-# LINE 36 "./Graphics/Rendering/Cairo/Internal/Drawing/Paths.chs" #-}
    relMoveTo :: Cairo -> Double -> Double -> IO ()
    relMoveTo a1 a2 a3 =
      let {a1' = unCairo a1} in
      let {a2' = cFloatConv a2} in
      let {a3' = cFloatConv a3} in
      relMoveTo'_ a1' a2' a3' >>= \res ->
      return ()
    {-# LINE 37 "./Graphics/Rendering/Cairo/Internal/Drawing/Paths.chs" #-}

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

    foreign import ccall safe "cairo_new_path"
      newPath'_ :: ((Ptr Cairo) -> (IO ()))

    foreign import ccall safe "cairo_close_path"
      closePath'_ :: ((Ptr Cairo) -> (IO ()))

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

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

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

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

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

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

    foreign import ccall safe "cairo_text_path"
      textPath'_ :: ((Ptr Cairo) -> ((Ptr CChar) -> (IO ())))

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

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

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