9.4 文字を描く関数

drawstr 文字列を描く

drawstr(win, x, y, s, t, format...)

(x, y) から s のサイズで文字を描く。t は文字列の回転角を示すがいまは機能しないので0.0などを与えておく。x, y, t は実数型、s は整数型で 1-24 を与える。format は描画する文字列(文字型配列)。
例:座標位置 (250, 120) から 16 のサイズで「Very Happy!」と描かせる。

drawstr(win, 250.0, 120.0, 16, 0.0, "Very Happy!");

format は printf() 関数で使われるフォーマット指定に等しいもので、%d などの変換文字を使った操作ができる。
例:座標位置 (250, 120) から 24 のサイズで「temperature=25」と描かせる。

s=24; v=25;
drawstr(win, 250.0, 120.0, s, 0.0, "temperature=%d",v);

漢字やひらがなを表示させるには以下のようにサイズに FONTSET と書く。

drawstr(win, 250.0, 120.0, FONTSET, 0.0, "ひらがな");

よりきれいな日本語を表示させたいときは次の gsetfontset関数を参照。

文字コード

ところで文字コードには注意が必要です。EGGX は基本的には EUC コードであることを前提にしています。UTF-8 でもほとんどの文字は正しく表示されると思いますが、もしうまく文字が表示されない場合は EUC コードに変換してコンパイルしてみると良いでしょう。

例えば MacOSXでは UTF-8 が標準です。MacEmacs を使っている場合にはプログラムを編集している時のモードラインの先頭部分に注目してください。

MacEmacs モードライン

これが上のように「-u:」と出ておれば、ファイルの文字コードが UTF-8 であることを示しています。EUC の場合は「-E:」となります。もし UTF-8 であった場合は、nkf などのツールを使って EUC に変換してください。

gsetfontset きれいな文字を描く

gsetfontset(win, fontset...)

fontset は文字列(文字配列)で、使用するフォントセットを指定する。ここで正確にフォントセットとサイズを指定すると、かなりきれいな文字を描画させることができる。
フォントセットの指定に成功すると整数型で戻り値 0 を返す。代替フォントの設定が可能であった場合は 1、そのフォントの設定が出来なかった場合は -1 を返す。
例:ゴシック体で 24 のサイズで「きれいな文字」と描画する。

gsetfontset(win,"-*-gothic-medium-r-normal--24-*-*-*-c-*-*-*");
drawstr(win, 250.0, 120.0, FONTSET, 0.0, "きれいな文字");

明朝体の場合は以下のようにする。

gsetfontset(win,"-*-mincho-medium-r-normal--24-*-*-*-c-*-*-*");

第二引数 fontset は printf() 関数で使われるフォーマット指定に等しいもので、%d などの変換文字を使った操作ができる。
例:サイズ 24 の値を変数を使って設定する。

int fontsize;
fontsize=24;
gsetfontset(win,"-*-gothic-medium-r-normal--%d-*-*-*-c-*-*-*",fontsize);

他にどのようなフォントが利用可能か調べるには xfontsel コマンドを用いると良い。

MacOSX での日本語フォントの指定

上記の説明は主として Linux 環境のもので、MacOSXでは幾らか注意が必要です。
具体的には gothicやminchoが用意されないため、以下のように fixed を充てるようにしてください。

gsetfontset(win,"-*-fixed-medium-r-normal--%d-*-*-*-*-*-*-*",14);
drawstr(win, 50.0, 260.0, FONTSET, 0.0, "14ドットのfixedな文字");

英文フォントにプロポーショナルなものを利用したい場合は gsetfontset() の指定を 1 バイト文字、2バイト文字でそれぞれ別に行います。
以下は24ドットの例。1バイト文字のフォント指定が helvetica になっています。

gsetfontset(win,"-*-helvetica-medium-r-normal--24-*-*-*-*-*-iso8859-1, "
            "-jis-fixed-medium-r-normal--24-*-*-*-*-*-jisx0208.1983-0");
drawstr(win, 50.0, 110.0, FONTSET, 0.0, "Proportionalな表示");

上記の 24 のところを14 あるいは 16 に変更することでそれぞれ 14, 16 ドットの文字が使えます。残念ながらそれ以外のサイズには柔軟に対応できませんのであしからず。(ドットが粗くなります)
また xfontsel コマンドは MacOSX では用意されません。/usr/X11/lib/X11/fonts/misc/fonts.alias ファイルを見ると良いでしょう。

(資料:サンプルプログラム kanjidrawing.c実行結果を見比べてください)


Yutaka Yasuda (yasuda@bakkers.gr.jp)