buffer' <- Cairo.createImageSurface Cairo.FormatARGB32 w h
buffer <- newIORef buffer'
+ -- Repack state
+ let state = IS { .. }
+
-- Register events
Gtk.on window Gtk.exposeEvent $ onExpose buffer
Gtk.on window Gtk.configureEvent $ onResize buffer
+ Gtk.on window Gtk.keyPressEvent $ onKeyDown state
- -- Repack state
- let state = IS { .. }
-
-- Process any initial requests
processPostponed state
-- Show the window and start the Gtk mainloop.
Gtk.widgetShowAll window
Gtk.mainGUI
-
+
+-- | Called when a key is pressed.
+onKeyDown :: IState -> EventM.EventM EventM.EKey Bool
+onKeyDown s = do
+ keyval <- EventM.eventKeyVal
+ case Gtk.keyToChar keyval of
+ Just c -> liftIO $ post s (KeyIn c)
+ Nothing -> return ()
+ return True -- No clue what this means
-- | Called when (part of) the window should be redrawn. Copy the given surface
-- to the exposed window on an expose event.