2012-11-11 71 views
2

在下面的程序中,我使用cairo-0.12.2來繪製一些帶有字母的小框。不幸的是,當我使用translate函數來移動用戶空間原點時,該矩形被翻譯,但文本不是。爲什麼不cairo翻譯文本?

import Graphics.Rendering.Cairo 

main = withSVGSurface "test.svg" 600 600 
    (`renderWith` draw) 

draw = do 
    color white 
    rectangle 0 0 600 600 
    fill 
    newPath 
    color black 
    translate 300 300 
    drawSortBox 
    translate 200 200 
    drawSortBox 
    stroke 

drawSortBox = do 
    showText "V Ʌ" 
    a <- textExtents "V Ʌ" 
    rectangle (textExtentsXbearing a - 2) (textExtentsYbearing a - 2) (textExtentsWidth a/2 + 2) (textExtentsHeight a + 4) 
    rectangle (textExtentsXbearing a - 2) (textExtentsYbearing a - 2) (textExtentsWidth a + 4) (textExtentsHeight a + 4) 

color (a,b,c) = setSourceRGB a b c 

white = (255,255,255) 
black =(0,0,0) 

回答

5

根據文檔,showText從當前位置開始繪製文本。 translate移動原點,但不移動當前位置。您必須使用moveTo而不是translate來選擇文字的位置。 (translate恰好適用於第一個呼叫的事實與newPath刪除當前位置有關。)