{-# OPTIONS_HADDOCK hide #-} {-# LANGUAGE RankNTypes #-} module Graphics.Gloss.Internals.Interface.ViewState.KeyMouse (callback_viewState_keyMouse) where import Graphics.Gloss.Data.ViewState import Graphics.Gloss.Internals.Interface.Backend import Graphics.Gloss.Internals.Interface.Event import Data.IORef -- | Callback to handle keyboard and mouse button events -- for controlling the 'ViewState'. callback_viewState_keyMouse :: IORef ViewState -> Callback callback_viewState_keyMouse viewStateRef = KeyMouse (viewState_keyMouse viewStateRef) viewState_keyMouse :: IORef ViewState -> KeyboardMouseCallback viewState_keyMouse viewStateRef stateRef key keyState keyMods pos = do viewState <- readIORef viewStateRef ev <- keyMouseEvent stateRef key keyState keyMods pos case updateViewStateWithEventMaybe ev viewState of Nothing -> return () Just viewState' -> do viewStateRef `writeIORef` viewState' postRedisplay stateRef