From: Daniel W. <dm...@lu...> - 2013-05-08 21:36:46
|
diffing dir... Mon Apr 8 05:52:02 BST 2013 Hamish Mackenzie <ham...@go...> * Add a cairo demo that uses Gtk3 Ignore-this: 4c8096e1ea3fe9b7c3e3a51b5a6628a0 addfile ./cairo/demo/DrawingGtk3.hs hunk ./cairo/demo/DrawingGtk3.hs 1 +-- Example of an drawing graphics onto a canvas. +import Graphics.UI.Gtk +import Graphics.Rendering.Cairo +import Graphics.UI.Gtk.Gdk.EventM + +main = do + initGUI + dia <- dialogNew + dialogAddButton dia stockOk ResponseOk + contain <- dialogGetContentArea dia + canvas <- drawingAreaNew + canvas `on` sizeRequest $ return (Requisition 40 40) + ctxt <- cairoCreateContext Nothing + text <- layoutEmpty ctxt + text `layoutSetText` "Hello World." + canvas `on` draw $ updateCanvas canvas text + boxPackStart (castToBox contain) canvas PackGrow 0 + widgetShow canvas + dialogRun dia + return () + +updateCanvas :: WidgetClass widget => widget -> PangoLayout -> Render () +updateCanvas canvas text = do + width' <- liftIO $ widgetGetAllocatedWidth canvas + height' <- liftIO $ widgetGetAllocatedHeight canvas + let width = realToFrac width' + height = realToFrac height' + + setSourceRGB 1 0 0 + setLineWidth 20 + setLineCap LineCapRound + setLineJoin LineJoinRound + + moveTo 30 30 + lineTo (width-30) (height-30) + lineTo (width-30) 30 + lineTo 30 (height-30) + stroke + + setSourceRGB 1 1 0 + setLineWidth 4 + + save + translate (width / 2) (height / 2) + scale (width / 2) (height / 2) + arc 0 0 1 (135 * pi/180) (225 * pi/180) + restore + stroke + + setSourceRGB 0 0 0 + moveTo 30 (realToFrac height / 4) + rotate (pi/4) + showLayout text + + |