Appendix D 互換関数

Appendix D: 互換関数

このAppendixで述べられる X Version 11 と X Version 10 の関数は 古いものであり、さらに新しいX Version 11 の関数によって取って代われる ものであり、互換性のためにのみ保持されている。 .SH X Version 11 互換関数

次のような X Version 11 互換関数を使うことができる:

最も単純なアプリケーションを示すプロパティの最小の組を指定するには、 XSetStandardProperties を使う。 この関数は XSetWMPropertiesにより置きかえられ、 WM_NAME, WM_ICON_NAME, WM_HINTS, WM_COMMAND, WM_NORMAL_HINTS プロパティの全て、あるいは一部をセットする。

XSetStandardProperties(display, w, window_name, icon_name, icon_pixmap, argv, argc, hints)
Display *display;
Window w;
char *window_name;
char *icon_name;
Pixmap icon_pixmap;
char **argv;
int argc;
XSizeHints *hints;
display
Xサーバへの接続を指定。
w
ウィンドウを指定。
window_name
ウィンドウ名を指定。 これはNULL終端された文字列である。
icon_name
アイコン名を指定。 これはNULL終端された文字列である。
icon_pixmap
ビットマップを指定。 アイコン、もしくは None が使われる。
argv
アプリケーションの引き数リストを指定。
argc
引き数の数を指定。
hints
通常状態でのウィンドウに対するサイズヒントへのポインタを指定。

関数 XSetStandardPropertiesは簡単なアプリケーションが1回の呼び出しで最も重要なプロパティを 設定するための手段を提供する。 XSetStandardPropertiesは以前、プログラムの優先権についての情報をウィンドウマネージャに 与えていた。 XSetStandardProperties .で取り扱えるより多くの情報を通信する必要があるアプリケーション により使われるべきではない。 (典型的に、argv はメインプログラムのargvの配列である。) 文字列がホストポータブル文字エンコーディングでない場合、 結果は実装依存である。

XSetStandardPropertiesはエラー BadAlloc, BadWindow を起こすことがある。 .SH ウィンドウサイズヒントの設定、取得

Xlib はウィンドウサイズヒントを設定、取得するのに使う関数を提供する。 この節で述べられている関数はフラグ、 <X11/Xutil.h>ヘッダーファイルで定義されている XSizeHints 構造体、 WM_NORMAL_HINTS プロパティを使う。

与えられたウィンドウに対する通常状態でのサイズヒントを設定するには、 XSetNormalHints を使う。 この関数は XSetWMNormalHints により取って代わられる。

XSetNormalHints(display, w, hints)
Display *display;
Window w;
XSizeHints *hints;
display
Xサーバへの接続を指定。
w
ウィンドウを指定。
hints
通常状態でのウィンドウに対するサイズヒントへのポインタを指定。

関数 XSetNormalHintsは指定したウィンドウに対するサイズヒント構造体をセットする。 アプリケーションは このウィンドウに対して望まれるサイズ、位置を ウィンドウマネージャに知らせるために XSetNormalHintsを使う。 加えて、 自分自身を移動、リサイズしたいアプリケーションは XSetNormalHintsを呼ぶべきであり、直接Xlibの移動やリサイズを呼び出すのと同様に 新しく望む配置やサイズを指定する。 これはウィンドウマネージャがリダイレクトされたConfigureリクエストを 無視するが、プロパティの変更には注意を払っているためである。

サイズヒントをセットするには、 アプリケーションはヒント構造体の適切なメンバに値を指定するだけでなく、 どの情報が存在し、どこから来たかを示すため、構造体のflagメンバもセット しなければならない。 この構造体のいずれのメンバが値を指定されているかをflagメンバ にセットしない場合、 XSetNormalHintsへの呼び出しは 無効である。

XSetNormalHintsエラー BadAlloc, BadWindow を起こすことがある。

通常状態でのウィンドウに対するサイズヒントを得るには、 XGetNormalHints を使う。 この関数は XGetWMNormalHints に置きかえられる。

Status XGetNormalHints(display, w, hints_return)
Display *display;
Window w;
XSizeHints *hints_return;
display
Xサーバへの接続を指定。
w
ウィンドウを指定。
hints_return
通常状態でのウィンドウに対するサイズヒントを返す。

関数 XGetNormalHintsは通常状態でのウィンドウに対するサイズヒントを返す。 成功した場合、0でない値を返し、 アプリケーションがこのウィンドウに対して通常のサイズヒントをまったく 指定しなかった場合、0の値を返す。

