所以從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一文
沒有留言:
張貼留言