module Haste.Events.KeyEvents (KeyEvent (..), KeyData (..), mkKeyData) where
import Haste.Prim.Any
import Haste.Events.Core
#if __GLASGOW_HASKELL__ < 710
import Control.Applicative
#endif
data KeyData = KeyData {
keyCode :: !Int,
keyCtrl :: !Bool,
keyAlt :: !Bool,
keyShift :: !Bool,
keyMeta :: !Bool
} deriving (Show, Eq)
mkKeyData :: Int -> KeyData
mkKeyData n = KeyData {
keyCode = fromIntegral n,
keyCtrl = False,
keyAlt = False,
keyShift = False,
keyMeta = False
}
instance Num KeyData where
fromInteger = mkKeyData . fromInteger
a + b = a {keyCode = keyCode a + keyCode b}
a * b = a {keyCode = keyCode a * keyCode b}
a b = a {keyCode = keyCode a keyCode b}
negate a = a {keyCode = negate $ keyCode a}
signum a = a {keyCode = signum $ keyCode a}
abs a = a {keyCode = abs $ keyCode a}
data KeyEvent
= KeyPress
| KeyUp
| KeyDown
instance Event KeyEvent where
type EventData KeyEvent = KeyData
eventName KeyPress = "keypress"
eventName KeyUp = "keyup"
eventName KeyDown = "keydown"
eventData _ e =
KeyData <$> get e "keyCode"
<*> get e "ctrlKey"
<*> get e "altKey"
<*> get e "shiftKey"
<*> get e "metaKey"