XGetNormalHintsエラー BadWindow を起こすことがある。

次の2つの関数は WM_ZOOM_HINTS プロパティの設定、読み出しを行う。

ウィンドウに対するZoomヒントをセットするには、 XSetZoomHints を使う。 この関数はもはや Inter-Client Communication Conventions Manual \0 . によりサポートされていない。

XSetZoomHints(display, w, zhints)
Display *display;
Window w;
XSizeHints *zhints;
display
Xサーバへの接続を指定。
w
ウィンドウを指定。
zhints
Zoomヒントへのポインタを指定。

多くのウィンドウマネージャは次の3つの状態のいずれかについてウィンドウ に対して判断する: アイコン、通常、拡大 関数 XSetZoomHintsは拡大状態でのウィンドウに対する情報をウィンドウマネージャに提供する。

XSetZoomHintsエラー BadAlloc, BadWindow を起こすことがある。

ウィンドウのZoomヒントを読み出すには、 XGetZoomHints を使う。 この関数はもはや Inter-Client Communication Conventions Manual. によりサポートされていない。

Status XGetZoomHints(display, w, zhints_return)
Display *display;
Window w;
XSizeHints *zhints_return;
display
Xサーバへの接続を指定。
w
ウィンドウを指定。
zhints_return
Zoomヒントを返す。

関数 XGetZoomHintsは拡大状態でのウィンドウに対するサイズヒントを返す。 成功した場合は、0でない値を返し、 アプリケーションがこのウィンドウに対してまったくZoomサイズヒントを 指定しなかった場合は、0を返す。

XGetZoomHintsはエラー BadWindow を起こすことがある。

タイプ WM_SIZE_HINTS の全てのプロパティ値をセットするには、 XSetSizeHints を使う。 この関数は XSetWMSizeHints により置きかえられる。

XSetSizeHints(display, w, hints, property)
Display *display;
Window w;
XSizeHints *hints;
Atom property;
display
Xサーバへの接続を指定。
w
ウィンドウを指定。
hints
サイズヒントへのポインタを指定。
property
プロパティ名を指定。

関数 XSetSizeHintsは名づけられたプロパティと指定したウィンドウに対して XSizeHints構造体をセットする。 これは XSetNormalHintsXSetZoomHintsにより使われ、以前、タイプ WM_SIZE_HINTS の全てのプロパティ値をセットすることが できた。 このように、このタイプの他のプロパティで定義されているものを得る場合に便利である。

XSetSizeHintsはエラー BadAlloc ,BadAtom ,BadWindow を起こすことがある。

タイプ WM_SIZE_HINTS の全てのプロパティ値を読み出すには、 XGetSizeHints を使う。 この関数は XGetWMSizeHints .により置きかえられる。

Status XGetSizeHints(display, w, hints_return, property)
Display *display;
Window w;
XSizeHints *hints_return;
Atom property;
display
Xサーバへの接続を指定。
w
ウィンドウを指定。
hints_return
サイズヒントを返す。
property
プロパティ名を指定。

関数 XGetSizeHintsは名づけられたプロパティと指定したウィンドウに対する XSizeHints構造体を返す。 これは XGetNormalHints, XGetZoomHints により使われる。 また、以前タイプ WM_SIZE_HINTS の全てのプロパティ値を検索するのにも使われていた。 このように、このタイプの他のプロパティで定義されてるものを得る場合に便利である。 XGetSizeHintsはサイズヒントが定義されていた場合、0でない値を返し、 そうでない場合、0の値を返す。

XGetSizeHintsはエラー BadAtom, BadWindow を起こすことがある。 .SH XStandardColormap構造体の取得、設定

描画アトムのいずれにも関係している XStandardColormap 構造体を得るには、 XGetStandardColormap を使う。 この関数は XGetRGBColormap により置きかえられる。

Status XGetStandardColormap(display, w, colormap_return, property)
Display *display;
Window w;
XStandardColormap *colormap_return;
Atom property; /* RGB_BEST_MAP, etc. */
display
Xサーバへの接続を指定。
w
ウィンドウを指定。
colormap_return
指定したアトムに関係するカラーマップを返す。
property
プロパティの名前を指定。

関数 XGetStandardColormapプロパティの引き数として提供されるアトムに関係するカラーマップの定義を返す。 XGetStandardColormapは成功した場合、0でない値を返し、そうでない場合、0を返す。 例えば、 ディスプレイに対する標準の GrayScaleカラーマップを取得するには、 次のようなシンタックスで XGetStandardColormapを使う。

