2012-11-11 3 views
2

다음 프로그램에서는 cairo-0.12.2을 사용하여 작은 상자에 글자가 그려져 있습니다. 불행히도, 사용자 공간 원점을 이동하기 위해 translate 함수를 사용하면 사각형이 변환되지만 텍스트는 변환되지 않습니다.왜 카이로는 텍스트를 번역하지 않습니까?

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은 원점을 이동하지만 현재 위치는 이동하지 않습니다. 텍스트 위치를 선택하려면 translate 대신 moveTo을 사용해야합니다. (translate이 첫 번째 호출을 위해 작업 한 사실은 newPath이 현재 위치를 제거한다는 것과 관련이 있습니다.

관련 문제