X Window Programming
概要
[編集]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を利用するための開発環境設定は、以下の手順で行います。
- X11ライブラリをインストールします。
- Ubuntu例:
sudo apt-get install libx11-dev
- Ubuntu例:
- Cコンパイラ(gccなど)をインストールします。
- 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 ウィンドウの位置とサイズの変更
[編集]ウィンドウの位置やサイズは、XMoveWindow
やXResizeWindow
関数を使用して変更できます。
XMoveWindow(display, window, 100, 100); XResizeWindow(display, window, 400, 300);
4.2 ウィンドウイベントの処理
[編集]ウィンドウイベントは、XSelectInput
を使用して選択し、XNextEvent
で処理します。以下のように、キーボードイベントやマウスイベントを処理することができます。
XSelectInput(display, window, ExposureMask | KeyPressMask);
第5章: グラフィックスの描画
[編集]5.1 描画の基本
[編集]Xlibでは、XDrawLine
やXFillRectangle
などの関数を使用して、基本的なグラフィックスを描画できます。
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では、XLoadFont
やXDrawString
を使用してテキストを描画できます。
6.2 イベントの詳細な処理
[編集]Xイベントには、ウィンドウのリサイズやマウスクリックなど多様なものがあります。イベントハンドリングの詳細について説明します。
附録
[編集]A.1 X Windowのデバッグ方法
[編集]X Windowプログラミングのデバッグには、xwininfo
やxev
などのツールが便利です。これらを使用して、ウィンドウやイベントの情報を取得できます。
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 サーバーと同期
参考文献
[編集]下位階層のページ
[編集]- X Window Programming/Athena Widgets
- X Window Programming/CLX
- X Window Programming/Motif
- X Window Programming/UNIXでのリソース管理
- X Window Programming/UNIX特有のリソース管理
- X Window Programming/UNIX環境での非同期処理
- X Window Programming/X11R7.0
- X Window Programming/X11R7.1
- X Window Programming/X11R7.2
- X Window Programming/X11とUNIXの関係
- X Window Programming/X11アーキテクチャ
- X Window Programming/XCB
- X Window Programming/X Toolkit Intrinsics
- X Window Programming/X resources
- X Window Programming/Xlib
- X Window Programming/イベント
- X Window Programming/イベントの基本
- X Window Programming/描画とグラフィックス
- X Window Programming/最初のXプログラム
- X Window Programming/開発環境の準備