.EH 'Xlib - C Library''X11, Release 6.3' .OH 'Xlib - C Library''X11, Release 6.3' .EF '' % '' .OF '' % '' .hw WM_NORMAL_HINTS

1章 \fBXlib の紹介fP

.if \n(GS .nr nh*hl 1

1章: Xlib の紹介

X Window System は MIT で設計されたネットワーク透過なウィンドウシステム である。 X ディスプレイサーバは、モノクロームまたはカラーのビットマップ ディスプレイを持つコンピュータ上で動作する。 サーバは、サーバと同じマシンかネットワーク上の別の場所にある クライアントプログラムにユーザ入力を割り当て、またこのクライアント プログラムの出力リクエストを受け付ける。 Xlib は、アプリケーションプログラム(クライアント)がストリーム接続を使っ てウィンドウシステムと接続するために使う C 言語のサブルーチンライブラリ である。 クライアントは通常、自身が通信している X サーバと同じマシンの上で動作 するが、必ずしもそうである必要はない。

Xlib - C Language X Interface は、X Window System プロトコルへ の低レベル C 言語インターフェースの参考書である。 これは X Window System のプログラミングのチュートリアルでもなければ ユーザガイドでもない。 むしろこれは、ライブラリの各関数の詳しい説明や関連する基礎知識の説明を 行うものである。 Xlib - C Language X Interface は、グラフィックスウィンドウシステム および C 言語の基礎的な理解を前提とする。 さらに、高度な抽象化層(例えば、X が提供しているツールキット)が Xlib ライブラリの上に構築される。 これらの高度なライブラリに関する詳しい情報についてはツールキットに関す る適当な文書を見ること。 X Window System Protocol は X の動作の説明の決定版である。 本文書にも追加情報はあるが、プロトコルに関する文書は基礎となる文書である。

Xプログラミングへの手引きをするために、 この章では以下のことを述べる。

X ウィンドウシステムの概要

この本で使われている用語の中には X 独特のものもあるし、 他のウインドウシステムで一般的に使われている用語でも X では 違った意味を持つこともある。 この本の最後にある用語解説(glossary)を参照すると役に立つだろう。

X ウインドウシステムは重なったウインドウやサブウインドウを含む一つ以上の スクリーンをサポートする。 スクリーンはカラー、グレイスケール、モノクロームの物理的なモニタと ハードウェアである。 それぞれのディスプレイやワークステーションについて複数のスクリーンが 存在できる。 単一の X サーバは任意の数のスクリーンに対してディスプレイサービスを 提供できる。 一つのキーボードと一つのポインタ(普通はマウス)を持つ一人のユーザのた めのスクリーンの集まりはディスプレイと呼ばれる。

X サーバ内の全てのウィンドウは、厳密な階層構造を持つように配置される。 各階層構造の最上位はルートウィンドウである。ルートウィンドウはそれぞれ のディスプレイスクリーンの全面を占める。 各ルートウィンドウは、子ウィンドウによって部分的にまたは完全に覆われる。 全てのウィンドウは――ルートウィンドウを除いて――親を持つ。 それぞれのアプリケーションプログラムについて、通常は少なくとも 1 つの ウィンドウが存在する。 子ウィンドウは、さらに彼ら自身の子を持つことができる。 このように、アプリケーションプログラムは各スクリーンの上で任意の深さの ツリーを作ることができる。 X はウィンドウに対してグラフィクス操作、テキスト操作、ラスタ操作を提供 する。

子ウィンドウは、その親より大きくなってもよい。 すなわち、子ウインドウの一部あるいは全体は、親の境界を越えて広げること ができる。しかし、ウインドウへの全ての出力は、その親によってクリップされる。 ウィンドウのいくつかの子が重なり合う場所を持つならば、子のうちの1つが 一番上にある、あるいは他の上にある、つまり他のウインドウを覆い隠してい る、と考えられる。 他のウインドウによってカバーされる領域への出力は、ウインドウがバッキングスト ア(補助記憶)を持っていない限り、ウインドウシステムによって抑制される。 ウインドウが第二のウインドウによって覆い隠されるならば、第二のウインドウは、 最初のウインドウの先祖でもある第二のウインドウのその先祖だけを覆い隠す。

ウインドウはゼロあるいはそれ以上のピクセル幅の境界を持つ。それはあなた の好きなパターン(ピックスマップ)あるいはソリッドカラーになれる。 ウインドウは、背景パターンを必ずではないが通常持っている、そして、それは カバーが外れた時にウインドウシステムによってリペイントされる。 子ウインドウはその親を覆い隠す、そして、親ウインドウでのグラフィック処理 は子によって通常クリップされる。

各ウインドウとピックスマップはそれ自身の座標系を持っている。 座標系は、左上角で原点[ 0、0 ]で、水平なX軸と垂直なY軸を持つ。 座標系は、ピクセルに関しては整数値でピクセル中心と一致する。 ウインドウでは、原点は、その内部(左上角)で境界の内側にある。

X はウインドウの内容を保存する事を保証しない。 ウインドウの一部あるいは全体が隠されて、それからスクリーンの上に戻される時、 その内容は失われるかもしれない。 サーバは、ウインドウの一部あるいはすべてをリペイントする必要があると通知 するためにクライアントプログラムに Exposeイベントを送る。 プログラムは、要求があり次第ウインドウの内容を再生させる準備ができてなくて はならない。

更に X は、ピックスマップと呼ばれる、グラフィックスオブジェクトの 画面外の記憶機構を提供する。 単一のプレーン(デプス 1)のピックスマップは、しばしばビットマップと呼ばれる。 ピックスマップは、多くのグラフィックス関数でウインドウの代わりに使用でき、 さまざまなグラフィックス処理でパターンまたはタイルを定義するために使われる。 ウインドウとピックスマップは、ともにドローアブルと呼ばれる。

Xlib の大部分の関数は、すぐにリクエストを出力バッファに加える。 これらのリクエストは、あとで X サーバ上で非同期に実行する。 サーバで情報が収められた戻り値が返される関数は、明確な応答を受け取るか エラーが発生するまで復帰(return)しない(すなわち、それらはブロックする)。 あなたは、エラーが報告される時に呼ばれる、エラーハンドラーを提供する事が できる。

もしクライアントがリクエストを非同期に実行して欲しくないならば、 リクエストに続いて、以前にバッファリングされた非同期のイベントが全てまとめて送られて、実行される、 XSyncを呼ぶ事ができる。 重大な副作用として、 Xlib の出力バッファは、サーバからの値を返すか、入力を待つ何らかの関数を呼ぶ事によって、必ずフラッシュされる。

多くの Xlib 関数は、整数のリソースIDを返す、そしてそれによって、 あなたが X サーバ上に格納されるオブジェクトを参照する事ができる。 これらは <X11/X.h>で定義されているように、 WindowFontPixmapColormapCursor 、そして GContext 、でありえる。 これらのリソースは、リクエストによって作成され、リクエストによってまたは コネクションが閉じられた時に破棄(または解放)される。 これらのリソースの大部分は潜在的にアプリケーションと共有され、 事実、ウィンドウはウィンドウマネージャにより明示的に操作される。 フォントとカーソルは複数のスクリーンで自動的に共有され、 フォントは必要とされるときにロード、アンロードされ、複数のクライアントにより共有される。 フォントは時々、サーバにキャッシュされる。 Xlibはアプリケーション間の共有GCに関しては何もサポートしない。

クライアントプログラムはイベントを知らせられる。 イベントはリクエストの効果(例えば、ウィンドウを再スタックすると Expose イベントが起こる)か完全に非同期なもの(例えば、キーボードから)のどちらかである。 クライアントプログラムはイベントを知らせるように言う。 他のアプリケーションがアプリケーションにイベントを送ることができるので、 プログラムは必ず、全てのタイプのイベントを捕まえる(無視する)ように作ら なければならない。

入力イベント(例えば、キーを押したり、ポインタを動かしたり) はサーバから非同期に到着し、これらが明示的な呼び出し (例えば、 XNextEventXWindowEvent )により要求されるまで、待たされる。 加えて、ライブラリ関数の中には、 (例えば、 XRaiseWindow )は Expose, ConfigureRequestイベントを引き起こすものもある。 これらのイベントも非同期に到着するが、クライアントは サーバにイベントを引き起こす関数を呼び出した後、 明示的に XSyncに呼び出すことにより、明示的にイベントを待たせようとするだろう。

Errors エラー

関数の中には、 Status (エラーを示す整数値) を返すものもある。 関数が失敗した場合、0を返す。 関数が0の整数値を返した場合、 返された引き数は更新されていない。 C は複数の返り値を提供しないので、 多くの関数がクライアントに渡された記憶領域に書きこむことによりこれらの結果を返さなければならない。 デフォルト状態で、エラーはユーザにより提供されるものか、標準ライブラリ関数のどちらか によりハンドルされる。 文字列が存在しない場合、文字列へのポインタを返す関数はNULLポインタを返す。

X サーバはこれらを検出したとき、プロトコルエラーを報告する。 一つ以上のエラーが与えられたリクエストにより生成された場合、 サーバは全てのエラーを報告する。

Xlibは通常、直ぐにサーバへのリクエストを送らないので (これは、リクエストがバッファに蓄えられるから)、エラーは これらが実際に起こったずっと後に報告される。 しかし、デバッグの目的のために、 Xlibは同期的な振舞いを強制するためのメカニズムを提供する (11.8.1 節を参照すること)。 同期性が有効になっているとき、 エラーは生成されたと同時に報告される。

Xlibがエラーを検出したとき、 プログラムが提供する、エラーハンドラー が呼び出される。 エラーハンドラーが提供されない場合、 エラーはプログラムが終了した後で、表示される。

Standard Header Files

以下のインクルードファイルはXlibに標準なものである。

一般的な値と型

以下のシンボルはXlibで定義され、このマニュアルを通して使われる。

名前付けとXlibへの引き数における規則

Xlibは関数の名前付けや構文に対して多くの規則に従う。 関数が要求する情報を思い出さそうとした時、 これらの規則により、さらに関数の構文が予測しやすくなる。

主な名付け規則は以下の通りである。

プログラミングで考慮すること

プログラミングで主に考慮するのは以下のことである。

文字集合とエンコーディング

Xlib関数の中には、指定された文字集合や文字エンコーディングを参照する ものがある。 以下のものは最も一般的なものである。

フォーマットの規則

Xlib - C Language X Interface は以下の規則を使用する。