XGetStandardColormap(dpy, DefaultRootWindow(dpy), &cmap, XA_RGB_GRAY_MAP);

標準カラーマップの意味合いに関しては14.3節を参照すること。

XGetStandardColormapはエラー BadAtom, BadWindow を起こすことがある。

標準カラーマップをセットするには、 XSetStandardColormap を使う。 この関数は XSetRGBColormap により置きかえられる。

XSetStandardColormap(display, w, colormap, property)
Display *display;
Window w;
XStandardColormap *colormap;
Atom property; /* RGB_BEST_MAP, etc. */
display
Xサーバへの接続を指定。
w
ウィンドウを指定。
colormap
カラーマップを指定。
property
プロパティ名を指定。

関数 XSetStandardColormapは通常、ウィンドウ、セッションマネージャにのみ使われる。

XSetStandardColormapはエラー BadAlloc ,BadAtom ,BadDrawable ,BadWindow を起こすことがある。 .SH ウィンドウ座標の解析

ユーザが指定した位置、もしくはデフォルトの位置に与えられる ウィンドウ座標を解析するには、 XGeometry を使う。 この関数は XWMGeometry により置きかえられる。

int XGeometry(display, screen, position, default_position, bwidth, fwidth, fheight, xadder,
yadder, x_return, y_return, width_return, height_return)
Display *display;
int screen;
char *position, *default_position;
unsigned int bwidth;
unsigned int fwidth, fheight;
int xadder, yadder;
int *x_return, *y_return;
int *width_return, *height_return;
display
Xサーバへの接続を指定。
screen
スクリーンを指定。
position

default_position
指定座標を指定。
bwidth
境界線の幅を指定。
fheight

fwidth
ピクセル単位での高さと幅(インクリメントサイズ)を指定。
xadder

yadder
ウィンドウに必要とされる追加の内部的なパディングを指定。
x_return

y_return
x,yのオフセットが返される
width_return

height_return
決定された幅と高さが返される。

生成されるサイズを簡単に計算するために、 境界線の幅(bwidth)、インクリメント fwidth,fheight のサイズ (典型的にフォントの幅と高さ)、追加の内部スペース(xaddr,yaddr) を渡す。 関数 XGeometry は与えられた位置、もしくはデフォルトの位置にウィンドウが置かれる位置を返す。 XGeometryはウィンドウの追加情報と XParseGeometry により指定されている指定座標を使っているウィンドウの位置を する。 完全に限定されたデフォルトの指定座標と不完全な指定座標を 与えられたとき、 XParseGeometryは位置の引き数を使うことにより、 XParseGeometryby using the position argument. の呼び出しの後に定義されているような ビットマスク値を返す。

返される幅と高さはユーザに指定された位置により上書きされている default_position により指定された幅と高さになる。 これらは fwidth,fheight,xaddr,yaddr により影響されない。 x,y座標は境界線の幅、スクリーンの幅と高さ、xaddr,yaddrにより指定されているような パディング、指定座標からfheight,fwidth倍の幅と高さを使うことにより 計算される。 .SH Xのデフォルト環境の取得

関数 XGetDefaultは15章で述べられているようなリソースマネージャ機能へのプリミティブなインターフェイス を提供する。 これはとても単純なアプリケーションに対してのみ便利である。

char *XGetDefault(display, program, option)
Display *display;
char *program;
char *option;
display
Xサーバへの接続を指定。
program
Xlibデフォルトに対するプログラム名を指定(通常、メインプログラムの argv[0])
option
オプション名を指定。

関数 XGetDefaultprog.optionのリソース値を返す。 ここでprogはディレクトリのプレフィクスを取り除いたプログラム引き数であり、 option は単一コンポーネントでなければならない。 マルチレベルリソースは XGetDefault で使えないことに注意すること。 クラス "Program.Name" は常にリソース検索に使われる。 指定したオプション名がこのプログラムに存在しない場合、 XGetDefaultは NULL を返す。 XGetDefaultにより返された文字列はXlibに所有された、クライアントにより変更、解放される べきではない。

