module FRP.Netwire.Input.JavaScript (
JSInputState,
JSInputControl,
JSInput,
JSInputT,
Key(..),
MouseButton(..),
mkInputControl,
initialInputState,
pollJavaScript,
cursorLocked,
lockCursor,
unlockCursor
) where
import Control.Applicative
import Control.Wire
import FRP.Netwire.Input hiding (Key, MouseButton)
import qualified FRP.Netwire.Input
import Control.Monad.Trans.State
import JavaScript.Input
instance FRP.Netwire.Input.Key Key
instance FRP.Netwire.Input.MouseButton MouseButton
instance Monad m => MonadMouse MouseButton (JSInputT m) where
setCursorMode cm = setCursorModeM $
case cm of
CursorMode'Enabled -> (Just False, Just False)
CursorMode'Hidden -> (Just False, Just True)
_ -> (Just True, Nothing)
mbIsPressed = mbIsPressedM
releaseButton = releaseButtonM
cursor = cursorM
scroll = scrollM
instance Monad m => MonadKeyboard Key (JSInputT m) where
keyIsPressed = keyIsPressedM
releaseKey = releaseKeyM
cursorLocked :: (Monoid e, Monad m) => Wire s e (JSInputT m) a a
cursorLocked = mkGen_ $ \x -> boolToEither x <$> lockedCursorM
where boolToEither _ False = Left mempty
boolToEither x True = Right x