コンテンツにスキップ

X Window Programming/Xlib

出典: フリー教科書『ウィキブックス(Wikibooks)』

Xlibは、X Window Systemにおける基本的なプログラミングライブラリであり、グラフィカルユーザーインタフェース(GUI)を作成するための低レベルなインタフェースを提供します。Xlibは、ウィンドウの作成、描画、イベント処理など、X Window Systemの基本的な操作を行うための機能を提供します。本章では、Xlibの基本的な使用方法と、その操作の方法について解説します。

Xlibのインストール

[編集]

Xlibは、通常、X Window Systemがインストールされている環境で使用可能です。Unix系のシステムやLinuxのディストリビューションでは、ほとんどの場合、Xlibは標準でインストールされています。Xlibを使うためには、プログラムでXlibのヘッダーとライブラリをリンクする必要があります。

Xlibのヘッダーを使うためには、以下のようにコードに記述します。

#include <X11/Xlib.h>

リンク時には、-lX11オプションを指定してXlibライブラリをリンクします。

cc -o myapp myapp.c -lX11

Xlibの基本的な使用方法

[編集]

Xlibを使用してウィンドウを作成し、描画するためには、以下の基本的なステップが必要です。

1. ディスプレイへの接続

[編集]

Xlibを使うためには、まずディスプレイ(Xサーバー)に接続する必要があります。接続は、XOpenDisplay関数を使って行います。

Display *display = XOpenDisplay(NULL);
if (display == NULL) {
    fprintf(stderr, "ディスプレイを開けません\n");
    exit(1);
}

XOpenDisplay関数は、デフォルトのディスプレイに接続します。NULLを渡すことで、環境変数DISPLAYに設定されたデフォルトのディスプレイに接続します。

2. ウィンドウの作成

[編集]

次に、ウィンドウを作成します。XCreateSimpleWindow関数を使って、基本的なウィンドウを作成することができます。

Window window = XCreateSimpleWindow(display, RootWindow(display, 0), 100, 100, 400, 400, 1, BlackPixel(display, 0), WhitePixel(display, 0));

この関数は、ウィンドウの親、位置、サイズ、ボーダーの幅、背景色、前景色を指定してウィンドウを作成します。

3. ウィンドウの表示

[編集]

作成したウィンドウを画面に表示するためには、XMapWindow関数を呼び出します。

XMapWindow(display, window);

この関数でウィンドウをマップ(表示)します。

4. イベントループの処理

[編集]

Xlibでは、ウィンドウの操作や描画の更新を行うためには、イベントループを使用します。XNextEvent関数を使って、キューに格納されたイベントを順番に取得し、処理します。

XEvent event;
for (;;) {
    XNextEvent(display, &event);
    if (event.type == Expose) {
        XFillRectangle(display, window, DefaultGC(display, 0), 50, 50, 200, 200);
    }
}

この例では、Exposeイベント(ウィンドウの再描画要求)が発生したときに、XFillRectangleを使ってウィンドウに四角形を描画しています。

5. リソースの解放

[編集]

プログラムが終了した後は、リソースを解放する必要があります。以下の関数を使用して、ウィンドウやディスプレイを閉じることができます。

XDestroyWindow(display, window);
XCloseDisplay(display);

これにより、使用したリソースが適切に解放されます。

Xlibの主要関数

[編集]

Xlibにはさまざまな関数があり、以下のような関数が一般的に使用されます。

  • XOpenDisplay: ディスプレイに接続する
  • XCreateSimpleWindow: ウィンドウを作成する
  • XMapWindow: ウィンドウを表示する
  • XNextEvent: イベントを取得する
  • XFillRectangle: ウィンドウに四角形を描画する
  • XCloseDisplay: ディスプレイとの接続を閉じる

Xlibの利点と制限

[編集]

利点

[編集]
  • 低レベルで柔軟: XlibはX Window Systemの基本的なインタフェースを提供するため、細かな操作が可能であり、非常に柔軟です。
  • プラットフォーム互換性: Xlibを使用したプログラムは、Unix系のほとんどのシステム(FreeBSD、NetBSD、OpenBSD、macOSやLinuxのディストリビューションなど)で動作します。

制限

[編集]
  • 低レベル: Xlibは低レベルなライブラリであり、ウィンドウの作成や描画、イベント処理などの操作に多くのコードを必要とします。そのため、XtGTKQtといったツールキットを使うほうが一般的です。
  • 非同期処理: Xlibを使ったプログラムでは、非同期イベントの処理が必要になることが多く、これに対応するためには注意深いプログラム設計が求められます。

まとめ

[編集]

Xlibは、X Window Systemの基本的な操作を行うための低レベルなライブラリです。ウィンドウ作成、描画、イベント処理などの基本的な操作を手動で行うことができ、非常に柔軟で強力なツールですが、その反面、ツールキットと比べてコーディングが煩雑になる場合があります。Xlibを使いこなすことで、X Window Systemにおける深い理解と、より高度なGUIアプリケーションの開発が可能となります。