module Graphics.QML.Internal.BindCanvas where
import Graphics.QML.Internal.BindPrim
import Foreign.C.Types
import Foreign.Marshal.Utils
import Foreign.Ptr
import Foreign.ForeignPtr.Safe
import Foreign.Storable
newtype HsQMLGLDelegateHandle = HsQMLGLDelegateHandle (ForeignPtr (HsQMLGLDelegateHandle))
withHsQMLGLDelegateHandle :: HsQMLGLDelegateHandle -> (Ptr HsQMLGLDelegateHandle -> IO b) -> IO b
withHsQMLGLDelegateHandle (HsQMLGLDelegateHandle fptr) = withForeignPtr fptr
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 (Enum)
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 factory with = do
let makeFn setupPtrFPtr cleanupPtrFPtr syncPtrFPtr paintPtrFPtr = do
(setupFn, cleanupFn, syncFn, paintFn) <- factory
setupFPtr <- marshalSetupCb setupFn
poke setupPtrFPtr setupFPtr
cleanupFPtr <- marshalCleanupCb cleanupFn
poke cleanupPtrFPtr cleanupFPtr
syncFPtr <- marshalSyncCb syncFn
poke syncPtrFPtr syncFPtr
paintFPtr <- marshalPaintCb paintFn
poke paintPtrFPtr paintFPtr
makeFPtr <- marshalMakeCb makeFn
with makeFPtr
foreign import ccall "hsqml.h &hsqml_finalise_gldelegate_handle"
hsqmlFinaliseGldelegateHandlePtr ::
FunPtr (Ptr HsQMLGLDelegateHandle -> IO ())
newGLDelegateHandle :: Ptr HsQMLGLDelegateHandle -> IO HsQMLGLDelegateHandle
newGLDelegateHandle p = do
fp <- newForeignPtr hsqmlFinaliseGldelegateHandlePtr p
return $ HsQMLGLDelegateHandle fp
hsqmlCreateGldelegate :: IO ((HsQMLGLDelegateHandle))
hsqmlCreateGldelegate =
hsqmlCreateGldelegate'_ >>= \res ->
newGLDelegateHandle res >>= \res' ->
return (res')
hsqmlGldelegateSetup :: (HsQMLGLDelegateHandle) -> (CallbacksFactory) -> IO ()
hsqmlGldelegateSetup a1 a2 =
withHsQMLGLDelegateHandle a1 $ \a1' ->
withCallbacksFactory a2 $ \a2' ->
hsqmlGldelegateSetup'_ a1' a2' >>
return ()
hsqmlGldelegateToJval :: (HsQMLGLDelegateHandle) -> (HsQMLJValHandle) -> IO ()
hsqmlGldelegateToJval a1 a2 =
withHsQMLGLDelegateHandle a1 $ \a1' ->
let {a2' = id a2} in
hsqmlGldelegateToJval'_ a1' a2' >>
return ()
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')
foreign import ccall unsafe "Graphics/QML/Internal/BindCanvas.chs.h hsqml_create_gldelegate"
hsqmlCreateGldelegate'_ :: (IO (Ptr (HsQMLGLDelegateHandle)))
foreign import ccall unsafe "Graphics/QML/Internal/BindCanvas.chs.h hsqml_gldelegate_setup"
hsqmlGldelegateSetup'_ :: ((Ptr (HsQMLGLDelegateHandle)) -> ((FunPtr ((Ptr (FunPtr (CInt -> (CInt -> (CInt -> (IO ())))))) -> ((Ptr (FunPtr (IO ()))) -> ((Ptr (FunPtr ((HsQMLJValHandle) -> (IO CInt)))) -> ((Ptr (FunPtr ((Ptr CFloat) -> (CFloat -> (CFloat -> (IO ())))))) -> (IO ())))))) -> (IO ())))
foreign import ccall unsafe "Graphics/QML/Internal/BindCanvas.chs.h hsqml_gldelegate_to_jval"
hsqmlGldelegateToJval'_ :: ((Ptr (HsQMLGLDelegateHandle)) -> ((HsQMLJValHandle) -> (IO ())))
foreign import ccall unsafe "Graphics/QML/Internal/BindCanvas.chs.h hsqml_gldelegate_from_jval"
hsqmlGldelegateFromJval'_ :: ((Ptr (HsQMLGLDelegateHandle)) -> ((HsQMLJValHandle) -> (IO CInt)))