XFontStruct *XQueryFont(display, font_ID)
Display *display;
XID font_ID;
XFontStruct *XLoadQueryFont(display, name)
Display *display;
char *name;
XFreeFont(display, font_struct)
Display *display;
XFontStruct *font_struct;
Bool XGetFontProperty(font_struct, atom, value_return)
XFontStruct *font_struct;
Atom atom;
unsigned long *value_return;
XUnloadFont(display, font)
Display *display;
Font font;
XLoadFont はエラー BadAlloc, BadName を起こすことがある。
XQueryFont 関数は XFontStruct 構造体へのポインタを返す。 この構造体はフォントに関連する情報を持っている。 クライアントはフォントやGCに格納されているフォントを問い合わせることが できる。 XFontStruct 構造体に含まれるフォントIDは GContext のIDであり、他の関数でこの GC を使うときには注意する必要がある( XGContextFromGC を参照)。 フォントが存在しなければ XQueryFont は NULL を返す。 このデータを解放するには XFreeFontInfo を使用すること。
XLoadQueryFont はエラー BadAlloc を起こすことがある。
関数 XLoadQueryFont はフォントにアクセスする手段のうち、最も一般的なものである。 XLoadQueryFont は指定したフォントをオープン(ロード)し、適切な XFontStruct 構造体へのポインタを返す。 フォント名のエンコーディングがホストポータブル文字エンコーディングでな い場合、実行結果は実装依存である。 フォントが存在しない場合 XLoadQueryFont は NULL を返す。
関数 XFreeFont はフォントのリソースIDと指定したフォントの関連を削除し、 XFontStruct 構造体を解放する。 フォントそのものは他のリソースから参照されなくなったときに解放される。 このデータとフォントは再び参照してはならない。
XFreeFont はエラー BadFont を起こすことがある。
プロパティに対するアトムを与えると、 XGetFontProperty は指定したフォントプロパティの値を返す。 XGetFontProperty はプロパティが定義されていなければ False を返し、定義されていれば True を返す。 フォントプロパティとして予め定義されているアトムがあり、これは <X11/Xatom.h> で定義されている。 これらのアトムにはフォントに関連する標準的なプロパティが含まれている。 保証はされていないが、予め定義されているフォントプロパティはたいてい存 在する。
関数 XUnloadFont はフォントリソースIDと指定したフォントの関連を削除する。 フォントそのものは他のリソースから参照されなくなったときに解放される。 このフォントを再び参照してはならない。
XUnloadFont はエラー BadFont を起こすことがある。
typedef struct { short lbearing; /* 原点からラスタ領域の左端までの距離 */ short rbearing; /* 原点からラスタ領域の右端までの距離 */ short width; /* 次の文字の原点へ進む量 */ short ascent; /* ベースラインからラスタ領域の上端までの距離 */ short descent; /* ベースラインからラスタ領域の下端までの距離 */ unsigned short attributes;/* 文字毎のフラグ (予め定義されてはいない) */ } XCharStruct;
typedef struct { Atom name; unsigned long card32; } XFontProp;
typedef struct { /* 通常の16ビット文字は2バイトである */ unsigned char byte1; unsigned char byte2; } XChar2b;
typedef struct { XExtData *ext_data; /* データを持つ拡張のためのフック */ Font fid; /* このフォントのフォントID */ unsigned direction; /* フォントの描画方向に関するヒント */ unsigned min_char_or_byte2;/* 最初の文字 */ unsigned max_char_or_byte2;/* 最後の文字 */ unsigned min_byte1; /* 存在する最初の列 */ unsigned max_byte1; /* 存在する最後の列 */ Bool all_chars_exist; /* 全ての文字が 0 でない大きさを持つかどうかのフラグ */ unsigned default_char; /* 未定義文字の表示に使う文字 */ int n_properties; /* いくつプロパティがあるか */ XFontProp *properties; /* 追加プロパティの配列へのポインタ */ XCharStruct min_bounds; /* 存在する全ての文字中の最小値 */ XCharStruct max_bounds; /* 存在する全ての文字中の最大値 */ XCharStruct *per_char; /* first_char から last_char の情報 */ int descent; /*スペーシングのためのベースラインの下の論理的な広さ */ } XFontStruct;
X は 1バイト/文字の形式、2バイト/文字の行列形式と、16ビット文字形式の テキスト操作をサポートしている。 あるフォントはこれらの形式のいずれでも使用できるが、1バイト/文字のテキ ストのリクエストだけが単独のバイト(つまり、2バイトフォントの最初の列) を指定できる。 2バイトフォントは定義された文字の2次元行列として見るべきである。 byte1 はフォントの定義された列の範囲を指定し、byte2 は定義された行の範 囲を定義する。 1バイト/文字のフォントは列が1つ定義されており、構造体で定義された byte2 は文字の範囲を定義する。
文字のバウンディングボックスは文字の XCharStruct によって定義される。 フォントに含まれていない文字があるときにはデフォルト文字が使用される。 フォントの全ての文字のサイズが同じであるとき、 XFontStruct 構造体の min_bounds と max_bounds の情報だけが使用される。
XFontStruct のメンバは以下の意味を持つ。
byte1 = N/D + min_byte1
byte2 = N\D + min_char_or_byte2
D = max_char_or_byte2 - min_char_or_byte2 + 1 / = 整数の商 \ = 整数の剰余
[x + min_bounds.lbearing, y - max_bounds.ascent]
max_bounds.rbearing - min_bounds.lbearing
max_bounds.ascent + max_bounds.descent
原点が[x, y]にある文字について、 XCharStruct コンポーネントを用いて記述される、文字のバウンディングボックス(つまり 文字の形を囲む最小の長方形)は、次のようになる:
[x + lbearing, y - ascent]
幅は次のようになる:
rbearing - lbearing
高さは次のようになる:
ascent + descent
隣の文字の原点は次のように定義される:
[x + width, y]
lbearing メンバは原点から文字が実際に描画される部分の左端までの大きさ を定義する。 rbearing メンバは原点から文字が実際に描画される部分の右端までの大きさ を定義する。 ascent メンバは原点から文字が実際に描画される部分の上端までの大きさを 定義する。 descent メンバは原点から文字が実際に描画される部分の下端までの大きさを 定義する。 width メンバは文字の論理的な幅を定義する。