Chapter 5 Pixmap and Cursor Functions

5章 ピクスマップとカーソル関数

一度Xサーバと接続すると、 次のような関数が使える。

Creating and Freeing Pixmaps

ピクスマップは作成されたスクリーン上でのみ使える。 ピクスマップはさまざまな操作に使えるオフスクリーンリソースである。 このような操作にはカーソルの定義や模様の描画、 ラスター操作に関するものなどがある。 大部分のグラフィックリクエストはウィンドウあるいはピクスマップのどちらかを 操作する。 ビットマップは単一のビットプレーンを持つピクスマップである。

与えられたサイズのピクスマップを作成するには、 XCreatePixmap を使う。

Pixmap XCreatePixmap(display, d, width, height, depth)
Display *display;
Drawable d;
unsigned int width, height;
unsigned int depth;
display
Xサーバへの接続を指定。
d
ピックスマップが生成される先のスクリーンを指定。
width

height
幅と高さを指定。この値はピックスマップのディメンジョンを定義する。
depth
ピックスマップの深さを指定。

関数 XCreatePixmap指定した幅、高さ、深さのピックスマップを生成し、それを一意に 示すピックスマップIDを返す。 引き数 drawble には InputOnlyウィンドウを渡しても良い。 ウィンドウの高さと幅はゼロ以外の値でなければならない。 そうでない場合にはエラー BadValueとなる。 引き数 depth は指定したドロウアブルのスクリーンがサポートしている 深さのうちのいずれかでなければならない。 そうでない場合には、エラー BadValueとなる。

X サーバはどのスクリーン上にピックスマップを生成するか決定するため、 引き数で指定されたドロウアブルを利用する。 このピックスマップは他のスクリーン上では使えない。 また、異なる深さを持つドロウアブルと共に使うことはできない (この規則の例外については XCopyPlaneを参照のこと)。 ピックスマップの内容の初期状態は未定義である。

XCreatePixmapはエラー BadAlloc ,BadDrawable ,BadValue を起こすことがある。

指定されたピクスマップに関連づけられている全ての記憶領域を 解放するには、 XFreePixmap を使う。

XFreePixmap(display, pixmap)
Display *display;
Pixmap pixmap;
display
Xサーバへの接続を指定。
pixmap
ピクスマップを指定。

関数 XFreePixmapは最初にピックスマップIDとピックスマップの関係を削除する。 次に X サーバはピックスマップへの参照が無くなった時に、ピックスマップのメモリ領域を解放する。 以降はこのピックスマップを参照してはならない。

XFreePixmapはエラー BadPixmap を起こすことがある。

Creating, Recoloring, and Freeing Cursors

それぞれのウィンドウはそのウィンドウに定義された異なるカーソルを持つ。 ポインタが可視ウィンドウの中に入った時に、 そのウィンドウに定義されたカーソルがセットされる。 カーソルがそのウィンドウに対してまったく定義されていないなら、 カーソルは親ウィンドウに定義されているものになる。

Xの方針から、カーソルはカーソルのソース、マスク、色、ホットスポットからなる。 ピクスマップのマスクはカーソルの形を決定し、深さが1でなければならない。 ピクスマップのソースは深さが1でなければならず、 色は色のソースを決定する。 ポインタのイベントが起きた時、 ホストスポットにより報告されるカーソルにあるポイントが定義される。 サイズについてカーソル上のハードウェアによる制限や、 マスクが実装されてるかどうかについての制限がある。 XQueryBestCursorはどんなサイズが利用可能かどうかを見つけ出すのに使われる。 カーソルを作るための標準的なフォントはあるが、 Xlibは任意のフォントやビットマップからカーソルを作るために使う 関数を提供する。

標準のフォントからカーソルを作るには、 XCreateFontCursor を使う。

#include <X11/cursorfont.h>

Cursor XCreateFontCursor(display, shape)
Display *display;
unsigned int shape;

display
X サーバへの接続を指定。
shape
カーソルの形状を指定。

X は標準的なカーソル形状のセットを特殊なフォントとして提供している。 これはカーソルと呼ばれている。 アプリケーションはインタフェースを使ってカーソルを用いるとよい。 なぜなら、フォントは個々のディスプレイの種類に応じてカスタマイズすることができるからである。 引き数 shape では標準フォントのどのグリフを使うのかを指定する。

ホットスポットはカーソルフォントに格納されている情報から得られる。 カーソルの初期状態の色は、前景色が黒で背景色が白である( XRecolorCursor を参照)。 カーソルの形についてのより詳しい情報に関しては Appendix Bを参照すること。

XCreateFontCursorはエラー BadAlloc, BadValue を起こすことがある。

フォントグリフからカーソルを作成するには、 XCreateGlyphCursor を使う。

Cursor XCreateGlyphCursor(display, source_font, mask_font, source_char, mask_char,
foreground_color, background_color)
Display *display;
Font source_font, mask_font;
unsigned int source_char, mask_char;
XColor *foreground_color;
XColor *background_color;
display
X サーバへの接続を指定。
source_font
ソースグリフのためのフォントを指定。
mask_font
マスクのグリフのためのフォントか None を指定。
source_char
ソースに対する文字グリフを指定。
mask_char
マスクのためのグリフ文字を指定。
foreground_color
ソースの前景色に対する RGB 値を指定。
background_color
ソースの背景色に対する RGB 値を指定。

