module Graphics.Rendering.Chart.Gtk(
renderableToWindow
) where
import qualified Graphics.UI.Gtk as G
import qualified Graphics.Rendering.Cairo as C
import Graphics.Rendering.Chart
import Graphics.Rendering.Chart.Renderable
renderableToWindow :: Renderable -> Int -> Int -> IO ()
renderableToWindow chart windowWidth windowHeight = do
G.unsafeInitGUIForThreadedRTS
window <- G.windowNew
canvas <- G.drawingAreaNew
G.widgetSetSizeRequest window windowWidth windowHeight
G.onKeyPress window $ const (do G.widgetDestroy window; return True)
G.onDestroy window G.mainQuit
G.onExpose canvas $ const (updateCanvas chart canvas)
G.set window [G.containerChild G.:= canvas]
G.widgetShowAll window
G.mainGUI
updateCanvas :: Renderable -> G.DrawingArea -> IO Bool
updateCanvas chart canvas = do
win <- G.widgetGetDrawWindow canvas
(width, height) <- G.widgetGetSize canvas
let rect = Rect (Point 0 0) (Point (fromIntegral width) (fromIntegral height))
G.renderWithDrawable win (rfn rect)
return True
where
rfn rect = do
alignPixels
render chart rect