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)
4

1 に答える 1

5

ドキュメントによるとshowText、現在の場所からテキストを描画します。translate原点を移動しますが、現在の場所は移動しません。テキストの場所を選択するmoveTo代わりにを使用する必要があります。translatetranslate最初の呼び出しでたまたま機能したという事実newPathは、現在の場所を削除するという事実に関連しています。)

于 2012-11-11T19:22:35.867 に答える