packages feed

tcod-haskell-0.2.0.0: src/Game/TCOD/MouseTypes.hsc

{-# LANGUAGE ForeignFunctionInterface #-}
{-# LANGUAGE CPP                      #-}
module Game.TCOD.MouseTypes(
    TCODMouse(..)
  , defaultTCODMouse
  ) where

import Foreign
import Game.TCOD.Context
import GHC.Generics

#include "libtcod/mouse_types.h"

-- | Get 'TCODMouse' with default values
defaultTCODMouse :: TCODMouse
defaultTCODMouse = TCODMouse {
    mouseX = 0
  , mouseY = 0
  , mouseDx = 0
  , mouseDy = 0
  , mouseCx = 0
  , mouseCy = 0
  , mouseDcx = 0
  , mouseDcy = 0
  , mouseLButton = False
  , mouseRButton = False
  , mouseMButton = False
  , mouseLButtonPressed = False
  , mouseRButtonPressed = False
  , mouseMButtonPressed = False
  , mouseWheelUp = False
  , mouseWheelDown = False
  }

instance Storable TCODMouse where
  sizeOf _ = #{size TCOD_mouse_t}
  alignment _ = #{alignment TCOD_mouse_t}
  poke p TCODMouse{..} = do
    #{poke TCOD_mouse_t, x} p mouseX
    #{poke TCOD_mouse_t, y} p mouseY
    #{poke TCOD_mouse_t, dx} p mouseDx
    #{poke TCOD_mouse_t, dy} p mouseDy
    #{poke TCOD_mouse_t, cx} p mouseCx
    #{poke TCOD_mouse_t, cy} p mouseCy
    #{poke TCOD_mouse_t, dcx} p mouseDcx
    #{poke TCOD_mouse_t, dcy} p mouseDcy
    #{poke TCOD_mouse_t, lbutton} p mouseLButton
    #{poke TCOD_mouse_t, rbutton} p mouseRButton
    #{poke TCOD_mouse_t, mbutton} p mouseMButton
    #{poke TCOD_mouse_t, lbutton_pressed} p mouseLButtonPressed
    #{poke TCOD_mouse_t, rbutton_pressed} p mouseRButtonPressed
    #{poke TCOD_mouse_t, mbutton_pressed} p mouseMButtonPressed
    #{poke TCOD_mouse_t, wheel_up} p mouseWheelUp
    #{poke TCOD_mouse_t, wheel_down} p mouseWheelDown
  peek p = TCODMouse
    <$> (#{peek TCOD_mouse_t, x} p)
    <*> (#{peek TCOD_mouse_t, y} p)
    <*> (#{peek TCOD_mouse_t, dx} p)
    <*> (#{peek TCOD_mouse_t, dy} p)
    <*> (#{peek TCOD_mouse_t, cx} p)
    <*> (#{peek TCOD_mouse_t, cy} p)
    <*> (#{peek TCOD_mouse_t, dcx} p)
    <*> (#{peek TCOD_mouse_t, dcy} p)
    <*> (#{peek TCOD_mouse_t, lbutton} p)
    <*> (#{peek TCOD_mouse_t, rbutton} p)
    <*> (#{peek TCOD_mouse_t, mbutton} p)
    <*> (#{peek TCOD_mouse_t, lbutton_pressed} p)
    <*> (#{peek TCOD_mouse_t, rbutton_pressed} p)
    <*> (#{peek TCOD_mouse_t, mbutton_pressed} p)
    <*> (#{peek TCOD_mouse_t, wheel_up} p)
    <*> (#{peek TCOD_mouse_t, wheel_down} p)