sdl2-gfx-0.2: src/SDL/Raw/Framerate.hsc
{-|
Module : SDL.Raw.Framerate
Copyright : (c) 2015 Siniša Biđin
License : MIT
Maintainer : sinisa@bidin.eu
Stability : experimental
Raw bindings to the @SDL2_gfx@ library, specifically the framerate management
functionality from @SDL2_framerate.h@.
-}
{-# OPTIONS_GHC -fno-warn-missing-signatures #-}
{-# LANGUAGE PatternSynonyms #-}
{-# LANGUAGE RecordWildCards #-}
{-# LANGUAGE TemplateHaskell #-}
module SDL.Raw.Framerate
( Manager(..)
, init
, framerateDelay
, setFramerate
, pattern FPS_DEFAULT
, pattern FPS_LOWER_LIMIT
, pattern FPS_UPPER_LIMIT
, getFramerate
, getFramecount
) where
#include "SDL2_framerate.h"
import Foreign.C.Types (CFloat(..), CInt(..))
import Foreign.Ptr (Ptr)
import Foreign.Storable (Storable(..))
import Data.Word (Word32)
import Prelude hiding (init)
import SDL.Raw.Helper (liftF)
pattern FPS_DEFAULT = (#const FPS_DEFAULT)
pattern FPS_LOWER_LIMIT = (#const FPS_LOWER_LIMIT)
pattern FPS_UPPER_LIMIT = (#const FPS_UPPER_LIMIT)
data Manager = Manager
{ frameCount :: Word32
, rateTicks :: CFloat
, baseTicks :: Word32
, lastTicks :: Word32
, rate :: Word32
} deriving (Eq, Show, Read)
instance Storable Manager where
alignment = sizeOf
sizeOf _ = (#size FPSmanager)
peek ptr =
Manager
<$> (#peek FPSmanager, framecount) ptr
<*> (#peek FPSmanager, rateticks) ptr
<*> (#peek FPSmanager, baseticks) ptr
<*> (#peek FPSmanager, lastticks) ptr
<*> (#peek FPSmanager, rate) ptr
poke ptr (Manager {..}) = do
(#poke FPSmanager, framecount) ptr frameCount
(#poke FPSmanager, rateticks) ptr rateTicks
(#poke FPSmanager, baseticks) ptr baseTicks
(#poke FPSmanager, lastticks) ptr lastTicks
(#poke FPSmanager, rate) ptr rate
liftF "init" "SDL_initFramerate"
[t|Ptr Manager -> IO ()|]
liftF "getFramecount" "SDL_getFramecount"
[t|Ptr Manager -> IO CInt|]
liftF "framerateDelay" "SDL_framerateDelay"
[t|Ptr Manager -> IO Word32|]
liftF "getFramerate" "SDL_getFramerate"
[t|Ptr Manager -> IO CInt|]
liftF "setFramerate" "SDL_setFramerate"
[t|Ptr Manager -> Word32 -> IO CInt|]