データベースが XrmSetDatabase でセットされている場合、 このデータベースが検索に使われる。 そうでない場合、データベースが作られ、 ディスプレイにセットされる( XrmSetDatabase を呼び出した場合のように)。 データベースは現在のロケールで作られる。 データベースを作るために、 XGetDefaultはスクリーン番号0のルートウィンドウにあるRESOURCE_MANAGER プロパティの リソースを使う。 このようなプロパティが存在しない場合、 ユーザのホームディレクトリにあるリソースファイルが使われる。 POSIX準拠システムにおいて これは "$HOME/.Xdefaults" .である。 これらのデフォルトファイルをロードした後、 XGetDefaultXENVIRONMENT 環境変数により指定された追加のデフォルトを 組み合わせる。 XENVIRONMENT が定義されている場合、 追加のリソースファイルに対するフルパス名を含んでいる。 XENVRIRONMENT が定義されていない場合、 XGetDefault"$HOME/.Xdefaults-\fIname\fP" を探す。 ここで name はアプリケーションが実行されているマシーン名を指定する。 .SH X Version 10 互換関数

次のようなX Version 10 互換関数を使うことができる。

Xlib は任意の多角形、または曲線を描画、塗りつぶすのに使う 関数を提供する。 これらの関数はX Version 10との互換性のために主に提供され、 サーバによってはまったくサポートされないものもある。 これは直接サーバを呼び出すのではなく、他のXlib関数を呼び出すものである。 このように、直線を描画する場合、 XDrawLines , XDrawSegments を呼び出すほうがずっと速い。

ここで述べられる関数はX Version 10の関数 XDraw , XDrawFilled , XDrawPatterned , XDrawDashed , , XDrawTiled . の全機能を提供する。 これらは与えられたX Version 11 の新しい線描画関数と可能な限り互換性がある。 しかし、1つ注意することは、 VertexDrawLastPoint もはやサポートされていないことである。 また、返されるエラー値はX Version 10とは反対のものである (これは X Version 11 の標準的なエラー値である)。 X Version 10 から XAppendVertexXClearVertexFlag もサポートされていない。

使われているGCがどのようにセットアップされるかは ダッシュ、直線などを得るかどうかを決定する。 線が閉じた図形の終端に接続、もしくは含む場合、 適切に接続される( XDrawLines を参照すること)。 ここで述べられている関数が失敗する(0を返す)のはメモリ不足になるか、 VertexEndClosed の状態で Vertex により、後に続けられないVertexStartClosed の状態での Vertex を持つ Vertex リストに渡されるかの場合しかない。

X Version 10 の XDraw , XDrawDashed , , XDrawPatterned , の効果を達成するには、 XDraw を使う。

#include <X11/X10.h> Status XDraw(display, d, gc, vlist, vcount)
Display *display;
Drawable d;
GC gc;
Vertex *vlist;
int vcount;
display
Xサーバへの接続を指定。
d
ドロウアブルを指定。
gc
GCを指定。
vlist
どんなものを描くかを示す頂点のリストへのポインタを指定。
vcount
どれくらいの頂点がvlistの中にあるかを指定。

関数 XDraw 任意の多角形、曲線を描画する。 描かれる図は指定した頂点のリスト(vlist)により定義される。 点はvertex構造体でフラグに指定されたような直線により接続される。

<X11/X10.h >で定義されるような、それぞれのVertexは is a structure with the following members: 以下のメンバを持つ構造体である。

typedef struct _Vertex {
	short x,y;
	unsigned short flags;
} Vertex;

メンバ x,y は頂点の座標系であり、 これはドロウアブルの左上隅の内側の角 ( VertexRelative が0の場合)か、前の頂点( VertexRelative が1の場合)かのどちらに相対的なものである。

<X11/X10.h , >で定義されているようにフラグは 以下のものがある。

VertexRelative 0x0001 /* else absolute */
VertexDontDraw 0x0002 /* else draw */
VertexCurved 0x0004 /* else straight */
VertexStartClosed 0x0008 /* else not */
VertexEndClosed 0x0010 /* else not */

この関数は以下の GC コンポーネントを使用する。 function, plane-mask, line-width, line-style, cap-style, join-style, fill-style, subwindow-mode, clip-x-origin, clip-y-origin, clip-mask. また、これらの GC モード依存コンポーネントも使う。 foreground, background, tile, stipple, tile-stipple-x-origin, tile-stipple-y-origin, dash-offset, dash-list.

X Version 10 の XDrawTiled , XDrawFilled , の効果を達成するには、 XDrawFilled を使う。

