    -- 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/Region.chs" #-}
    -----------------------------------------------------------------------------
    -- |
    -- Module      :  Graphics.Rendering.Cairo.Internal.Region
    -- Copyright   :  (c) Hamish Mackenzie 2013
    -- License     :  BSD-style (see doc/COPYRIGHT)
    --
    -- Maintainer  :
    -- Stability   :  experimental
    -- Portability :  portable
    --
    -- Region functions.
    -----------------------------------------------------------------------------

    module Graphics.Rendering.Cairo.Internal.Region where

    import Graphics.Rendering.Cairo.Types
    {-# LINE 18 "./Graphics/Rendering/Cairo/Internal/Region.chs" #-}

    import Foreign
    import Foreign.C

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

    regionCreateRectangles :: [RectangleInt] -> IO Region
    regionCreateRectangles [RectangleInt]
    rects =
        [RectangleInt]
    -> (Int -> Ptr RectangleInt -> IO Region) -> IO Region
    forall a b. Storable a => [a] -> (Int -> Ptr a -> IO b) -> IO b
    withArrayLen [RectangleInt]
    rects ((Int -> Ptr RectangleInt -> IO Region) -> IO Region)
    -> (Int -> Ptr RectangleInt -> IO Region) -> IO Region
    forall a b. (a -> b) -> a -> b
    $ \ Int
    n Ptr RectangleInt
    ptr ->
            Ptr RectangleInt -> CInt -> IO (Ptr Region)
    cairo_region_create_rectangles Ptr RectangleInt
    ptr (Int -> CInt
    forall a b. (Integral a, Num b) => a -> b
    fromIntegral Int
    n) IO (Ptr Region) -> (Ptr Region -> IO Region) -> IO Region
    forall a b. IO a -> (a -> IO b) -> IO b
    forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
    >>= Ptr Region -> IO Region
    mkRegion

    regionCreate :: IO (Region)
    regionCreate :: IO Region
    regionCreate =
      IO (Ptr Region)
    regionCreate'_ IO (Ptr Region) -> (Ptr Region -> IO Region) -> IO Region
    forall a b. IO a -> (a -> IO b) -> IO b
    forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
    >>= \Ptr Region
    res ->
      Ptr Region -> IO Region
    mkRegion Ptr Region
    res IO Region -> (Region -> IO Region) -> IO Region
    forall a b. IO a -> (a -> IO b) -> IO b
    forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
    >>= \Region
    res' ->
      Region -> IO Region
    forall a. a -> IO a
    forall (m :: * -> *) a. Monad m => a -> m a
    return (Region
    res')
    {-# LINE 29 "./Graphics/Rendering/Cairo/Internal/Region.chs" #-}
    regionCreateRectangle :: RectangleInt -> IO (Region)
    regionCreateRectangle a1 =
      with a1 $ \a1' ->
      regionCreateRectangle'_ a1' >>= \res ->
      mkRegion res >>= \res' ->
      return (res')
    {-# LINE 30 "./Graphics/Rendering/Cairo/Internal/Region.chs" #-}
    regionCopy :: Region -> IO (Region)
    regionCopy a1 =
      withRegion a1 $ \a1' ->
      regionCopy'_ a1' >>= \res ->
      mkRegion res >>= \res' ->
      return (res')
    {-# LINE 31 "./Graphics/Rendering/Cairo/Internal/Region.chs" #-}
    regionDestroy :: Region -> IO ()
    regionDestroy a1 =
      withRegion a1 $ \a1' ->
      regionDestroy'_ a1' >>= \res ->
      return ()
    {-# LINE 32 "./Graphics/Rendering/Cairo/Internal/Region.chs" #-}
    regionReference :: Region -> IO ()
    regionReference a1 =
      withRegion a1 $ \a1' ->
      regionReference'_ a1' >>= \res ->
      return ()
    {-# LINE 33 "./Graphics/Rendering/Cairo/Internal/Region.chs" #-}
    regionStatus :: Region -> IO (Status)
    regionStatus a1 =
      withRegion a1 $ \a1' ->
      regionStatus'_ a1' >>= \res ->
      let {res' = cToEnum res} in
      return (res')
    {-# LINE 34 "./Graphics/Rendering/Cairo/Internal/Region.chs" #-}
    regionGetExtents :: Region -> IO (RectangleInt)
    regionGetExtents a1 =
      withRegion a1 $ \a1' ->
      alloca $ \a2' ->
      regionGetExtents'_ a1' a2' >>= \res ->
      peek a2'>>= \a2'' ->
      return (a2'')
    {-# LINE 35 "./Graphics/Rendering/Cairo/Internal/Region.chs" #-}
    regionNumRectangles :: Region -> IO (Int)
    regionNumRectangles a1 =
      withRegion a1 $ \a1' ->
      regionNumRectangles'_ a1' >>= \res ->
      let {res' = fromIntegral res} in
      return (res')
    {-# LINE 36 "./Graphics/Rendering/Cairo/Internal/Region.chs" #-}
    regionGetRectangle :: Region -> Int -> IO (RectangleInt)
    regionGetRectangle a1 a2 =
      withRegion a1 $ \a1' ->
      let {a2' = fromIntegral a2} in
      alloca $ \a3' ->
      regionGetRectangle'_ a1' a2' a3' >>= \res ->
      peek a3'>>= \a3'' ->
      return (a3'')
    {-# LINE 37 "./Graphics/Rendering/Cairo/Internal/Region.chs" #-}
    regionIsEmpty :: Region -> IO (Bool)
    regionIsEmpty a1 =
      withRegion a1 $ \a1' ->
      regionIsEmpty'_ a1' >>= \res ->
      let {res' = cToBool res} in
      return (res')
    {-# LINE 38 "./Graphics/Rendering/Cairo/Internal/Region.chs" #-}
    regionContainsPoint :: Region -> Int -> Int -> IO (Bool)
    regionContainsPoint a1 a2 a3 =
      withRegion a1 $ \a1' ->
      let {a2' = fromIntegral a2} in
      let {a3' = fromIntegral a3} in
      regionContainsPoint'_ a1' a2' a3' >>= \res ->
      let {res' = cToBool res} in
      return (res')
    {-# LINE 39 "./Graphics/Rendering/Cairo/Internal/Region.chs" #-}
    regionContainsRectangle :: Region -> RectangleInt -> IO (RegionOverlap)
    regionContainsRectangle a1 a2 =
      withRegion a1 $ \a1' ->
      with a2 $ \a2' ->
      regionContainsRectangle'_ a1' a2' >>= \res ->
      let {res' = cToEnum res} in
      return (res')
    {-# LINE 40 "./Graphics/Rendering/Cairo/Internal/Region.chs" #-}
    regionEqual :: Region -> Region -> IO (Bool)
    regionEqual a1 a2 =
      withRegion a1 $ \a1' ->
      withRegion a2 $ \a2' ->
      regionEqual'_ a1' a2' >>= \res ->
      let {res' = cToBool res} in
      return (res')
    {-# LINE 41 "./Graphics/Rendering/Cairo/Internal/Region.chs" #-}
    regionTranslate :: Region -> Int -> Int -> IO ()
    regionTranslate a1 a2 a3 =
      withRegion a1 $ \a1' ->
      let {a2' = fromIntegral a2} in
      let {a3' = fromIntegral a3} in
      regionTranslate'_ a1' a2' a3' >>= \res ->
      return ()
    {-# LINE 42 "./Graphics/Rendering/Cairo/Internal/Region.chs" #-}
    regionIntersect :: Region -> Region -> IO (Status)
    regionIntersect a1 a2 =
      withRegion a1 $ \a1' ->
      withRegion a2 $ \a2' ->
      regionIntersect'_ a1' a2' >>= \res ->
      let {res' = cToEnum res} in
      return (res')
    {-# LINE 43 "./Graphics/Rendering/Cairo/Internal/Region.chs" #-}
    regionIntersectRectangle :: Region -> RectangleInt -> IO (Status)
    regionIntersectRectangle a1 a2 =
      withRegion a1 $ \a1' ->
      with a2 $ \a2' ->
      regionIntersectRectangle'_ a1' a2' >>= \res ->
      let {res' = cToEnum res} in
      return (res')
    {-# LINE 44 "./Graphics/Rendering/Cairo/Internal/Region.chs" #-}
    regionSubtract :: Region -> Region -> IO (Status)
    regionSubtract a1 a2 =
      withRegion a1 $ \a1' ->
      withRegion a2 $ \a2' ->
      regionSubtract'_ a1' a2' >>= \res ->
      let {res' = cToEnum res} in
      return (res')
    {-# LINE 45 "./Graphics/Rendering/Cairo/Internal/Region.chs" #-}
    regionSubtractRectangle :: Region -> RectangleInt -> IO (Status)
    regionSubtractRectangle a1 a2 =
      withRegion a1 $ \a1' ->
      with a2 $ \a2' ->
      regionSubtractRectangle'_ a1' a2' >>= \res ->
      let {res' = cToEnum res} in
      return (res')
    {-# LINE 46 "./Graphics/Rendering/Cairo/Internal/Region.chs" #-}
    regionUnion :: Region -> Region -> IO (Status)
    regionUnion a1 a2 =
      withRegion a1 $ \a1' ->
      withRegion a2 $ \a2' ->
      regionUnion'_ a1' a2' >>= \res ->
      let {res' = cToEnum res} in
      return (res')
    {-# LINE 47 "./Graphics/Rendering/Cairo/Internal/Region.chs" #-}
    regionUnionRectangle :: Region -> RectangleInt -> IO (Status)
    regionUnionRectangle a1 a2 =
      withRegion a1 $ \a1' ->
      with a2 $ \a2' ->
      regionUnionRectangle'_ a1' a2' >>= \res ->
      let {res' = cToEnum res} in
      return (res')
    {-# LINE 48 "./Graphics/Rendering/Cairo/Internal/Region.chs" #-}
    regionXor :: Region -> Region -> IO (Status)
    regionXor a1 a2 =
      withRegion a1 $ \a1' ->
      withRegion a2 $ \a2' ->
      regionXor'_ a1' a2' >>= \res ->
      let {res' = cToEnum res} in
      return (res')
    {-# LINE 49 "./Graphics/Rendering/Cairo/Internal/Region.chs" #-}
    regionXorRectangle :: Region -> RectangleInt -> IO (Status)
    regionXorRectangle a1 a2 =
      withRegion a1 $ \a1' ->
      with a2 $ \a2' ->
      regionXorRectangle'_ a1' a2' >>= \res ->
      let {res' = cToEnum res} in
      return (res')
    {-# LINE 50 "./Graphics/Rendering/Cairo/Internal/Region.chs" #-}

    foreign import ccall safe "dist-ghc/build/Graphics/Rendering/Cairo/Internal/Region.h cairo_region_create_rectangles"
      cairo_region_create_rectangles :: ((Ptr RectangleInt) -> (CInt -> (IO (Ptr Region))))

    foreign import ccall safe "dist-ghc/build/Graphics/Rendering/Cairo/Internal/Region.h cairo_region_create"
      regionCreate'_ :: (IO (Ptr Region))

    foreign import ccall safe "dist-ghc/build/Graphics/Rendering/Cairo/Internal/Region.h cairo_region_create_rectangle"
      regionCreateRectangle'_ :: ((Ptr RectangleInt) -> (IO (Ptr Region)))

    foreign import ccall safe "dist-ghc/build/Graphics/Rendering/Cairo/Internal/Region.h cairo_region_copy"
      regionCopy'_ :: ((Ptr Region) -> (IO (Ptr Region)))

    foreign import ccall safe "dist-ghc/build/Graphics/Rendering/Cairo/Internal/Region.h cairo_region_destroy"
      regionDestroy'_ :: ((Ptr Region) -> (IO ()))

    foreign import ccall safe "dist-ghc/build/Graphics/Rendering/Cairo/Internal/Region.h cairo_region_reference"
      regionReference'_ :: ((Ptr Region) -> (IO (Ptr Region)))

    foreign import ccall safe "dist-ghc/build/Graphics/Rendering/Cairo/Internal/Region.h cairo_region_status"
      regionStatus'_ :: ((Ptr Region) -> (IO CInt))

    foreign import ccall safe "dist-ghc/build/Graphics/Rendering/Cairo/Internal/Region.h cairo_region_get_extents"
      regionGetExtents'_ :: ((Ptr Region) -> ((Ptr RectangleInt) -> (IO ())))

    foreign import ccall safe "dist-ghc/build/Graphics/Rendering/Cairo/Internal/Region.h cairo_region_num_rectangles"
      regionNumRectangles'_ :: ((Ptr Region) -> (IO CInt))

    foreign import ccall safe "dist-ghc/build/Graphics/Rendering/Cairo/Internal/Region.h cairo_region_get_rectangle"
      regionGetRectangle'_ :: ((Ptr Region) -> (CInt -> ((Ptr RectangleInt) -> (IO ()))))

    foreign import ccall safe "dist-ghc/build/Graphics/Rendering/Cairo/Internal/Region.h cairo_region_is_empty"
      regionIsEmpty'_ :: ((Ptr Region) -> (IO CInt))

    foreign import ccall safe "dist-ghc/build/Graphics/Rendering/Cairo/Internal/Region.h cairo_region_contains_point"
      regionContainsPoint'_ :: ((Ptr Region) -> (CInt -> (CInt -> (IO CInt))))

    foreign import ccall safe "dist-ghc/build/Graphics/Rendering/Cairo/Internal/Region.h cairo_region_contains_rectangle"
      regionContainsRectangle'_ :: ((Ptr Region) -> ((Ptr RectangleInt) -> (IO CInt)))

    foreign import ccall safe "dist-ghc/build/Graphics/Rendering/Cairo/Internal/Region.h cairo_region_equal"
      regionEqual'_ :: ((Ptr Region) -> ((Ptr Region) -> (IO CInt)))

    foreign import ccall safe "dist-ghc/build/Graphics/Rendering/Cairo/Internal/Region.h cairo_region_translate"
      regionTranslate'_ :: ((Ptr Region) -> (CInt -> (CInt -> (IO ()))))

    foreign import ccall safe "dist-ghc/build/Graphics/Rendering/Cairo/Internal/Region.h cairo_region_intersect"
      regionIntersect'_ :: ((Ptr Region) -> ((Ptr Region) -> (IO CInt)))

    foreign import ccall safe "dist-ghc/build/Graphics/Rendering/Cairo/Internal/Region.h cairo_region_intersect_rectangle"
      regionIntersectRectangle'_ :: ((Ptr Region) -> ((Ptr RectangleInt) -> (IO CInt)))

    foreign import ccall safe "dist-ghc/build/Graphics/Rendering/Cairo/Internal/Region.h cairo_region_subtract"
      regionSubtract'_ :: ((Ptr Region) -> ((Ptr Region) -> (IO CInt)))

    foreign import ccall safe "dist-ghc/build/Graphics/Rendering/Cairo/Internal/Region.h cairo_region_subtract_rectangle"
      regionSubtractRectangle'_ :: ((Ptr Region) -> ((Ptr RectangleInt) -> (IO CInt)))

    foreign import ccall safe "dist-ghc/build/Graphics/Rendering/Cairo/Internal/Region.h cairo_region_union"
      regionUnion'_ :: ((Ptr Region) -> ((Ptr Region) -> (IO CInt)))

    foreign import ccall safe "dist-ghc/build/Graphics/Rendering/Cairo/Internal/Region.h cairo_region_union_rectangle"
      regionUnionRectangle'_ :: ((Ptr Region) -> ((Ptr RectangleInt) -> (IO CInt)))

    foreign import ccall safe "dist-ghc/build/Graphics/Rendering/Cairo/Internal/Region.h cairo_region_xor"
      regionXor'_ :: ((Ptr Region) -> ((Ptr Region) -> (IO CInt)))

    foreign import ccall safe "dist-ghc/build/Graphics/Rendering/Cairo/Internal/Region.h cairo_region_xor_rectangle"
      regionXorRectangle'_ :: ((Ptr Region) -> ((Ptr RectangleInt) -> (IO CInt)))