Museum

Home

Lab Overview

Retrotechnology Articles

Online Manuals

⇒ XLoadFont(3X11) — NEWS-os 4.2.1R

Media Vault

Software Library

Restoration Projects

Artifacts Sought

Related Articles

XCreateGC(3X11)

XListFonts(3X11)

XSetFontPath(3X11)

XLoadFont(3X11)  —  NEWS-OS Programmer’s Manual

名称

XLoadFont, XQueryFont, XLoadQueryFont, XFreeFont, XGetFontProperty, XUnloadFont, XCharStruct, XFontProp, XChar2b, XFontStruct − フォントまたはフォントメトリック構造体を、ロードまたはアンロードする

形式

Font XLoadFont(display, name)
      Display ∗display;
      char ∗name; 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;

引数

atom返したいプロパティのアトムを指定します。

displayX サーバへのコネクションを指定します。

fontフォントを指定します。

font_IDフォント ID または GContext ID を指定します。

font_structフォントに関する記憶領域を指定します。

gcGC を指定します。

nameナルで終わる文字列であるフォント名を指定します。

value_returnフォントプロパティの値を返します。

解説

XLoadFont 関数は指定されたフォントをロードし、対応するフォント ID を返します。 フォント名がホストポータブル文字コード (Host Portable Character Encoding) にない場合は、 結果は、インプリメンテーションにより異なります。 大文字、小文字は両方使用できます。 名前の中で‘?’および‘∗’がどう解釈 されるかは、プロトコルでは定義されていませんが、将来の定義のために 予約されています。 フォント名の構造化フォーマットが、 X コンソシアムスタンダードの X Logical Font Description Conventions で定められています。 指定されたフォントのロード時に XLoadFont が失敗すると、 BadName エラーが生じます。 フォントは特定のスクリーンと対応せず、 GC の構成要素としてストアできます。 フォントが必要なくなれば、 XUnloadFont をコールします。 XLoadFont は、 BadAlloc および BadName エラーを生じることがあります。 XQueryFont 関数は、フォントと対応する情報を含む XFontStruct 構造体を指すポインタを返します。 フォントまたは GC にストアされたフォントを問合わせることができます。 XFontStruct 構造体にストアされたフォント ID は GContext ID であり、他の関数でこの ID を使用する場合に注意しなければ なりません( XGContextFromGC を参照してください)。 フォントが存在しない場合は、 XQueryFont は NULL を返します。 このデータを解放するには、 XFreeFontInfo を使用します。 XLoadQueryFont は、 BadAlloc エラーを生じることがあります。 XLoadQueryFont 関数は、フォントをアクセスするための最も一般的な手段です。 XLoadQueryFont は、指定されたフォントをオープン(ロード)し、該当する XFontStruct 構造体を指すポインタを返します。 フォント名がホストポータブル文字コード (Host Portable Character Encoding) に存在しなければ、 結果は、インプリメンテーションにより異なります。 フォントが存在しない場合は、 XLoadQueryFont は NULL を返します。 XFreeFont 関数は、フォントリソース ID と指定されたフォント間の結合を削除し、 XFontStruct 構造体を解放します。 フォントそれ自体は、他のいかなるリソースもこれを参照していなければ、 解放されます。 データとフォントを再び参照してはなりません。 XFreeFont は、 BadFont エラーを生じることがあります。 このプロパティのアトムが与えられると、 XGetFontProperty 関数は、指定されたフォントプロパティの値を返します。また、 XGetFontProperty は、プロパティが定義されなければ False、 定義された場合 True を返します。 フォントプロパティについては、定義済みのアトムの集合があります。 これは <X11/Xatom.h> にあります。 この集合は、フォントと対応する標準プロパティを含んでいます。 保証はしませんが、多くの場合定義済みのフォントプロパティがあります。 XUnloadFont 関数は、フォントリソース ID と指定されたフォント間の結合を削除します。 フォントそれ自体は、他のいかなるリソースもこれを参照していなければ、 解放されます。 フォントは、再び参照してはなりません。 XUnloadFont は、 BadFont エラーを生じることがあります。

構造体

XFontStruct 構造体は、フォントに関するすべての情報を持ち、 また、フォント中のキャラクタに関する XCharStruct 構造体の配列へのポインタのような、フォント特有の情報から構成されています。 XFontStruct、 XFontPropおよび XCharStruct 構造体は、次のように定義されます。

typedef struct {
short lbearing;/∗ origin to left edge of raster ∗/
short rbearing;/∗ origin to right edge of raster ∗/
short width;/∗ advance to next char’s origin ∗/
short ascent;/∗ baseline to top edge of raster ∗/
short descent;/∗ baseline to bottom edge of raster ∗/
unsigned short attributes;/∗ per char flags (not predefined) ∗/
} XCharStruct;

typedef struct {
Atomname;
unsigned longcard32;
} XFontProp;

typedef struct {/∗ normal 16 bit characters are two bytes ∗/
unsigned charbyte1;
unsigned charbyte2;
} XChar2b;

