module InputEvent
  ( InputEvent(..)
  , Key(..)
  , KeyState(..)
  , SpecialKey(..)
  )
where

import           Picture

-- | An input event.
data InputEvent
        -- | A key or mouse button event
        = EventKey Key KeyState
        -- | A mouse motion event
        | EventMotion Point Point
        deriving (Eq, Show)

-- | A key.
data Key
        -- | A key that can be represented by a character
        = Char          Char
        -- | A special key.
        | SpecialKey    SpecialKey
        -- | A mouse button. 
        | Mouse         Point
        deriving (Show, Eq, Ord)

-- | State of the key event.
data KeyState
        = Down
        | Up
        deriving (Show, Eq, Ord)

-- | Special keys
data SpecialKey
        = KeyUnknown
        | KeySpace
        | KeyEsc
        | KeyUp
        | KeyDown
        | KeyLeft
        | KeyRight
        | KeyTab
        | KeyEnter
        | KeyBackspace
        | KeyShift
        | KeyCtrl
        | KeyAlt
        | KeyCaps
        deriving (Show, Eq, Ord)