) where
import qualified Graphics.UI.Gtk as Gtk
+import Graphics.UI.Gtk (AttrOp(..)) -- For the := constructor
+import qualified Graphics.Rendering.Cairo as Cairo
+import qualified Graphics.UI.Gtk.Gdk.EventM as EventM
+
+import Control.Monad.Trans -- for liftIO
import Data.IORef
import Control.Applicative
import Control.Monad
}
data IState = forall s. IS
- { {-sFrame :: Frame ()
- , sPanel :: Panel ()
- , buffer :: MemoryDC ()
- , -}postponed :: IORef [Request]
+ { window :: Gtk.Window
+ , postponed :: IORef [Request]
, usrState :: IORef s
, usrProg :: TinaStep s
}
runTina Main {..} = do
usrState <- newIORef initialState
postponed <- newIORef (GfxText (rgb 0 0 0) (pt 50 50) "foo" : GfxClear :initialRequests)
- let state = IS { usrProg = eventHandler, .. }
- runGUI {-(sz windowWidth windowHeight) -}state
+ let state = IS { window = undefined, usrProg = eventHandler, .. }
+ runGUI windowWidth windowHeight state
+
+runGUI :: Int -> Int -> IState -> IO ()
+runGUI w h s = do
+ -- Init GTK.
+ Gtk.initGUI
+
+ -- Create a window, which will make the mainloop terminated when
+ -- it is closed.
+ window <- Gtk.windowNew
+
+ Gtk.set window [ Gtk.containerBorderWidth := 10
+ , Gtk.windowTitle := "FP Practicum"
+ , Gtk.windowDefaultWidth := w
+ , Gtk.windowDefaultHeight := h
+ ]
+ Gtk.onDestroy window Gtk.mainQuit
+
+ -- Add the window to the state
+ let state = s { window = window }
+
+ -- Show the window and start the Gtk mainloop.
+ Gtk.widgetShowAll window
+ Gtk.mainGUI
+
-runGUI :: {-Size ->-} IState -> IO ()
-runGUI s = do return ()
{-
runGUI s IS {..} = do
sFrame <- frame