typedef struct {
XExtData ∗ext_data;/∗ hook for extension to hang data ∗/
Font fid;/∗ Font id for this font ∗/
unsigned direction;/∗ hint about the direction font is painted ∗/
unsigned min_char_or_byte2;/∗ first character ∗/
unsigned max_char_or_byte2;/∗ last character ∗/
unsigned min_byte1;/∗ first row that exists ∗/
unsigned max_byte1;/∗ last row that exists ∗/
Bool all_chars_exist;/∗ flag if all characters have nonzero size ∗/
unsigned default_char;/∗ char to print for undefined character ∗/
int n_properties;/∗ how many properties there are ∗/
XFontProp ∗properties;/∗ pointer to array of additional properties ∗/
XCharStruct min_bounds;/∗ minimum bounds over all existing char ∗/
XCharStruct max_bounds;/∗ maximum bounds over all existing char ∗/
XCharStruct ∗per_char;/∗ first_char to last_char information ∗/
int ascent;/∗ logical extent above baseline for spacing ∗/
int descent;/∗ logical decent below baseline for spacing ∗/
} XFontStruct;

X は 1 バイト/文字、2 バイト/文字のマトリクス、および 16ビット文字の テキスト操作をサポートします。 あるフォントに対して、これらのどのフォームも使用できますが、 1 バイト/文字テキストのリクエストには、1 バイト (すなわち 2 バイトフォントの第 1 列) しか指定できません。 2 バイトフォントは、2 次元配列上に文字を定義したものと考えられます。 第 1 バイトは列、第 2 バイトは行の範囲を指定します。 1 バイト/文字のフォントは 1 列で定義されており、 構造体で指定する第 2 バイトの範囲は、文字の範囲を定義しています。 ある文字の境界ボックスは、その文字の XCharStruct によって定義されます。文字がフォント中にない場合、 デフォルト文字が使用されます。 フォント中の文字がすべて同じサイズである場合は、 XFontStruct の min_bounds および max_bounds の情報のみが使用されます。 XFontStruct のメンバは次のような意味を持っています。

•direction メンバは FontLeftToRight か FontRightToLeft のどちらかの値になります。これは、 XCharStruct の大部分が正( FontLeftToRight )あるいは負( FontRightToLeft )の寸法を持つことを示すものです。 コアプロトコルでは縦書きテキストはサポートしていません。

•min_byte1 および max_byte1 メンバの 両方がゼロの場合、 min_char_or_byte2 は配列 per_char の最初の要素に相当する 線形なインデクス、 max_char_or_byte2 は最後の要素に相当する 線形なインデクスとなります。

min_byte1 か max_byte1 のどちらかがゼロでない場合は、 min_char_or_byte2、max_char_or_byte2 ともに256以下の値となり、 配列 per_char の要素 N に相当する 2 バイト文字へのインデクスは次の 式で表されます。

byte1 = N/D + min_byte1
byte2 = N\D + min_char_or_byte2

D = max_char_or_byte2 − min_char_or_byte2 + 1
/ = integer division
\ = integer modulus

•per_char が NULL のときは、最初の インデクスから最後のインデクスの間のすべての文字イメージは、 min_bounds と max_bounds で与えられる同じ情報を持ちます。

•all_chars_exist が True なら、per_char にあるすべての文字はゼロでない境界ボックスを持ちます。

•default_char メンバは、定義されていないあるいは 存在しない文字を表示しようとしたときに代わりに用いる文字を 指定します。 default_char は 16ビット文字です(2 バイト文字ではありません)。 2 バイトの行列フォーマットのフォントに対しては、 default_char は上位バイトに第 1 バイトを、下位バイトに第 2 バイトを 持ちます。 default_char 自身、定義されないあるいは存在しない文字である場合、 定義されないあるいは存在しない文字は表示されません。

•min_bounds および max_bounds は、この配列全体を通して、個々の XCharStruct のメンバのうちから、 もっとも極端な値をとります(存在しない文字は無視します)。 フォントの境界ボックス(すべての文字を同じ原点 [x,y] で 重ね合わせたものを囲むもっとも小さな矩形)の左上の座標は

[x + min_bounds.lbearing, y − max_bounds.ascent]

となります。

この幅は

max_bounds.rbearing − min_bounds.lbearing

高さは

max_bounds.ascent + max_bounds.descent

です。

•ascent メンバは、ベースラインより上の、フォントの論理的な大きさを 示し、行間を決めるのに用いられます。特殊な文字はこれを越えることが あります。

•descent メンバは、ベースラインより下の、フォントの論理的な大きさを 示し、やはり 行間を決めるのに用いられます。特殊な文字はこれを越えることがあります。

•ベースラインの Y-座標が y であるとき、フォントの論理的な大きさは Y-座標値 (y − font.ascent) から (y + font.descent − 1) です。 テキストの行間の最小値は普通、ascent + descent で与えられます。 ある文字の原点 [x,y] に対して、 XCharStruct によって記述されている、文字の境界ボックス(すなわち、 その文字の形を囲むもっとも小さな矩形)の左上の座標は 次のようになります。

[x + lbearing, y − ascent]

その幅は

rbearing − lbearing

Its height is:

ascent + descent

次の文字の原点は次のようになります。

[x + width, y]

lbearing メンバは原点から文字イメージの左端までの距離を定義します。 rbearing メンバは原点から文字イメージの右端までの距離を定義します。 ascent メンバは原点から文字イメージの上端までの距離を定義します。 descent メンバは原点から文字イメージの下端までの距離を定義します。 width メンバは文字の論理的な幅を定義します。

診断

BadAlloc サーバが、要求されたリソースまたはサーバメモリの割り当てに失敗した。

BadFont Font または GContext 引数の値が定義された Font を指さない。

BadName 指定された名前のフォントまたはカラーが存在しない。

関連事項

XCreateGC(3X11), XListFonts(3X11), XSetFontPath(3X11)
Xlib − C Language X Interface

NEWS-OSRelease 4.2.1R

Typewritten Software • bear@typewritten.org • Edmonds, WA 98026