- 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
+ -- Create a buffer to draw on (name the actual buffer buffer', so we
+ -- can use IS { .. } syntax below to pack the state. Using a record update
+ -- wouldn't work, probably because Cairo.Surface contains an existential
+ -- type...
+ -- We put the buffer in an IORef, so we can change it for a new one
+ -- later on (on window resizes).
+ buffer' <- Cairo.createImageSurface Cairo.FormatARGB32 w h
+ buffer <- newIORef buffer'
+
+ -- Register the expose event
+ Gtk.on window Gtk.exposeEvent $ onExpose buffer
+
+ -- Repack state
+ let state = IS { .. }
+
+ -- Process any initial requests
+ processPostponed state