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 ()