module SFML.Window.Event
(
SFEvent(..)
)
where
import SFML.Window.Joystick
import SFML.Window.Keyboard
import SFML.Window.Mouse
import Control.Applicative ((<$>), (<*>))
import Foreign.C.String
import Foreign.C.Types
import Foreign.Marshal.Array
import Foreign.Ptr
import Foreign.Storable
data SFEvent
= SFEvtClosed
| SFEvtResized
{ width :: Int
, height :: Int
}
| SFEvtLostFocus
| SFEvtGainedFocus
| SFEvtTextEntered
{ text :: String
}
| SFEvtKeyPressed
{ code :: KeyCode
, alt :: Bool
, ctrl :: Bool
, shift :: Bool
, sys :: Bool
}
| SFEvtKeyReleased
{ code :: KeyCode
, alt :: Bool
, ctrl :: Bool
, shift :: Bool
, sys :: Bool
}
| SFEvtMouseWheelMoved
{ moveDelta :: Int
, x :: Int
, y :: Int
}
| SFEvtMouseWheelScrolled
{ wheel :: MouseWheel
, scrollDelta :: Float
, x :: Int
, y :: Int
}
| SFEvtMouseButtonPressed
{ button :: MouseButton
, x :: Int
, y :: Int
}
| SFEvtMouseButtonReleased
{ button :: MouseButton
, x :: Int
, y :: Int
}
| SFEvtMouseMoved
{ x :: Int
, y :: Int
}
| SFEvtMouseEntered
| SFEvtMouseLeft
| SFEvtJoystickButtonPressed
{ joystickId :: Int
, joystickBt :: Int
}
| SFEvtJoystickButtonReleased
{ joystickId :: Int
, joystickBt :: Int
}
| SFEvtJoystickMoved
{ joystickId :: Int
, joystickAxis :: JoystickAxis
, position :: Float
}
| SFEvtJoystickConnected
{ joystickId :: Int
}
| SFEvtJoystickDisconnected
{ joystickId :: Int
}
deriving (Eq, Show)
sizeInt = (4)
sizeChar = (1)
instance Storable SFEvent where
sizeOf _ = (24)
alignment _ = alignment (undefined :: CInt)
peek ptr' =
let ptr'' = castPtr ptr' :: Ptr CInt
in do
let ptr = castPtr ptr''
eventType <- peek ptr'' :: IO CInt
case eventType of
0 -> return SFEvtClosed
1 -> SFEvtResized
<$> fmap fromIntegral ((\hsc_ptr -> peekByteOff hsc_ptr 4) ptr :: IO CUInt)
<*> fmap fromIntegral ((\hsc_ptr -> peekByteOff hsc_ptr 8) ptr :: IO CUInt)
2 -> return SFEvtLostFocus
3 -> return SFEvtGainedFocus
4 -> peekCAString (plusPtr ptr sizeInt) >>= return . SFEvtTextEntered
5 -> SFEvtKeyPressed
<$> (\hsc_ptr -> peekByteOff hsc_ptr 4) ptr
<*> fmap (toEnum . fromIntegral) ((\hsc_ptr -> peekByteOff hsc_ptr 8) ptr :: IO CInt)
<*> fmap (toEnum . fromIntegral) ((\hsc_ptr -> peekByteOff hsc_ptr 12) ptr :: IO CInt)
<*> fmap (toEnum . fromIntegral) ((\hsc_ptr -> peekByteOff hsc_ptr 16) ptr :: IO CInt)
<*> fmap (toEnum . fromIntegral) ((\hsc_ptr -> peekByteOff hsc_ptr 20) ptr :: IO CInt)
6 -> SFEvtKeyReleased
<$> (\hsc_ptr -> peekByteOff hsc_ptr 4) ptr
<*> fmap (toEnum . fromIntegral) ((\hsc_ptr -> peekByteOff hsc_ptr 8) ptr :: IO CInt)
<*> fmap (toEnum . fromIntegral) ((\hsc_ptr -> peekByteOff hsc_ptr 12) ptr :: IO CInt)
<*> fmap (toEnum . fromIntegral) ((\hsc_ptr -> peekByteOff hsc_ptr 16) ptr :: IO CInt)
<*> fmap (toEnum . fromIntegral) ((\hsc_ptr -> peekByteOff hsc_ptr 20) ptr :: IO CInt)
7 -> SFEvtMouseWheelMoved
<$> fmap fromIntegral ((\hsc_ptr -> peekByteOff hsc_ptr 4) ptr :: IO CInt)
<*> fmap fromIntegral ((\hsc_ptr -> peekByteOff hsc_ptr 8) ptr :: IO CInt)
<*> fmap fromIntegral ((\hsc_ptr -> peekByteOff hsc_ptr 12) ptr :: IO CInt)
8 -> SFEvtMouseWheelScrolled
<$> ((\hsc_ptr -> peekByteOff hsc_ptr 4) ptr :: IO MouseWheel)
<*> fmap realToFrac ((\hsc_ptr -> peekByteOff hsc_ptr 8) ptr :: IO CFloat)
<*> fmap fromIntegral ((\hsc_ptr -> peekByteOff hsc_ptr 12) ptr :: IO CInt)
<*> fmap fromIntegral ((\hsc_ptr -> peekByteOff hsc_ptr 16) ptr :: IO CInt)
9 -> SFEvtMouseButtonPressed
<$> (\hsc_ptr -> peekByteOff hsc_ptr 4) ptr
<*> fmap fromIntegral ((\hsc_ptr -> peekByteOff hsc_ptr 8) ptr :: IO CInt)
<*> fmap fromIntegral ((\hsc_ptr -> peekByteOff hsc_ptr 12) ptr :: IO CInt)
10 -> SFEvtMouseButtonReleased
<$> (\hsc_ptr -> peekByteOff hsc_ptr 4) ptr
<*> fmap fromIntegral ((\hsc_ptr -> peekByteOff hsc_ptr 8) ptr :: IO CInt)
<*> fmap fromIntegral ((\hsc_ptr -> peekByteOff hsc_ptr 12) ptr :: IO CInt)
11 -> SFEvtMouseMoved
<$> fmap fromIntegral ((\hsc_ptr -> peekByteOff hsc_ptr 4) ptr :: IO CInt)
<*> fmap fromIntegral ((\hsc_ptr -> peekByteOff hsc_ptr 8) ptr :: IO CInt)
12 -> return SFEvtMouseEntered
13 -> return SFEvtMouseLeft
14 -> SFEvtJoystickButtonPressed
<$> fmap fromIntegral ((\hsc_ptr -> peekByteOff hsc_ptr 4) ptr :: IO CUInt)
<*> fmap fromIntegral ((\hsc_ptr -> peekByteOff hsc_ptr 8) ptr :: IO CUInt)
15 -> SFEvtJoystickButtonReleased
<$> fmap fromIntegral ((\hsc_ptr -> peekByteOff hsc_ptr 4) ptr :: IO CUInt)
<*> fmap fromIntegral ((\hsc_ptr -> peekByteOff hsc_ptr 8) ptr :: IO CUInt)
16 -> SFEvtJoystickMoved
<$> fmap fromIntegral ((\hsc_ptr -> peekByteOff hsc_ptr 4) ptr :: IO CUInt)
<*> (\hsc_ptr -> peekByteOff hsc_ptr 8) ptr
<*> fmap realToFrac ((\hsc_ptr -> peekByteOff hsc_ptr 12) ptr :: IO CFloat)
17 -> peekByteOff ptr sizeInt >>= return . SFEvtJoystickConnected
18 -> peekByteOff ptr sizeInt >>= return . SFEvtJoystickDisconnected
poke ptr evt = return ()