module Events where import qualified SDL 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 _ _ (SDL.WindowResizedEvent (SDL.WindowResizedEventData _ dim)) = fitViewport (800 / 600) 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.KeycodeF12 || SDL.keysymKeycode sym == SDL.KeycodeF = modifyMVar_ state $ \st -> do return st { stPresentationWindow = if length (stWindows st) > 1 && stPresentationWindow st == 0 then 1 else 0 } -- catch all other events handlePayload _ _ _ = return ()