为什么cairo不翻译文本?

时间:2012-11-11 17:49:42

标签: haskell cairo

在下面的程序中,我使用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)

1 个答案:

答案 0 :(得分:5)

根据文档,showText从当前位置开始绘制文本。 translate移动原点,但不移动当前位置。您必须使用moveTo代替translate来选择文字的位置。 (translate恰好适用于第一次通话的事实与newPath删除当前位置的事实有关。)