デスクトップは、テキストを表示するためにフォント・リストを使用します。フォントは、指定された文字セットの文字を表現するグリフのセットを定義します。フォント・セットは、指定されたロケールまたは言語のテキストを表示するのに必要なフォントの集まりです。フォント・リストは、使用されるフォントか、フォント・セットか、その両方のリストです。Motif にはフォント・リストを作成する簡易関数があります。
デスクトップには、テキスト表示用にフォント・リストが必要です。フォント・リストは、フォント構造体か、フォント・セットか、その両方のリストであり、それぞれに識別のためのタグがあります。フォント・セットは、現在の言語のすべての文字が確実に表示できるようにします。フォント構造体により、すべての文字が確実に表示できるようにするのは、(ロケールのコード・セットからグリフ索引への変換を含めて) プログラマの責任です。
フォント・リストの各エントリの形式は、{tag, element } の組み合わせです。element は単一のフォントかフォント・セットのいずれかです。アプリケーションは、単一のフォントとフォント・セットのどちらからでもフォント・リスト・エントリを作成できます。たとえば、次のコード・セグメントはフォント・セットのフォント・リスト・エントリを作成します。
char font1[] = "-adobe-courier-medium-r-normal--10-100-75-75-M-60"; font_list_entry = XmFontListEntryLoad (displayID, font1, XmFONT_IS_FONTSET, "font_tag");
XmFontListEntryLoad() 関数は、フォントを読み込むか、またはフォント・セットを作成して読み込みます。この関数の 4 つの引き数は次のとおりです。
フォント・リストが使用されるディスプレイ
フォント名かベース・フォント名リストのいずれか (nametype 引き数による) を表す文字列
fontname 引き数がフォント名とベース・フォント名リストのどちらを表すかを指定する値
そのフォント・リスト・エントリのタグを表す文字列
nametype 引き数が XmFONT_IS_FONTSET の場合、XmFontListEntryLoad() 関数は fontname 引き数の値からフォント・セットを現在のロケールに作成します。フォント・セットに指定されたフォントの文字セットは、ロケールに依存します。nametype が XmFONT_IS_FONT の場合、XmFontListEntryLoad() 関数は fontname にあるフォントをオープンします。どちらの場合も、フォントまたはフォント・セットがフォント・リスト・エントリに置かれます。
次のコード例は、新しいフォント・リストを作成し、そこにエントリfont_list_entry を追加します。
XmFontList font_list; XmFontListEntry font_list_entry; . . font_list = XmFontListAppendEntry (NULL, font_list_entry); XmFontListEntryFree (font_list_entry);
フォント・リストが作成されると、XmFontListAppendEntry() 関数がそこに新しいエントリを追加します。次の例は、XmFontListEntryCreate() 関数を使用して既存のフォント・リストに新しいフォント・リスト・エントリを作成します。
XFontSet font2; char *font_tag; XmFontListEntry font_list_entry2; . . font_list_entry2 = XmFontListEntryCreate (font_tag, XmFONT_IS_FONTSET, (XtPointer)font2);
font2 パラメータは XCreateFontSet() 関数に返された XFontSet を指定します。XmFontListEntryCreate() 関数の引き数は font_tag、XmFONT_IS_FONTSET、font2 であり、それぞれタグ、型、フォントです。タグおよびフォント・セットは、フォント・リスト・エントリの {tag, element} の組み合わせです。
このエントリをフォント・リストに追加するには、XmFontListAppendEntry() 関数を再度使用します。このときのみ最初のパラメータが既存のフォント・リストを指定します。
font_list = XmFontListAppendEntry(font_list, font_list_entry2); XmFontListEntryFree(font_list_entry2);
リソース・ファイルにフォント・リストを指定する形式は、リストに含まれるものがフォントか、フォント・セットか、その両方かによって異なります。
フォントを獲得するには、フォントとオプションのフォント・リスト要素タグを指定します。
タグがある場合は、その前に = (等号記号) を付けます。
タグがない場合は、= (等号記号) を使用しないでください。
複数のフォントを指定するエントリは、, (カンマ) で区切られます。
フォント・セットを獲得するには、ベース・フォント・リストとオプションのフォント・リスト要素タグを指定します。
タグがある場合は、その前に = (等号記号) ではなく : (コロン) を付けます。
タグがない場合でも、コロンは必ず付けなければなりません。コロンはリソース宣言においてフォントをフォント・セットと区別するからです。
ベース・フォント・リストに指定された複数のフォントは ; (セミコロン) で区切られます。複数のフォント・セットを指定するエントリは , (カンマ) で区切られます。
フォント・リスト要素タグがない場合、デフォルトの XmFONTLIST_DEFAULT_TAG が使用されます。次に例をいくつか示します。
デフォルトのフォント・リスト要素タグを使用してフォントを指定します。
*fontList: fixed *fontList: \ -adobe-courier-medium-r-normal--10-100-75-75-M-60-iso8859-1
フォント・リスト要素タグを指定します。
*fontList: fixed=ROMAN, 8x13bold=BOLD
デフォルトのフォント・リスト要素タグと明示タグで 2 つのフォントを指定します。
*fontList: fixed, 8x13bold=BOLD
フォント・リスト要素タグがない場合、デフォルトの XmFONTLIST_DEFAULT_TAG が使用されます。次にフォント・セット指定の例をいくつか示します。
フォント・リスト要素タグを指定せずに、Xlib にフォントを選択させます。
*fontList: -dt-application-medium-r-normal-*-m*-*-*-*-m-*
Xlib にフォントを選択させ、フォント・リスト要素タグに MY_TAG を指定させます。
*fontList: -dt-application-medium-r-normal-*-m*-*-*-*-m*:MY_TAG
Xlib にフォントを選択させ、フォント・リスト要素タグにボールド指定させ、その他に関してはデフォルトのフォント・リスト要素タグを使用させます。
*fontList: -dt-application-medium-r-normal-*-m*-*-*-*-m-*:,\ -dt-application-medium-r-normal-style2-m*-*-*-*-m-*:BOLD
XmFontList() データ型は次の要素に関連付けられた 1 つ以上のエントリを含むことができます。
フォントの charset でエンコードされたテキスト (フォント・エンコード・テキスト) を描画するのに使用できる X フォント
ロケールでエンコードされたテキスト (ローカライズされたテキスト) を描画するのに使用できる XFontStruct フォントの集まり
次の形式は、文字列から XmFontList へのコンバータによって使用されます。
XmFontList := <fontentry> {', 'fontentry} fontentry := <fontname><fontid> | <baselist><fontsetid> baselist := <fontname>{';'<fontname>} fontsetid := ':'<string> | <defaultfontset> fontname := <XLFD string> fontid := '='<string> | <defaultfont> XLFD string := XLFD 仕様を参照 defaultfont := NULL defaultfontset:= ':'NULL string := 改行をのぞく ISO646IRV のすべての文字
XmFontList が指定された fontentry は、フォントかフォント・セットのいずれかを指定できます。どちらの場合も、コンパウンド・ストリング (XmString) 内のセグメントにより ID (fontid または fontsetid) が参照できます。
defaultfont と defaultfontset はいずれもデフォルトの fontentry を定義できますが、XmFontList 単位にデフォルトは 1 つだけしかありません。
XmFONTLIST_DEFAULT_TAG 識別子は、XmString が描画されるときに、常にデフォルトの fontentry を参照します。デフォルトの fontentry が指定されない場合は、最初の fontentry が描画に使用されます。
リソース・コンバータは、作成されたすべてのフォント・セットが同じロケールに関連付けられるように、単一のロケールで動作します。
実装によっては、ロケールのコード・セット名を、特別な charset ID (fontid または fontsetid) として XmFontList 文字列の中に確保します。このためアプリケーション開発者は、プラットフォーム間でポータブルなアプリケーションを作成したい場合は、コード・セット名を使用しないように注意してください。