4Blocks-0.2: Interface/MainWindow.hs
module Interface.MainWindow ( mainWindow )
where
import Interface.KeyEvents
import Interface.WindowUpdate
import Interface.OnePlayerModeWindow
import Interface.CommandKeys
import Rendering.Engine
import Core.Commands
import Core.Game
import Control.Monad
import Control.Concurrent
import Graphics.UI.Gtk
import Graphics.UI.Gtk.Gdk.Events
import Data.IORef;
mainWindow :: IO ()
mainWindow
= do initGUI
window <- windowNew
set window [
windowTitle := "4Blocks in Haskell!",
windowDefaultWidth := 500,
windowDefaultHeight := 500
]
frame <- frameNew
containerAdd window frame
canvas <- drawingAreaNew
containerAdd frame canvas
widgetModifyBg canvas StateNormal (Color 0 0 0)
widgetShowAll window
drawin <- widgetGetDrawWindow canvas
onExpose canvas (\x -> do renderWithDrawable drawin $ renderIntroScreen
return (eventSent x))
-- Boolean value variable used to check if mode key has already been pressed
modeSelectedIORef <- newIORef (False)
setupCommandKeyMode "1" window canvas modeSelectedIORef onePlayerMode
onKeyPress window $ \Key { eventKeyName = key } ->
when (key == "Escape") mainQuit >> return False
-- redraw window periodically
timeoutAdd (widgetQueueDraw window >> return True) 20
onDestroy window mainQuit
mainGUI