    -- GENERATED by C->Haskell Compiler, version 0.28.8 Switcheroo, 25 November 2017 (Haskell)
    -- Edit the ORIGNAL .chs file instead!

    {-# LINE 1 "./GI/Cairo/Render/Internal/Drawing/Transformations.chs" #-}
    -----------------------------------------------------------------------------
    -- |
    -- Module      :  GI.Cairo.Render.Internal.Drawing.Tranformations
    -- Copyright   :  (c) Paolo Martini 2005
    -- License     :  BSD-style (see cairo/COPYRIGHT)
    --
    -- Maintainer  :  p.martini@neuralnoise.com
    -- Stability   :  experimental
    -- Portability :  portable
    --
    -- Manipulating the current transformation matrix.
    -----------------------------------------------------------------------------

    module GI.Cairo.Render.Internal.Drawing.Transformations where
    import qualified Foreign.C.Types as C2HSImp
    import qualified Foreign.Ptr as C2HSImp

    import GI.Cairo.Render.Types
    {-# LINE 18 "./GI/Cairo/Render/Internal/Drawing/Transformations.chs" #-}

    import Data.GI.Base(wrapBoxed, withManagedPtr)
    import Foreign hiding (rotate)
    import Foreign.C

    {-# LINE 24 "./GI/Cairo/Render/Internal/Drawing/Transformations.chs" #-}

    translate :: (Cairo) -> (Double) -> (Double) -> IO ()
    translate :: Cairo -> Double -> Double -> IO ()
    translate Cairo
    a1 Double
    a2 Double
    a3 =
      Cairo -> (Ptr Cairo -> IO ()) -> IO ()
    forall a c.
    (HasCallStack, ManagedPtrNewtype a) =>
    a -> (Ptr a -> IO c) -> IO c
    withManagedPtr Cairo
    a1 ((Ptr Cairo -> IO ()) -> IO ()) -> (Ptr Cairo -> IO ()) -> IO ()
    forall a b. (a -> b) -> a -> b
    $ \Ptr Cairo
    a1' ->
      let {a2' :: CDouble
    a2' = Double -> CDouble
    forall a b. (Real a, Fractional b) => a -> b
    realToFrac Double
    a2} in
      let {a3' :: CDouble
    a3' = Double -> CDouble
    forall a b. (Real a, Fractional b) => a -> b
    realToFrac Double
    a3} in
      Ptr Cairo -> CDouble -> CDouble -> IO ()
    translate'_ Ptr Cairo
    a1' CDouble
    a2' CDouble
    a3' IO () -> IO () -> IO ()
    forall a b. IO a -> IO b -> IO b
    forall (m :: * -> *) a b. Monad m => m a -> m b -> m b
    >>
      () -> IO ()
    forall a. a -> IO a
    forall (m :: * -> *) a. Monad m => a -> m a
    return ()

    {-# LINE 26 "./GI/Cairo/Render/Internal/Drawing/Transformations.chs" #-}

    scale :: (Cairo) -> (Double) -> (Double) -> IO ()
    scale a1 a2 a3 =
      withManagedPtr a1 $ \a1' ->
      let {a2' = realToFrac a2} in
      let {a3' = realToFrac a3} in
      scale'_ a1' a2' a3' >>
      return ()

    {-# LINE 27 "./GI/Cairo/Render/Internal/Drawing/Transformations.chs" #-}

    rotate :: (Cairo) -> (Double) -> IO ()
    rotate a1 a2 =
      withManagedPtr a1 $ \a1' ->
      let {a2' = realToFrac a2} in
      rotate'_ a1' a2' >>
      return ()

    {-# LINE 28 "./GI/Cairo/Render/Internal/Drawing/Transformations.chs" #-}

    transform :: (Cairo) -> (Matrix) -> IO ()
    transform a1 a2 =
      withManagedPtr a1 $ \a1' ->
      with a2 $ \a2' ->
      transform'_ a1' a2' >>
      return ()

    {-# LINE 29 "./GI/Cairo/Render/Internal/Drawing/Transformations.chs" #-}

    setMatrix :: (Cairo) -> (Matrix) -> IO ()
    setMatrix a1 a2 =
      withManagedPtr a1 $ \a1' ->
      with a2 $ \a2' ->
      setMatrix'_ a1' a2' >>
      return ()

    {-# LINE 30 "./GI/Cairo/Render/Internal/Drawing/Transformations.chs" #-}

    getMatrix :: (Cairo) -> IO ((Matrix))
    getMatrix a1 =
      withManagedPtr a1 $ \a1' ->
      alloca $ \a2' ->
      getMatrix'_ a1' a2' >>
      peek  a2'>>= \a2'' ->
      return (a2'')

    {-# LINE 31 "./GI/Cairo/Render/Internal/Drawing/Transformations.chs" #-}

    identityMatrix :: (Cairo) -> IO ()
    identityMatrix a1 =
      withManagedPtr a1 $ \a1' ->
      identityMatrix'_ a1' >>
      return ()

    {-# LINE 32 "./GI/Cairo/Render/Internal/Drawing/Transformations.chs" #-}

    userToDevice :: (Cairo) -> (Double) -> (Double) -> IO ((Double), (Double))
    userToDevice a1 a2 a3 =
      withManagedPtr a1 $ \a1' ->
      withFloatConv a2 $ \a2' ->
      withFloatConv a3 $ \a3' ->
      userToDevice'_ a1' a2' a3' >>
      peekFloatConv  a2'>>= \a2'' ->
      peekFloatConv  a3'>>= \a3'' ->
      return (a2'', a3'')

    {-# LINE 33 "./GI/Cairo/Render/Internal/Drawing/Transformations.chs" #-}

    userToDeviceDistance :: (Cairo) -> (Double) -> (Double) -> IO ((Double), (Double))
    userToDeviceDistance a1 a2 a3 =
      withManagedPtr a1 $ \a1' ->
      withFloatConv a2 $ \a2' ->
      withFloatConv a3 $ \a3' ->
      userToDeviceDistance'_ a1' a2' a3' >>
      peekFloatConv  a2'>>= \a2'' ->
      peekFloatConv  a3'>>= \a3'' ->
      return (a2'', a3'')

    {-# LINE 34 "./GI/Cairo/Render/Internal/Drawing/Transformations.chs" #-}

    deviceToUser :: (Cairo) -> (Double) -> (Double) -> IO ((Double), (Double))
    deviceToUser a1 a2 a3 =
      withManagedPtr a1 $ \a1' ->
      withFloatConv a2 $ \a2' ->
      withFloatConv a3 $ \a3' ->
      deviceToUser'_ a1' a2' a3' >>
      peekFloatConv  a2'>>= \a2'' ->
      peekFloatConv  a3'>>= \a3'' ->
      return (a2'', a3'')

    {-# LINE 35 "./GI/Cairo/Render/Internal/Drawing/Transformations.chs" #-}

    deviceToUserDistance :: (Cairo) -> (Double) -> (Double) -> IO ((Double), (Double))
    deviceToUserDistance a1 a2 a3 =
      withManagedPtr a1 $ \a1' ->
      withFloatConv a2 $ \a2' ->
      withFloatConv a3 $ \a3' ->
      deviceToUserDistance'_ a1' a2' a3' >>
      peekFloatConv  a2'>>= \a2'' ->
      peekFloatConv  a3'>>= \a3'' ->
      return (a2'', a3'')

    {-# LINE 36 "./GI/Cairo/Render/Internal/Drawing/Transformations.chs" #-}

    foreign import ccall safe "GI/Cairo/Render/Internal/Drawing/Transformations.chs.h cairo_translate"
      translate'_ :: ((CairoPtr) -> (C2HSImp.CDouble -> (C2HSImp.CDouble -> (IO ()))))

    foreign import ccall safe "GI/Cairo/Render/Internal/Drawing/Transformations.chs.h cairo_scale"
      scale'_ :: ((CairoPtr) -> (C2HSImp.CDouble -> (C2HSImp.CDouble -> (IO ()))))

    foreign import ccall safe "GI/Cairo/Render/Internal/Drawing/Transformations.chs.h cairo_rotate"
      rotate'_ :: ((CairoPtr) -> (C2HSImp.CDouble -> (IO ())))

    foreign import ccall safe "GI/Cairo/Render/Internal/Drawing/Transformations.chs.h cairo_transform"
      transform'_ :: ((CairoPtr) -> ((MatrixPtr) -> (IO ())))

    foreign import ccall safe "GI/Cairo/Render/Internal/Drawing/Transformations.chs.h cairo_set_matrix"
      setMatrix'_ :: ((CairoPtr) -> ((MatrixPtr) -> (IO ())))

    foreign import ccall safe "GI/Cairo/Render/Internal/Drawing/Transformations.chs.h cairo_get_matrix"
      getMatrix'_ :: ((CairoPtr) -> ((MatrixPtr) -> (IO ())))

    foreign import ccall safe "GI/Cairo/Render/Internal/Drawing/Transformations.chs.h cairo_identity_matrix"
      identityMatrix'_ :: ((CairoPtr) -> (IO ()))

    foreign import ccall safe "GI/Cairo/Render/Internal/Drawing/Transformations.chs.h cairo_user_to_device"
      userToDevice'_ :: ((CairoPtr) -> ((C2HSImp.Ptr C2HSImp.CDouble) -> ((C2HSImp.Ptr C2HSImp.CDouble) -> (IO ()))))

    foreign import ccall safe "GI/Cairo/Render/Internal/Drawing/Transformations.chs.h cairo_user_to_device_distance"
      userToDeviceDistance'_ :: ((CairoPtr) -> ((C2HSImp.Ptr C2HSImp.CDouble) -> ((C2HSImp.Ptr C2HSImp.CDouble) -> (IO ()))))

    foreign import ccall safe "GI/Cairo/Render/Internal/Drawing/Transformations.chs.h cairo_device_to_user"
      deviceToUser'_ :: ((CairoPtr) -> ((C2HSImp.Ptr C2HSImp.CDouble) -> ((C2HSImp.Ptr C2HSImp.CDouble) -> (IO ()))))

    foreign import ccall safe "GI/Cairo/Render/Internal/Drawing/Transformations.chs.h cairo_device_to_user_distance"
      deviceToUserDistance'_ :: ((CairoPtr) -> ((C2HSImp.Ptr C2HSImp.CDouble) -> ((C2HSImp.Ptr C2HSImp.CDouble) -> (IO ()))))