module FRP.Spice.Input.Mouse where
import qualified Data.Traversable as T (sequence)
import Data.Map.Strict hiding (keys, map)
import Graphics.Rendering.OpenGL
import Graphics.UI.GLFW as GLFW
import FRP.Elerea.Param
import Control.Monad
import Data.Default
import FRP.Spice.Math.Vector
instance Ord MouseButton where
mb1 <= mb2 = fromEnum mb1 < fromEnum mb2
buttons :: [MouseButton]
buttons = [ ButtonLeft
, ButtonRight
, ButtonMiddle
]
++
map ButtonNo [0 .. 7]
externals :: IO (Map MouseButton (Signal Bool, Bool -> IO ()))
externals = liftM fromList $ mapM (\b -> liftM ((,) b) $ external False) buttons
signals :: Map MouseButton (Signal Bool, Bool -> IO ()) -> Signal (Map MouseButton Bool)
signals = T.sequence . fmap fst
sinks :: Map MouseButton (Signal Bool, Bool -> IO ()) -> Map MouseButton (Bool -> IO ())
sinks = fmap snd