}
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, .. }
+ let state = IS { window = undefined, usrProg = eventHandler, .. }
runGUI windowWidth windowHeight state
runGUI :: Int -> Int -> IState -> IO ()
-- 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