RSS

gtk2hs + Cairo

Cairoでdrawing。monadがどうのとかいう話があって理論面ではややこしいが真似して書いてそのうち理解できるかな?一つのサンプルをそのままコピペできずにいろいろ繋ぎあわせるので頭を使う。

module Main where

import Graphics.UI.Gtk
import Graphics.Rendering.Cairo
import Control.Monad.Trans(liftIO)

main = do
    initGUI
    window <- windowNew
    widgetSetSizeRequest window 640 400
    on window exposeEvent $ do
      drawWin <- eventWindow
      liftIO $ do
        putStrLn "expose"
        renderWithDrawable drawWin $ do
          rectangle 50 50 100 100 
          fill
          setSourceRGB 1 0 0
          arc 200 200 30 0 (1 * pi)
          fill
          stroke
        return True
    on window deleteEvent (liftIO $ do 
                              mainQuit
                              return False)
    widgetShowAll window
    mainGUI