2016-10-16 4 views
1

私は、特定の幅と高さを持つように設定できるテキストボックスを作成したいと思います。しかし、私が作成するテキストボックスは、最初に幅と高さがないように見えます。例えば。次のコードをテキストボックスの幅及び高さハスケルの図:テキストに長さや幅がないのはなぜですか?

main = do 
    putStrLn $ show $ width $ myText 
    putStrLn $ show $ height $ myText 
    mainWith myText 

myText :: Diagram B 
myText = text "here" # lw 1 # fontSizeL 0.2 # fc grey # scaleX 1 

(テキストなしで)ブランク図中結果、及びプリント「0.0」:

ghc --make Main.hs && ./Main -o circle.svg -w 400 
[1 of 1] Compiling Main    (Main.hs, Main.o) 
Linking Main ... 
0.0 
0.0 

するために私は他の何かの上に置く必要があるように見えるようにテキストを取得します。例えば。次のコード:

main = do 
    putStrLn $ show $ width $ myDiagram 
    putStrLn $ show $ height $ myDiagram 
    mainWith myDiagram 

myDiagram :: Diagram B 
myDiagram = myText <> myBackground 

myText :: Diagram B 
myText = text "here" # lw 1 # fontSizeL 0.2 # fc grey # scaleX 1 

myBackground :: Diagram B 
myBackground = rect 1 1 # fc black 

は、期待どおりに黒い背景内に灰色のテキストを生成します。


なぜテキストボックスにサイズがありませんか?

テキストボックスの長さと幅を特定の値に設定するにはどうすればよいですか?

答えて

3

なぜテキストボックスにサイズがありませんか?

テキスト処理だけでなく図(参照the User's Guide)だけでなく、フォントがプログラムを実行するために使用するシステムに設定されているどのように潜在的に依存をレンダリングするために使用されるバックエンドに大きく依存しているので。

テキストボックスの長さと幅を特定の値に設定するにはどうすればよいですか?それらが存在する場合は、選択したバックエンドによって提供さ

  1. 使用テキスト処理関数。たとえば、図表 - カイロは、システムからフォント情報を照会する必要があるので、IOという重要な煩わしさを伴いながら、Pangoを使用してテキストを独自にレンダリングするfunctionsを提供します。

  2. SVGFontsを使用すると、バックエンドとは独立してテキストをストロークできます。あなたが選択したフォントをSVGFonts形式に変換するためのドキュメントの指示に従わない限り、フォントの選択肢は限られていますが、大きな文字セットのフォントは小さくても顕著な遅延につながります最初の処理を経なければならないので、あなたのプログラムで最初に使用されます)、少なくともIOまたはバックエンド特有の癖を気にする必要はありません。

+1

scaleUToXのSVGFontsは、テキストの幅を設定するためにうまくいきます。答えをありがとう! – mherzl

関連する問題