関数 XCreateGlyphCursorはソースとマスクのビットマップを指定したフォントグリフから得る点を除き、 XCreatePixmapCursorと同様の関数である。 source_char は source_font で定義されているグリフでなければならず、 そうでなければエラー BadValueとなる。 mask_font を与える場合は、 mask_char は mask_font で定義されているグリフでなければならず、 そうでなければエラー BadValueとなる。 mask_font と mask_char は指定しなくてもかまわない。 source_char と(もし定義されているならば)mask_char のグリフの原点は、 一致するよう配置され、ホットスポットを定義する。 source_char と mask_char とでバウンディングボックスの寸法が同じである必要は無く、 バウンディングボックスに対してのホットスポットの配置の制限は無い。 mask_char が与えられない場合、ソースの全てのピックスマップが表示される。 フォントは明示的な参照がそれ以上されないことが分かった時点で、 すぐに XFreeFontを呼び出して解放してよい。

2バイト行列形式のインデックスを持つフォントについては、 16ビットの値は byte1 メンバが最上位バイトで byte2 が 最下位ビットとなるようにしなければならない。

XCreateGlyphCursorはエラー BadAlloc ,BadFont ,BadValue を起こすことがある。

2つのビットマップからカーソルを作るには、 XCreatePixmapCursor を使う。

Cursor XCreatePixmapCursor(display, source, mask, foreground_color, background_color, x, y)
Display *display;
Pixmap source;
Pixmap mask;
XColor *foreground_color;
XColor *background_color;
unsigned int x, y;
display
X サーバへの接続を指定。
source
ソースカーソルの形状を指定。
mask
カーソルのソースのうち表示されるビット、あるいは None を指定。
foreground_color
ソースの前景色に対する RGB 値を指定。
background_color
ソースの背景色に対する RGB 値を指定。
x

y
x, y 座標を指定する。これはソースの原点からの相対座標でホットスポット(hotspot)を示す。

関数 XCreatePixmapCursorはカーソルを生成し、これに対応するカーソルIDを返す。 X サーバが StaticGrayGrayScaleのスクリーンしか持っていない場合であっても、 前景色と背景色の RGB 値は foreground_color と background_color を使って指定しなければならない。 ソースピックスマップ内で1にセットされているピクセルに対しては 前景色が使用され、0にセットされているピクセルに対しては背景色が使用される。 指定する場合には、ソースとマスクの両者は深さ(depth)が1でなければならない (さもなくば BadMatchエラーとなる)が、ルートウィンドウは任意のものでよい。 引き数 mask はカーソルの形状を定義する。 マスク内で1にセットされているピクセルは、ソースのどのピクセルが表示されるかを定義し、 0にセットされているピクセルは無視されるピクセルを定義する。 マスクが与えられない場合は、ソースの全てのピクセルが表示される。 もしマスクを与えるならば、マスクは引き数 source で定義される ピックスマップと同じ大きさでなければならず、 そうでない場合にはエラー BadMatchとなる。 ホットスポットはソースの内部の点でなければならず、 そうでない場合にはエラー BadMatchとなる。

ディスプレイの制限を満たすため、カーソルの構成要素に対して 任意の変換が行われるかもしれない。 ピックスマップは明示的な参照がそれ以上されないことが分かった時点で、 すぐに解放してよい。 その後にソースやマスクのピックスマップへの描画を行った場合の カーソルへの影響は未定義である。 X サーバはピックスマップのコピーを作るかもしれないし、作らないかもしれない。

XCreatePixmapCursorはエラー BadAlloc, BadPixmapを起こすことがある。

便利なカーソルサイズを決定するには、 XQueryBestCursor を使う。

Status XQueryBestCursor(display, d, width, height, width_return, height_return)
Display *display;
Drawable d;
unsigned int width, height;
unsigned int *width_return, *height_return;
display
Xサーバへの接続を指定。
d
スクリーンを指示するためのドロウアブルを指定。
width

height
\ サイズ情報を得ようとしているカーソルの幅と高さを指定。
width_return

height_return
指定した幅と高さにできるだけ近い、最善の幅と高さが返される。

ディスプレイによっては、他のディスプレイより大きなカーソルを使用できる。 関数 XQueryBestCursorを使えば、そのディスプレイ上で実際に利用できるカーソルのサイズを知ること ができる。 この関数は表示できる最大のサイズを返す。 大きいカーソルをサポートしていないディスプレイ上では、 アプリケーションは小さいカーソルを使わなければならない。

XQueryBestCursorはエラー BadDrawable を起こすことがある。

与えられたカーソルの色を変更するには、 XRecolorCursor を使う。

XRecolorCursor(display, cursor, foreground_color, background_color)
Display *display;
Cursor cursor;
XColor *foreground_color, *background_color;
display
Xサーバへの接続を指定。
cursor
カーソルを指定。
foreground_color
操作元の前景色の RGB 値を指定。
background_color
操作元の背景色の RGB 値を指定。

関数 XRecolorCursorは指定したカーソルの色を変更する。 カーソルがスクリーン上に表示されている場合、 色の変更は即座に反映される。 XColor構造体の pixel メンバは無視され、RGB 値のみが使用される。

XRecolorCursorはエラー BadCursor を起こすことがある。

与えられたカーソルを解放(破棄)するには、 XFreeCursor を使う。

XFreeCursor(display, cursor)
Display *display;
Cursor cursor;
display
Specifies the connection to the X server.
cursor
Specifies the cursor.

関数 XFreeCursorはカーソルリソースIDと指定したカーソルとの間の関連を削除する。 カーソルのメモリは、他のリソースからの参照が無くなった時点で解放される。 これ以降は指定したカーソルIDにアクセスしてはならない。

XFreeCursorはエラー BadCursor を起こすことがある。


目次に戻る