XDrawText16(display, d, gc, x, y, items, nitems)
Display *display;
Drawable d;
GC gc;
int x, y;
XTextItem16 *items;
int nitems;
各テキストアイテムは順番に処理される。 アイテム内に None 以外の font メンバがある場合、そのフォントは GC に格納され、これに続くテキストに対して使用される。 テキスト要素 delta は文字列が描画される前の x 軸に沿っての位置の追加的 な変位を指定する。 delta は常に文字の原点に追加され、フォントのいかなる特性にも依存しない。 各文字のイメージは、GC 内のフォントで定義されるので、ドロウアブルの fill 操作への追加マスクとして扱われる。 ドロウアブルはフォントの文字が1にセットされているビットを持つ点でのみ 変更される。 テキストアイテムが BadFont エラーを起こした場合も、その前のテキストアイテムはおそらく既に描画され ている。
2バイトの行列形式のインデックスでなく線形インデックスで定義されたフォ ントに対しては、各 XChar2b 構造体は最上位バイトが byte1 である16ビットの数として解釈される。
どちらの関数も以下の GC コンポーネントを使用する。 function, plane-mask, fill-style, font, subwindow-mode, clip-x-origin, clip-y-origin, clip-mask。 また、以下の GC モード依存コンポーネントも使用する。 foreground, background, tile, stipple, tile-stipple-x-origin, tile-stipple-y-origin。
XDrawText と XDrawText16 はエラー BadDrawable, BadFont, BadGC, BadMatch を起こすことがある。
typedef struct { char *chars; /* 文字列へのポインタ */ int nchars; /* 文字数 */ int delta; /* 文字列間の変化量 */ Font font; /* 表示に使うフォント。None ならば変更無し */ } XTextItem;
typedef struct { XChar2b *chars; /* 2バイト文字列へのポインタ */ int nchars; /* 文字数 */ int delta; /* 文字列間の変化量 */ Font font; /* 表示に使うフォント。None ならば変更無し */ } XTextItem16;
font メンバが None でない場合、表示前にフォントは切替えられ、新たなフォントが GC に格納さ れる。 テキスト描画中にエラーが発生した場合も、それより前のテキストアイテムは 表示される。 文字のベースラインはテキスト描画関数で指定した x, y 座標を起点に描画さ れる。
例として、 XDrawImageString によって描画される背景色の長方形を考える。 背景の長方形の左上隅をピクセル座標 (x, y) としたい場合には、テキスト関 数へは (x, y + ascent) をベースライン原点の座標として渡す。 ここで、ascent はフォントの ascent 値であり、 XFontStruct 構造体で与えられる。 背景の長方形の左下隅をピクセル座標 (x, y) にしたい場合には、テキスト関 数へは (x, y, - descent + 1) をベースライン原点の座標として渡す。 descent は XFontStruct 構造体で与えられる、フォントの descent 値である。