LINEスタンプ制作代行サービス・LINEスタンプの作り方!

お電話でのお問い合わせ:03-6869-8600

stampfactory大百科事典

Xlib

Xlib は、X Window System のクライアント用ライブラリであり、C言語で書かれている。Xサーバとのやり取りを行うサブルーチン群を含む。それらのサブルーチンを使うことで、Xプロトコルの詳細を知らなくともプログラムを書くことが可能になっている。Xlib を直接使っているアプリケーションは少なく、通常は Xlib の上位にウィジェット・ツールキットを提供する次のようなライブラリを配置して使う。Xlib が登場したのは1985年ごろであり、UNIX系オペレーティングシステムのGUIに使われている。XCB は Xlib の後継となるべく開発されている。Xlib での主要なデータ型は codice_1 構造体と各種識別子型である。ディスプレイとは、いわばグラフィカルな操作が行われる物理的あるいは仮想的な機器である。Xlib における codice_1 構造体には、ディスプレイに関する情報が格納されているが、より重要な情報としてクライアントとサーバ間のチャンネルに関する情報も格納している。例えば、UNIX系OSでは codice_1 構造体には、そのチャンネルのソケットのファイルハンドルが含まれる(codice_4 マクロで取り出し可能)。Xlib の関数の多くは codice_1 構造体を引数としている。これは、Xlib の関数の多くがチャンネルに対して操作したり、特定のチャンネルに関する操作をするためである。特にサーバとやり取りする Xlib の関数は、チャンネルにアクセスするのにこの構造体を必要とする。ローカルな処理しかしない関数でも、特定のチャンネルに関連したデータを操作するためにこの構造体を必要とする。例えば、イベントキューの操作はチャンネルごとのイベントキューを操作する。ウィンドウ、カラーマップなどはサーバが管理する。つまり、実際の見た目に関するデータはサーバ側にある。クライアントは識別子を使ってそれらのオブジェクトを操作する。クライアントはオブジェクトを直接操作できず、サーバにオブジェクトの識別子を指定して操作を要求する。codice_6、codice_7、codice_8、codice_9 などの型はすべて識別子であり、実際には32ビットの整数である。クライアントはサーバに対してウィンドウの生成を要求することでウィンドウを生成する。これは、ウィンドウの識別子(つまり番号)を返す Xlib 関数を呼び出すことで行われる。その後、その識別子を使ってクライアントがサーバに対してそのウィンドウへの各種操作を要求する。識別子はサーバ内で一意である。その多くは別々のアプリケーションであっても同じオブジェクトを指すのに使われる。例えば、1つのサーバと接続した2つのアプリケーションがあるとき、1つの識別子でどちらも同じウィンドウを参照することができる。それぞれのアプリケーションは使用しているチャンネルが異なるため、それぞれ別々の Display 構造体を持っている。しかし、同じ識別子についての操作を要求すれば、同じオブジェクトに対して操作が行われる。サーバに要求を送る Xlib 関数は即座に要求を送るのではなく、"output buffer" というバッファに一旦格納する。この場合の "output" はクライアントからサーバに向けての出力である。output buffer はサーバへのあらゆる種類の要求を格納でき、それは必ずしも画面に見える効果だけではない。output buffer は、関数 codice_10 や codice_11 を呼び出したとき、あるいはサーバからの戻り値がある関数を呼び出したとき(応答があるまでそれら関数はブロックする)、あるいはその他の条件でフラッシュ(バッファ上のすべての要求がサーバに送られ、バッファを空にする)される。Xlib は受け取ったイベントをキューに格納する。クライアント・アプリケーションは、そのキューを調べて、イベントを取り出す。Xサーバがイベントを非同期に送るのに対して、Xlib を使うアプリケーションはキュー上のイベントにアクセスするのに Xlib 関数を明示的に呼び出さなければならない。そのような関数の中にはブロックするものもあり、その時点でも output buffer がフラッシュされる。エラーは非同期に受け取られ、扱われる。アプリケーションは、エラー発生時にエラーメッセージをサーバから受け取るエラーハンドラを登録しておく。ウィンドウの一部が見えない状態のとき、ウィンドウの内容が保持されているとは限らない。その場合、隠れていたウィンドウが見える状態になると codice_12 イベントがアプリケーションに送られる。アプリケーションは、そのイベントを受けてウィンドウの内容を再描画しなければならない。Xlib ライブラリの関数は次のように分類される。以下のプログラムは、ウィンドウを表示し、その中に小さな黒い四角形を描画するものである。クライアントは codice_13 を呼び出すことでサーバとのコネクションを生成する。そして codice_26 でウィンドウ生成を要求する。codice_27 を別途呼び出すことで、ウィンドウが画面上に見えるようになる。四角形は codice_28 呼び出しで描画される。この操作はウィンドウが生成された後でないと実行できない。しかも、一回呼び出すだけでは十分ではない。前述したようにウィンドウの内容は常に保持されるとは限らない。例えば、ウィンドウが別のウィンドウの下に隠され、再び上に出てきたとき、再描画が必要な場合がある。このため、上記プログラムでは、codice_12 イベントを受け取るたびに再描画を行っている。したがって、ウィンドウの中身の描画はイベントループ内で行われる。ループに入る前に、アプリケーションは受け取りたいイベントを選択しており、上記の例では codice_30 でそれを行っている。イベントループは入って来るイベントを待ちうける。イベントがキー押下だった場合、このアプリケーションは終了する。expose イベントなら、ウィンドウの中身を再描画している。codice_18 を呼び出すと、キュー上にイベントがなければ output buffer がフラッシュされる。Xlib はボタンもメニューもスクロールバーも提供しない。そのようなウィジェットは、Xlib を使う別のライブラリが提供する。そのようなライブラリは次の2種類に分類される。このようなウィジェット・ライブラリを使ったアプリケーションでは、イベントループに入る前にウィンドウの中身を指定し、codice_12 イベントによる再描画も自動的に行われる。Xlib の代替として XCB がある。その目的は、ライブラリの縮小とX11プロトコルへの直接的なアクセスである。XCB を下層に使って Xlib のインタフェースを提供する実装もある。

出典:wikipedia

LINEスタンプ制作に興味がある場合は、
下記よりスタンプファクトリーのホームページをご覧ください。