-- 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/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 Data.Text

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


{-# LINE 24 "./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 26 "./Graphics/Rendering/Cairo/Internal/Drawing/Paths.chs" #-}
newPath :: Cairo -> IO ()
newPath a1 =
  let {a1' = unCairo a1} in 
  newPath'_ a1' >>= \res ->
  return ()
{-# LINE 27 "./Graphics/Rendering/Cairo/Internal/Drawing/Paths.chs" #-}
closePath :: Cairo -> IO ()
closePath a1 =
  let {a1' = unCairo a1} in 
  closePath'_ a1' >>= \res ->
  return ()
{-# LINE 28 "./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 29 "./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 30 "./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 31 "./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 32 "./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 33 "./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 34 "./Graphics/Rendering/Cairo/Internal/Drawing/Paths.chs" #-}
textPath :: CairoString string => Cairo -> string -> IO ()
textPath c string =
    withUTFString string $ \string' ->
    (\(Cairo arg1) arg2 -> cairo_text_path arg1 arg2)
{-# LINE 38 "./Graphics/Rendering/Cairo/Internal/Drawing/Paths.chs" #-}
        c string'
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 40 "./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 41 "./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 42 "./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"
  cairo_text_path :: ((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 ()))))