pituicat/src/Affection/MessageBus/Message.hs
2017-11-27 05:27:52 +01:00

96 lines
2.3 KiB
Haskell

{-# LANGUAGE RankNTypes #-}
module Affection.MessageBus.Message where
import Data.Word (Word32(..))
import Data.Int (Int32(..))
import qualified SDL
import Linear (V2(..))
class Message msg where
msgTime :: msg -> Word32
data SystemMessage m
= MsgUserMessage
{ msgUMWhen :: Word32
, msgUMPayload :: m
} -- ^ Generic user defined message with custom payload
| MsgEngineReady Word32
| MsgWindowShown
{ msgWSWhen :: Word32
, msgWSWindow :: SDL.Window
}
| MsgWindowHidden
{ msgWHWhen :: Word32
, msgWHWindow :: SDL.Window
}
| MsgWindowExposed
{ msgWEWhen :: Word32
, msgWEWindow :: SDL.Window
}
| MsgWindowMoved
{ msgWMWhen :: Word32
, msgWMWindow :: SDL.Window
, msgWMNewPos :: V2 Int32
}
| MsgWindowResized
{ msgWRWhen :: Word32
, msgWRWindow :: SDL.Window
, msgWRNewSize :: V2 Int32
}
| MsgWindowSizeChanged
{ msgWSCWhen :: Word32
, msgWSCWindow :: SDL.Window
}
| MsgWindowMinimized
{ msgWMinWhen :: Word32
, msgWMinWindow :: SDL.Window
}
| MsgWindowMaximized
{ msgWMaxWhen :: Word32
, msgWMaxWindow :: SDL.Window
}
| MsgWindowRestored
{ msgWRestWhen :: Word32
, msgWRestWindow :: SDL.Window
}
| MsgWindowGainedMouseFocus
{ msgWGMFWhen :: Word32
, msgWGMFWindow :: SDL.Window
}
| MsgWindowLostMouseFocus
{ msgWLMFWhen :: Word32
, msgWLMFWindow :: SDL.Window
}
| MsgWindowGainedKeyboardFocus
{ msgWGKFWhen :: Word32
, msgWGKFWindow :: SDL.Window
}
| MsgWindowLostKeyboardFocus
{ msgWLKFWhen :: Word32
, msgWLKFWindow :: SDL.Window
}
| MsgWindowClosed
{ msgWCWhen :: Word32
, msgWCWindow :: SDL.Window
}
instance Message (SystemMessage m) where
msgTime (MsgUserMessage t _) = t
msgTime (MsgEngineReady t) = t
msgTime (MsgWindowShown t _) = t
msgTime (MsgWindowHidden t _) = t
msgTime (MsgWindowExposed t _) = t
msgTime (MsgWindowMoved t _ _) = t
msgTime (MsgWindowResized t _ _) = t
msgTime (MsgWindowSizeChanged t _) = t
msgTime (MsgWindowMinimized t _) = t
msgTime (MsgWindowMaximized t _) = t
msgTime (MsgWindowRestored t _) = t
msgTime (MsgWindowGainedMouseFocus t _) = t
msgTime (MsgWindowLostMouseFocus t _) = t
msgTime (MsgWindowGainedKeyboardFocus t _) = t
msgTime (MsgWindowLostKeyboardFocus t _) = t
msgTime (MsgWindowClosed t _) = t