Make runGUI create a window again.
[matthijs/projects/fpprac.git] / FPPrac.hs
index ddf421ebf8821c191cfb8c2fd85fb5786c9c4b42..c8512d74b8f5af309f9f6b8d48a5cc386c5384db 100644 (file)
--- a/FPPrac.hs
+++ b/FPPrac.hs
@@ -9,6 +9,11 @@ module FPPrac (
 ) 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
@@ -133,7 +138,33 @@ runTina Main {..} = do
        runGUI {-(sz windowWidth windowHeight) -}state
 
 runGUI :: {-Size ->-} IState -> IO ()
-runGUI s = do return ()
+runGUI 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.onDestroy window Gtk.mainQuit
+       
+       Gtk.on window Gtk.exposeEvent $ do
+               --(w,h) <- Gtk.eventWindowSize
+               dw <- EventM.eventWindow
+               liftIO $ do
+               Gtk.renderWithDrawable dw $ do
+                       --translate (w/2) (h/2)
+                       --scale (w/drawSide) (h/drawSide)
+                        Cairo.arc 100 100 50 0 (2*pi) 
+                        Cairo.fill
+               return True
+
+       -- Show the window and start the Gtk mainloop.
+       Gtk.widgetShowAll window
+       Gtk.mainGUI
+
+
 {-
 runGUI s IS {..} = do
        sFrame <- frame