module Graphics.UI.SDL.Framerate
( new
, init
, set
, get
, delay
, FPSManager
) where
import Foreign as Foreign hiding (new)
import Foreign.C
import Prelude hiding (init)
data FPSManagerStruct
type FPSManager = ForeignPtr FPSManagerStruct
sizeOfManager :: Int
sizeOfManager :: Int
sizeOfManager = Int
16
new :: IO FPSManager
new :: IO FPSManager
new = do FPSManager
manager <- Int -> IO (Ptr FPSManagerStruct)
forall a. Int -> IO (Ptr a)
Foreign.mallocBytes Int
sizeOfManager IO (Ptr FPSManagerStruct)
-> (Ptr FPSManagerStruct -> IO FPSManager) -> IO FPSManager
forall a b. IO a -> (a -> IO b) -> IO b
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= FinalizerPtr FPSManagerStruct
-> Ptr FPSManagerStruct -> IO FPSManager
forall a. FinalizerPtr a -> Ptr a -> IO (ForeignPtr a)
newForeignPtr FinalizerPtr FPSManagerStruct
forall a. FinalizerPtr a
finalizerFree
FPSManager -> IO ()
init FPSManager
manager
FPSManager -> IO FPSManager
forall a. a -> IO a
forall (m :: * -> *) a. Monad m => a -> m a
return FPSManager
manager
foreign import ccall unsafe "SDL_initFramerate" sdlInitFramerate :: Ptr FPSManagerStruct -> IO ()
init :: FPSManager -> IO ()
init :: FPSManager -> IO ()
init FPSManager
manager
= FPSManager -> (Ptr FPSManagerStruct -> IO ()) -> IO ()
forall a b. ForeignPtr a -> (Ptr a -> IO b) -> IO b
withForeignPtr FPSManager
manager Ptr FPSManagerStruct -> IO ()
sdlInitFramerate
foreign import ccall unsafe "SDL_setFramerate" sdlSetFramerate :: Ptr FPSManagerStruct -> Int -> IO Int
set :: FPSManager -> Int -> IO Bool
set :: FPSManager -> Int -> IO Bool
set FPSManager
manager Int
hz
= FPSManager -> (Ptr FPSManagerStruct -> IO Bool) -> IO Bool
forall a b. ForeignPtr a -> (Ptr a -> IO b) -> IO b
withForeignPtr FPSManager
manager ((Ptr FPSManagerStruct -> IO Bool) -> IO Bool)
-> (Ptr FPSManagerStruct -> IO Bool) -> IO Bool
forall a b. (a -> b) -> a -> b
$ \Ptr FPSManagerStruct
fpsPtr ->
do Int
ret <- Ptr FPSManagerStruct -> Int -> IO Int
sdlSetFramerate Ptr FPSManagerStruct
fpsPtr Int
hz
case Int
ret of
(-1) -> Bool -> IO Bool
forall a. a -> IO a
forall (m :: * -> *) a. Monad m => a -> m a
return Bool
False
Int
_ -> Bool -> IO Bool
forall a. a -> IO a
forall (m :: * -> *) a. Monad m => a -> m a
return Bool
True
foreign import ccall unsafe "SDL_getFramerate" sdlGetFramerate :: Ptr FPSManagerStruct -> IO Int
get :: FPSManager -> IO Int
get :: FPSManager -> IO Int
get FPSManager
manager = FPSManager -> (Ptr FPSManagerStruct -> IO Int) -> IO Int
forall a b. ForeignPtr a -> (Ptr a -> IO b) -> IO b
withForeignPtr FPSManager
manager Ptr FPSManagerStruct -> IO Int
sdlGetFramerate
foreign import ccall unsafe "SDL_framerateDelay" sdlFramerateDelay :: Ptr FPSManagerStruct -> IO ()
delay :: FPSManager -> IO ()
delay :: FPSManager -> IO ()
delay FPSManager
manager = FPSManager -> (Ptr FPSManagerStruct -> IO ()) -> IO ()
forall a b. ForeignPtr a -> (Ptr a -> IO b) -> IO b
withForeignPtr FPSManager
manager Ptr FPSManagerStruct -> IO ()
sdlFramerateDelay