Save the opened window in the state.
[matthijs/projects/fpprac.git] / FPPrac.hs
index c8512d74b8f5af309f9f6b8d48a5cc386c5384db..47b3cad30e0c80c06efa2445adeebc50b9ab7e62 100644 (file)
--- a/FPPrac.hs
+++ b/FPPrac.hs
@@ -98,10 +98,8 @@ testProg = Main
        }
 
 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
        }
@@ -134,32 +132,28 @@ runTina :: TinaProgram -> IO ()
 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 :: {-Size ->-} IState -> IO ()
-runGUI s = do
+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.windowTitle := "FP Practicum" 
+                      , Gtk.windowDefaultWidth := w
+                      , Gtk.windowDefaultHeight := h
+                      ]
        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
 
+       -- Add the window to the state
+       let state = s { window = window }
+       
        -- Show the window and start the Gtk mainloop.
        Gtk.widgetShowAll window
        Gtk.mainGUI