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


{-# LINE 1 "src/Graphics/QML/Internal/BindCanvas.chs" #-}
{-# LANGUAGE
    ForeignFunctionInterface
  #-}

module Graphics.QML.Internal.BindCanvas where
import qualified Foreign.C.Types as C2HSImp
import qualified Foreign.ForeignPtr as C2HSImp
import qualified Foreign.Ptr as C2HSImp



import Graphics.QML.Internal.BindPrim
{-# LINE 7 "src/Graphics/QML/Internal/BindCanvas.chs" #-}


import Foreign.C.Types
import Foreign.Marshal.Utils
import Foreign.Ptr
import Foreign.ForeignPtr
import Foreign.Storable



--
-- GL Delegate
--

newtype HsQMLGLDelegateHandle = HsQMLGLDelegateHandle (C2HSImp.ForeignPtr (HsQMLGLDelegateHandle))
withHsQMLGLDelegateHandle :: HsQMLGLDelegateHandle -> (C2HSImp.Ptr HsQMLGLDelegateHandle -> IO b) -> IO b
withHsQMLGLDelegateHandle :: forall b.
HsQMLGLDelegateHandle
-> (Ptr HsQMLGLDelegateHandle -> IO b) -> IO b
withHsQMLGLDelegateHandle (HsQMLGLDelegateHandle ForeignPtr HsQMLGLDelegateHandle
fptr) = ForeignPtr HsQMLGLDelegateHandle
-> (Ptr HsQMLGLDelegateHandle -> IO b) -> IO b
forall a b. ForeignPtr a -> (Ptr a -> IO b) -> IO b
C2HSImp.withForeignPtr ForeignPtr HsQMLGLDelegateHandle
fptr
{-# LINE 21 "src/Graphics/QML/Internal/BindCanvas.chs" #-}


type SetupCb = CInt -> CInt -> CInt -> IO ()
type CleanupCb = IO ()
type SyncCb = HsQMLJValHandle -> IO CInt
type PaintCb = Ptr CFloat -> CFloat -> CFloat -> IO ()
type MakeCb = Ptr (FunPtr SetupCb) -> Ptr (FunPtr CleanupCb) ->
    Ptr (FunPtr SyncCb) -> Ptr (FunPtr PaintCb) -> IO ()
type CallbacksFactory = IO (SetupCb, CleanupCb, SyncCb, PaintCb)

data HsQMLGLCanvasType = HsqmlGlDesktop
                       | HsqmlGlEs
  deriving (Int -> HsQMLGLCanvasType
HsQMLGLCanvasType -> Int
HsQMLGLCanvasType -> [HsQMLGLCanvasType]
HsQMLGLCanvasType -> HsQMLGLCanvasType
HsQMLGLCanvasType -> HsQMLGLCanvasType -> [HsQMLGLCanvasType]
HsQMLGLCanvasType
-> HsQMLGLCanvasType -> HsQMLGLCanvasType -> [HsQMLGLCanvasType]
(HsQMLGLCanvasType -> HsQMLGLCanvasType)
-> (HsQMLGLCanvasType -> HsQMLGLCanvasType)
-> (Int -> HsQMLGLCanvasType)
-> (HsQMLGLCanvasType -> Int)
-> (HsQMLGLCanvasType -> [HsQMLGLCanvasType])
-> (HsQMLGLCanvasType -> HsQMLGLCanvasType -> [HsQMLGLCanvasType])
-> (HsQMLGLCanvasType -> HsQMLGLCanvasType -> [HsQMLGLCanvasType])
-> (HsQMLGLCanvasType
    -> HsQMLGLCanvasType -> HsQMLGLCanvasType -> [HsQMLGLCanvasType])
-> Enum HsQMLGLCanvasType
forall a.
(a -> a)
-> (a -> a)
-> (Int -> a)
-> (a -> Int)
-> (a -> [a])
-> (a -> a -> [a])
-> (a -> a -> [a])
-> (a -> a -> a -> [a])
-> Enum a
$csucc :: HsQMLGLCanvasType -> HsQMLGLCanvasType
succ :: HsQMLGLCanvasType -> HsQMLGLCanvasType
$cpred :: HsQMLGLCanvasType -> HsQMLGLCanvasType
pred :: HsQMLGLCanvasType -> HsQMLGLCanvasType
$ctoEnum :: Int -> HsQMLGLCanvasType
toEnum :: Int -> HsQMLGLCanvasType
$cfromEnum :: HsQMLGLCanvasType -> Int
fromEnum :: HsQMLGLCanvasType -> Int
$cenumFrom :: HsQMLGLCanvasType -> [HsQMLGLCanvasType]
enumFrom :: HsQMLGLCanvasType -> [HsQMLGLCanvasType]
$cenumFromThen :: HsQMLGLCanvasType -> HsQMLGLCanvasType -> [HsQMLGLCanvasType]
enumFromThen :: HsQMLGLCanvasType -> HsQMLGLCanvasType -> [HsQMLGLCanvasType]
$cenumFromTo :: HsQMLGLCanvasType -> HsQMLGLCanvasType -> [HsQMLGLCanvasType]
enumFromTo :: HsQMLGLCanvasType -> HsQMLGLCanvasType -> [HsQMLGLCanvasType]
$cenumFromThenTo :: HsQMLGLCanvasType
-> HsQMLGLCanvasType -> HsQMLGLCanvasType -> [HsQMLGLCanvasType]
enumFromThenTo :: HsQMLGLCanvasType
-> HsQMLGLCanvasType -> HsQMLGLCanvasType -> [HsQMLGLCanvasType]
Enum)

{-# LINE 31 "src/Graphics/QML/Internal/BindCanvas.chs" #-}


foreign import ccall "wrapper"
  marshalSetupCb :: SetupCb -> IO (FunPtr SetupCb)

foreign import ccall "wrapper"
  marshalCleanupCb :: CleanupCb -> IO (FunPtr CleanupCb)

foreign import ccall "wrapper"  
  marshalSyncCb :: SyncCb -> IO (FunPtr SyncCb)

foreign import ccall "wrapper"  
  marshalPaintCb :: PaintCb -> IO (FunPtr PaintCb)

foreign import ccall "wrapper"
  marshalMakeCb :: MakeCb -> IO (FunPtr MakeCb)

withCallbacksFactory :: CallbacksFactory -> (FunPtr MakeCb -> IO a) -> IO a
withCallbacksFactory :: forall a. CallbacksFactory -> (FunPtr MakeCb -> IO a) -> IO a
withCallbacksFactory CallbacksFactory
factory FunPtr MakeCb -> IO a
with = do
    let makeFn :: MakeCb
makeFn Ptr (FunPtr SetupCb)
setupPtrFPtr Ptr (FunPtr CleanupCb)
cleanupPtrFPtr Ptr (FunPtr SyncCb)
syncPtrFPtr Ptr (FunPtr PaintCb)
paintPtrFPtr = do
            (SetupCb
setupFn, CleanupCb
cleanupFn, SyncCb
syncFn, PaintCb
paintFn) <- CallbacksFactory
factory
            FunPtr SetupCb
setupFPtr <- SetupCb -> IO (FunPtr SetupCb)
marshalSetupCb SetupCb
setupFn
            Ptr (FunPtr SetupCb) -> FunPtr SetupCb -> CleanupCb
forall a. Storable a => Ptr a -> a -> CleanupCb
poke Ptr (FunPtr SetupCb)
setupPtrFPtr FunPtr SetupCb
setupFPtr
            FunPtr CleanupCb
cleanupFPtr <- CleanupCb -> IO (FunPtr CleanupCb)
marshalCleanupCb CleanupCb
cleanupFn
            Ptr (FunPtr CleanupCb) -> FunPtr CleanupCb -> CleanupCb
forall a. Storable a => Ptr a -> a -> CleanupCb
poke Ptr (FunPtr CleanupCb)
cleanupPtrFPtr FunPtr CleanupCb
cleanupFPtr
            FunPtr SyncCb
syncFPtr <- SyncCb -> IO (FunPtr SyncCb)
marshalSyncCb SyncCb
syncFn
            Ptr (FunPtr SyncCb) -> FunPtr SyncCb -> CleanupCb
forall a. Storable a => Ptr a -> a -> CleanupCb
poke Ptr (FunPtr SyncCb)
syncPtrFPtr FunPtr SyncCb
syncFPtr
            FunPtr PaintCb
paintFPtr <- PaintCb -> IO (FunPtr PaintCb)
marshalPaintCb PaintCb
paintFn
            Ptr (FunPtr PaintCb) -> FunPtr PaintCb -> CleanupCb
forall a. Storable a => Ptr a -> a -> CleanupCb
poke Ptr (FunPtr PaintCb)
paintPtrFPtr FunPtr PaintCb
paintFPtr
    FunPtr MakeCb
makeFPtr <- MakeCb -> IO (FunPtr MakeCb)
marshalMakeCb MakeCb
makeFn
    FunPtr MakeCb -> IO a
with FunPtr MakeCb
makeFPtr

foreign import ccall "hsqml.h &hsqml_finalise_gldelegate_handle"
    hsqmlFinaliseGldelegateHandlePtr ::
        FunPtr (Ptr HsQMLGLDelegateHandle -> IO ())

newGLDelegateHandle :: Ptr HsQMLGLDelegateHandle -> IO HsQMLGLDelegateHandle
newGLDelegateHandle :: Ptr HsQMLGLDelegateHandle -> IO HsQMLGLDelegateHandle
newGLDelegateHandle Ptr HsQMLGLDelegateHandle
p = do
    ForeignPtr HsQMLGLDelegateHandle
fp <- FinalizerPtr HsQMLGLDelegateHandle
-> Ptr HsQMLGLDelegateHandle
-> IO (ForeignPtr HsQMLGLDelegateHandle)
forall a. FinalizerPtr a -> Ptr a -> IO (ForeignPtr a)
newForeignPtr FinalizerPtr HsQMLGLDelegateHandle
hsqmlFinaliseGldelegateHandlePtr Ptr HsQMLGLDelegateHandle
p
    HsQMLGLDelegateHandle -> IO HsQMLGLDelegateHandle
forall a. a -> IO a
forall (m :: * -> *) a. Monad m => a -> m a
return (HsQMLGLDelegateHandle -> IO HsQMLGLDelegateHandle)
-> HsQMLGLDelegateHandle -> IO HsQMLGLDelegateHandle
forall a b. (a -> b) -> a -> b
$ ForeignPtr HsQMLGLDelegateHandle -> HsQMLGLDelegateHandle
HsQMLGLDelegateHandle ForeignPtr HsQMLGLDelegateHandle
fp

hsqmlCreateGldelegate :: IO ((HsQMLGLDelegateHandle))
hsqmlCreateGldelegate :: IO HsQMLGLDelegateHandle
hsqmlCreateGldelegate =
  IO (Ptr HsQMLGLDelegateHandle)
hsqmlCreateGldelegate'_ IO (Ptr HsQMLGLDelegateHandle)
-> (Ptr HsQMLGLDelegateHandle -> IO HsQMLGLDelegateHandle)
-> IO HsQMLGLDelegateHandle
forall a b. IO a -> (a -> IO b) -> IO b
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= \Ptr HsQMLGLDelegateHandle
res ->
  Ptr HsQMLGLDelegateHandle -> IO HsQMLGLDelegateHandle
newGLDelegateHandle Ptr HsQMLGLDelegateHandle
res IO HsQMLGLDelegateHandle
-> (HsQMLGLDelegateHandle -> IO HsQMLGLDelegateHandle)
-> IO HsQMLGLDelegateHandle
forall a b. IO a -> (a -> IO b) -> IO b
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= \HsQMLGLDelegateHandle
res' ->
  HsQMLGLDelegateHandle -> IO HsQMLGLDelegateHandle
forall a. a -> IO a
forall (m :: * -> *) a. Monad m => a -> m a
return (HsQMLGLDelegateHandle
res')

{-# LINE 74 "src/Graphics/QML/Internal/BindCanvas.chs" #-}


hsqmlGldelegateSetup :: (HsQMLGLDelegateHandle) -> (CallbacksFactory) -> IO ()
hsqmlGldelegateSetup a1 a2 =
  withHsQMLGLDelegateHandle a1 $ \a1' -> 
  withCallbacksFactory a2 $ \a2' -> 
  hsqmlGldelegateSetup'_ a1' a2' >>
  return ()

{-# LINE 79 "src/Graphics/QML/Internal/BindCanvas.chs" #-}


hsqmlGldelegateToJval :: (HsQMLGLDelegateHandle) -> (HsQMLJValHandle) -> IO ()
hsqmlGldelegateToJval a1 a2 =
  withHsQMLGLDelegateHandle a1 $ \a1' -> 
  let {a2' = id a2} in 
  hsqmlGldelegateToJval'_ a1' a2' >>
  return ()

{-# LINE 84 "src/Graphics/QML/Internal/BindCanvas.chs" #-}


hsqmlGldelegateFromJval :: (HsQMLGLDelegateHandle) -> (HsQMLJValHandle) -> IO ((Bool))
hsqmlGldelegateFromJval a1 a2 =
  withHsQMLGLDelegateHandle a1 $ \a1' -> 
  let {a2' = id a2} in 
  hsqmlGldelegateFromJval'_ a1' a2' >>= \res ->
  let {res' = toBool res} in
  return (res')

{-# LINE 89 "src/Graphics/QML/Internal/BindCanvas.chs" #-}


foreign import ccall unsafe "Graphics/QML/Internal/BindCanvas.chs.h hsqml_create_gldelegate"
  hsqmlCreateGldelegate'_ :: (IO (C2HSImp.Ptr (HsQMLGLDelegateHandle)))

foreign import ccall unsafe "Graphics/QML/Internal/BindCanvas.chs.h hsqml_gldelegate_setup"
  hsqmlGldelegateSetup'_ :: ((C2HSImp.Ptr (HsQMLGLDelegateHandle)) -> ((C2HSImp.FunPtr ((C2HSImp.Ptr (C2HSImp.FunPtr (C2HSImp.CInt -> (C2HSImp.CInt -> (C2HSImp.CInt -> (IO ())))))) -> ((C2HSImp.Ptr (C2HSImp.FunPtr (IO ()))) -> ((C2HSImp.Ptr (C2HSImp.FunPtr ((HsQMLJValHandle) -> (IO C2HSImp.CInt)))) -> ((C2HSImp.Ptr (C2HSImp.FunPtr ((C2HSImp.Ptr C2HSImp.CFloat) -> (C2HSImp.CFloat -> (C2HSImp.CFloat -> (IO ())))))) -> (IO ())))))) -> (IO ())))

foreign import ccall unsafe "Graphics/QML/Internal/BindCanvas.chs.h hsqml_gldelegate_to_jval"
  hsqmlGldelegateToJval'_ :: ((C2HSImp.Ptr (HsQMLGLDelegateHandle)) -> ((HsQMLJValHandle) -> (IO ())))

foreign import ccall unsafe "Graphics/QML/Internal/BindCanvas.chs.h hsqml_gldelegate_from_jval"
  hsqmlGldelegateFromJval'_ :: ((C2HSImp.Ptr (HsQMLGLDelegateHandle)) -> ((HsQMLJValHandle) -> (IO C2HSImp.CInt)))