共通デスクトップ環境 プログラマーズ・ガイド (国際化対応編)

フォント・リスト構造

デスクトップには、テキスト表示用にフォント・リストが必要です。フォント・リストは、フォント構造体か、フォント・セットか、その両方のリストであり、それぞれに識別のためのタグがあります。フォント・セットは、現在の言語のすべての文字が確実に表示できるようにします。フォント構造体により、すべての文字が確実に表示できるようにするのは、(ロケールのコード・セットからグリフ索引への変換を含めて) プログラマの責任です。

フォント・リストの各エントリの形式は、{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 つの引き数は次のとおりです。

displayID

フォント・リストが使用されるディスプレイ

fontname

フォント名かベース・フォント名リストのいずれか (nametype 引き数による) を表す文字列

nametype

fontname 引き数がフォント名とベース・フォント名リストのどちらを表すかを指定する値

tag

そのフォント・リスト・エントリのタグを表す文字列

nametype 引き数が XmFONT_IS_FONTSET の場合、XmFontListEntryLoad() 関数は fontname 引き数の値からフォント・セットを現在のロケールに作成します。フォント・セットに指定されたフォントの文字セットは、ロケールに依存します。nametypeXmFONT_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_tagXmFONT_IS_FONTSETfont2 であり、それぞれタグ、型、フォントです。タグおよびフォント・セットは、フォント・リスト・エントリの {tag, element} の組み合わせです。

このエントリをフォント・リストに追加するには、XmFontListAppendEntry() 関数を再度使用します。このときのみ最初のパラメータが既存のフォント・リストを指定します。

font_list = XmFontListAppendEntry(font_list, font_list_entry2); 
XmFontListEntryFree(font_list_entry2);