2008年9月4日 星期四

[GTK2HS] Taste of Cairo

因為某個自己要用的軟體想要輸出簡單的SVG圖片來讓html開
所以從SVG的wiki找上了Cairo
連過去看赫然發現他有Haskell Binding
高興之餘就想說來測試看看
如果可以用就把之前的ruby版改成haskell版
就算失敗了,Cairo也有ruby binding. XD

結果在Cairo網站裡看半天也沒有看到說哪有haskell binding
最後東連連西連連才發現
原來是被放進gtk2hs裡面了
所以又回頭去翻了一下gtk2hs的網站
最後找是找到了,不過沒有太詳細的說明
和gtk2hs本身一樣,都要自己花不少時間去摸 @@


在Haskell,或說在GTK2HS的Cairo binding裡面
首先是要先產生我們的Surface(此處相當於Destination的同義詞)
然後把這個Surface傳進真正會執行Drawing的function裡面
Context的產生也會在這個function中出現
(怎麼有種Continuation的味道? XD)

來個簡單的範例吧
module Main where
    import Graphics.Rendering.Cairo
    main :: IO ()
    main = do
        withSVGSurface "sample.svg" (fromInteger 90) (fromInteger 90) myDraw
    myDraw :: Surface -> IO ()
    myDraw surface = renderWith surface $ do
        setSourceRGB 0.0 1.0 1.0
        moveTo 10.0 10.0
        relLineTo 70.0 0.0
        relLineTo 0.0 70.0
        relLineTo (-70.0) 0.0
        relLineTo 0.0 (-70.0)
        stroke

因為我是想要做SVG檔
所以這個程式就是輸出.svg
以下是輸出的截圖

更多細節請參考XXX一文

沒有留言:

張貼留言