#include <X11/X10.h> Status XDrawFilled(display, d, gc, vlist, vcount)
Display *display;
Drawable d;
GC gc;
Vertex *vlist;
int vcount;
display
Xサーバへの接続を指定。
d
ドロウアブルを指定。
gc
GC を指定。
vlist
描くものを示す頂点のリストへのポインタを指定。
vcount
頂点が vlist の中にいくつあるかを指定。

関数 XDrawFilled は任意の多角形、曲線を描き、それらを塗りつぶす。

この関数は以下の GC コンポーネントを使用する。 function, plane-mask, line-width, line-style, cap-style, join-style, fill-style, subwindow-mode, clip-x-origin, clip-y-origin, clip-mask. また、以下の GC モード依存コンポーネントも使用する。 foreground, background, tile, stipple, tile-stipple-x-origin, tile-stipple-y-origin, dash-offset, dash-list, fill-style, fill-rule. .SH ユーザデータと値との関連付け。

これらの関数はコンテキスト管理関数により サポートされてきた(16.10 節を参照すること)。 任意の情報をリソースIDに関連付けることがしばしば必要となる。 Xlib は このような関連付けを行うために使える関数 XAssocTable を提供する。 アプリケーションプログラムはしばしば、イベントが起きたとき、自分自身の 所有データを簡単に参照できる必要がある。 XAssocTableシステムは 自分自身が所有するデータ構造体をX リソース (Pixmaps , Fonts , Windows 等)に関連付けるための方法として X ライブラリの使用を提供する。

XAssocTableはX リソースをタイプするのに使われていた。 例えば、ユーザは異なるプロパティをもつ3,4タイプのウィンドウ を持ちたいとする。 これはそれぞれのX ウィンドウIDをユーザにより定義されたウィンドウプロパティの データ構造体に関連付けることにより行われる。 A generic type has been defined in the X library for resource IDs. 一般的な型はリソースIDに対してXライブラリで定義されている。 これはXIDと呼ばれる。

XAssocTable を使うとき、注意する2,3の指針がある。

新しい XAssocTable へのポインタを返すには、 XCreateAssocTable を使う。

XAssocTable *XCreateAssocTable(size)
int size;
size
XAssocTable のハッシュシステムでのバケットの数を指定。

サイズの引き数は XAssocTable のハッシュシステムでのバケットの数を指定する。 効率の理由から、バケットの数は2の乗数であるべきである。 以下のサイズを推奨する: 100オブジェクトあたり32バケットを使用し、 1バケットあたりの都合のよい最大数は8である。 XAssocTable に対するメモリ割り当てエラーが生じた場合、 NULL ポインタが返される。

与えられた XAssocTable へのエントリを作成するには、 XMakeAssoc を使う。

XMakeAssoc(display, table, x_id, data)
Display *display;
XAssocTable *table;
XID x_id;
char *data;
display
Xサーバへの接続を指定。
table
関連付け表を指定。
x_id
X リソースIDを指定。
data
X リソースIDに関連付けられるデータを指定。

関数 XMakeAssocはXIDのキーにされている XAssocTableへデータを入れる。 データは一度、表に入れられる。 重複するものは無視される。 それぞれの関連付けバケットでのキューは一番低いXIDから一番高いXIDにソートされる。

与えられた XAssocTable からデータを得るには、 XLookUpAssoc を使う。

char *XLookUpAssoc(display, table, x_id)
Display *display;
XAssocTable *table;
XID x_id;
display
Xサーバへの接続を指定。
table
関連付け表を指定。
x_id
X リソースIDを指定。

関数 XLookUpAssocXIDにより XAssocTableに蓄えられるデータを取り出す。 適当に一致するXIDが表の中から見つかった場合、 XLookUpAssocはそれに関連付けれたデータを返す。 x_id が表に見つけられなかった場合、 NULL を返す。

与えられた XAssocTable からエントリを削除するには、 XDeleteAssoc を使う。

XDeleteAssoc(display, table, x_id)
Display *display;
XAssocTable *table;
XID x_id;
display
X サーバへの接続を指定。
table
関連付け表を指定。
x_id
X リソースIDを指定。

関数 XDeleteAssocはXIDのキーにされている XAssocTableの中の関連付けを削除する。 重複するものの削除(と、存在しないXIDの削除)は無視される。 関連付けを削除することは決して XAssocTable のパフォーマンスを下げることはしない。

与えられた XAssocTable に割り当てられたメモリを削除するには、 XDestroyAssocTable を使う。

XDestroyAssocTable(table)
XAssocTable *table;
table
関連付け表を指定。


目次に戻る