1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45
|
-- Example of an drawing graphics onto a canvas. Note that this example
-- uses the old-style Gdk drawing functions. New implementations should
-- use Cairo. See examples in that directory.
import Graphics.UI.Gtk
import Graphics.UI.Gtk.Gdk.EventM
import Graphics.UI.Gtk.Gdk.GC
import Control.Monad.Trans ( liftIO )
main = do
initGUI
dia <- dialogNew
dialogAddButton dia stockOk ResponseOk
contain <- dialogGetUpper dia
canvas <- drawingAreaNew
canvas `on` sizeRequest $ return (Requisition 40 40)
text <- canvas `widgetCreateLayout` "Hello World."
canvas `on` exposeEvent $ updateCanvas text
boxPackStartDefaults contain canvas
widgetShow canvas
dialogRun dia
return ()
updateCanvas :: PangoLayout -> EventM EExpose Bool
updateCanvas text = do
win <- eventWindow
liftIO $ do
(width,height) <- drawableGetSize win
gc <- gcNew win
gcSetValues gc $ newGCValues {
foreground = Color 65535 0 0,
capStyle = CapRound,
lineWidth = 20,
joinStyle = JoinRound
}
drawLines win gc [(30,30),(width-30,height-30),(width-30,30),(30,height-30)]
gcSetValues gc $ newGCValues {
foreground = Color 65535 65535 0,
lineWidth = 4
}
drawArc win gc False 0 0 width height (135*64) (90*64)
drawLayoutWithColors win gc 30 (height `div` 2) text
(Just (Color 0 0 0)) Nothing
return True
|