ibis/src/Events.hs

62 lines
1.8 KiB
Haskell

module Events where
import qualified SDL
import qualified Data.Text as T
import Linear
import Control.Concurrent.MVar
-- internal impomrts
import Util
import Types
eventHandler :: MVar Bool -> MVar State -> SDL.Event -> IO ()
eventHandler run state (SDL.Event _ payload) =
handlePayload run state payload
handlePayload :: MVar Bool -> MVar State -> SDL.EventPayload -> IO ()
-- handlePayload _ state (SDL.WindowResizedEvent (SDL.WindowResizedEventData _ dim)) = do
-- st <- readMVar state
-- fitViewport (stAspectRatio st) dim
handlePayload run _ (SDL.WindowClosedEvent _) = do
_ <- swapMVar run False
return ()
handlePayload run state (SDL.KeyboardEvent (SDL.KeyboardEventData _ SDL.Pressed False sym))
| SDL.keysymKeycode sym == SDL.KeycodeEscape = do
_ <- swapMVar run False
return ()
| SDL.keysymKeycode sym == SDL.KeycodeF8 =
modifyMVar_ state $ \st -> do
let st2 = st
{ stPresentationWindow =
if length (stWindows st) > 1 && stPresentationWindow st == 0
then 1
else 0
}
mapM_ (\(ident, win) -> do
let title = "Ibis - " `T.append` stFilename st2
if ident == stPresentationWindow st2
then SDL.windowTitle win SDL.$= title
else SDL.windowTitle win SDL.$= title `T.append` " - Notes"
)
(stWindows st2)
return st2
| SDL.keysymKeycode sym == SDL.KeycodeF11 = do
st <- readMVar state
wc <- SDL.getWindowConfig (snd $ head $ stWindows st)
case SDL.windowMode wc of
SDL.Windowed ->
mapM_ (flip SDL.setWindowMode SDL.FullscreenDesktop . snd) (stWindows st)
_ ->
mapM_ (flip SDL.setWindowMode SDL.Windowed . snd) (stWindows st)
-- catch all other events
handlePayload _ _ _ = return ()