コンテンツにスキップ

X Window Programming

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

概要

[編集]

X Window System(通称X)は、Unix系のオペレーティングシステムで使用されるウィンドウシステムです。Xは、ユーザーインターフェースを提供するための標準的な手段として広く利用されており、プログラムが画面上でウィンドウを操作したり、グラフィックスを描画するための機能を提供します。このハンドブックでは、X Windowプログラミングの基本的な概念とその実装方法について説明します。

前提知識

[編集]

X Window Systemを理解するためには、次の技術的な前提知識が必要です。

  • Unix/Linux環境の基本操作
  • C言語の基本的な理解
  • グラフィックスプログラミングの基礎

第1章: X Windowシステムの概要

[編集]

1.1 X Windowの基本

[編集]

X Windowシステムは、クライアント-サーバモデルに基づいています。サーバはディスプレイ、入力デバイス、ウィンドウを管理し、クライアントはユーザーインターフェースを描画します。Xはネットワーク越しに動作するため、リモート環境でもウィンドウ操作が可能です。

1.2 Xのアーキテクチャ

[編集]

Xのアーキテクチャは次のように構成されています:

  • Xサーバ: ユーザーのディスプレイや入力デバイスを管理します。
  • Xクライアント: アプリケーションがグラフィックスを描画し、ウィンドウを操作するプログラムです。

1.3 Xの基本的なプロトコル

[編集]

X Windowは、ネットワーク越しに通信するためにXプロトコルを使用します。これにより、クライアントとサーバは物理的に異なるマシン上でも動作できます。

第2章: Xプログラミングの準備

[編集]

2.1 必要なライブラリとツール

[編集]

X Windowプログラミングを行うためには、次のライブラリとツールが必要です:

  • Xlib: X Windowシステム用のC言語ライブラリ
  • X11: X Windowシステムのヘッダーファイル

これらは、LinuxやUnixのパッケージマネージャを通じてインストールできます。

2.2 開発環境の設定

[編集]

Xlibを利用するための開発環境設定は、以下の手順で行います。

  1. X11ライブラリをインストールします。
    • Ubuntu例: sudo apt-get install libx11-dev
  2. Cコンパイラ(gccなど)をインストールします。
  3. Xlibをリンクするための設定を行います。

第3章: 最初のXプログラム

[編集]

3.1 基本的なXプログラムの作成

[編集]

以下に、最初のXウィンドウを作成する基本的なCプログラムの例を示します。

#include <X11/Xlib.h>
#include <stdlib.h>

int main() {
    // Xサーバに接続
    Display *display = XOpenDisplay(NULL);
    if (display == NULL) {
        fprintf(stderr, "Xサーバに接続できませんでした\n");
        exit(1);
    }

    // ウィンドウ作成
    Window window = XCreateSimpleWindow(display, DefaultRootWindow(display), 10, 10, 300, 200, 1, BlackPixel(display, 0), WhitePixel(display, 0));

    // ウィンドウ表示
    XMapWindow(display, window);

    // イベントループ
    for (;;) {
        XEvent event;
        XNextEvent(display, &event);
        if (event.type == KeyPress)
            break;
    }

    // Xサーバから切断
    XCloseDisplay(display);
    return 0;
}

このプログラムは、簡単なウィンドウを作成し、キーボードのキー入力を待機します。

3.2 コンパイルと実行

[編集]

上記のプログラムをコンパイルするには、以下のコマンドを使用します。

clang -o xwindow_program xwindow_program.c -lX11

コンパイル後、プログラムを実行します。

./xwindow_program

第4章: ウィンドウ操作

[編集]

4.1 ウィンドウの位置とサイズの変更

[編集]

ウィンドウの位置やサイズは、XMoveWindowXResizeWindow関数を使用して変更できます。

XMoveWindow(display, window, 100, 100);
XResizeWindow(display, window, 400, 300);

4.2 ウィンドウイベントの処理

[編集]

ウィンドウイベントは、XSelectInputを使用して選択し、XNextEventで処理します。以下のように、キーボードイベントやマウスイベントを処理することができます。

XSelectInput(display, window, ExposureMask | KeyPressMask);

第5章: グラフィックスの描画

[編集]

5.1 描画の基本

[編集]

Xlibでは、XDrawLineXFillRectangleなどの関数を使用して、基本的なグラフィックスを描画できます。

GC gc = XCreateGC(display, window, 0, NULL);
XSetForeground(display, gc, BlackPixel(display, 0));
XDrawLine(display, window, gc, 10, 10, 100, 100);

5.2 イメージの描画

[編集]

画像の描画には、XPutImage関数を使用します。これにより、ビットマップ画像をウィンドウに表示できます。

第6章: 高度な機能

[編集]

6.1 フォントとテキストの描画

[編集]

Xlibでは、XLoadFontXDrawStringを使用してテキストを描画できます。

6.2 イベントの詳細な処理

[編集]

Xイベントには、ウィンドウのリサイズやマウスクリックなど多様なものがあります。イベントハンドリングの詳細について説明します。

附録

[編集]

A.1 X Windowのデバッグ方法

[編集]

X Windowプログラミングのデバッグには、xwininfoxevなどのツールが便利です。これらを使用して、ウィンドウやイベントの情報を取得できます。

A.2 よく使うXlib関数リスト

[編集]

Xlibでよく使用される関数のリストを示します。

よく使うXlib関数リスト
関数名 説明
ディスプレイ接続
XOpenDisplay X サーバーへの接続を確立
XCloseDisplay X サーバーとの接続を終了
XConnectionNumber ディスプレイのファイル記述子を取得
ウィンドウ操作
XCreateWindow 新しいウィンドウを作成
XCreateSimpleWindow シンプルなウィンドウを作成
XDestroyWindow ウィンドウを破棄
XMapWindow ウィンドウを表示
XUnmapWindow ウィンドウを非表示
XMoveWindow ウィンドウを移動
XResizeWindow ウィンドウをリサイズ
イベント処理
XNextEvent 次のイベントを取得
XSelectInput イベントマスクを設定
XSendEvent イベントを送信
XPending 保留中のイベント数を取得
描画操作
XDrawPoint 点を描画
XDrawLine 線を描画
XDrawRectangle 矩形を描画
XFillRectangle 塗りつぶした矩形を描画
XDrawArc 円弧を描画
XFillArc 塗りつぶした円弧を描画
テキスト操作
XDrawString 文字列を描画
XDrawImageString 背景付き文字列を描画
XLoadFont フォントをロード
XUnloadFont フォントを解放
カラー操作
XAllocColor カラーを割り当て
XFreeColors カラーを解放
XParseColor カラー名を RGB 値に変換
GC (Graphics Context)
XCreateGC GC を作成
XFreeGC GC を解放
XSetForeground 前景色を設定
XSetBackground 背景色を設定
プロパティ操作
XGetWindowProperty ウィンドウプロパティを取得
XChangeProperty プロパティを変更
XDeleteProperty プロパティを削除
クリップボード操作
XSetSelectionOwner セレクション所有者を設定
XGetSelectionOwner セレクション所有者を取得
エラー処理
XSetErrorHandler エラーハンドラを設定
XGetErrorText エラーメッセージを取得
フラッシュ・同期
XFlush 出力バッファをフラッシュ
XSync サーバーと同期

参考文献

[編集]

下位階層のページ

[編集]