Colormap XCopyColormapAndFree(display, colormap)
Display *display;
Colormap colormap;
XFreeColormap(display, colormap)
Display *display;
Colormap colormap;
ビジュアルクラス GrayScale, PseudoColor, DirectColor に対しては、カラーマップエントリーの初期値は未定義である。 StaticGray, StaticColor, TrueColor に対しては、エントリーは定義済みの値を持つが、これらの値はビジュアルに 依存するもので、X によっては定義されない。 StaticGray, StaticColor, TrueColor に対しては、引き数 alloc は AllocNone でなければならず、そうでない場合にはエラー BadMatch となる。 これら以外のビジュアルクラスにおいて alloc が AllocNone ならば、カラーマップには初期値として割り当てられているエントリーは存 在せず、クライアントがエントリーを割り当てることができる。 ビジュアル型についての情報は、3.1 章を参照すること。
引き数 alloc が AllocAll の場合、カラーマップ全体は書き込み可能で割り当てられる。 割り当てられたエントリーの初期値は未定義である。 GrayScale と PseudoColor を指定すると、 XAllocColorCells の呼び出しが 0 から N - 1 までの全てのピクセル値返した場合と同じ効果 になる。ここで N は指定したビジュアルのカラーマップエントリーの値である。 DirectColor を指定すると、 XAllocColorPlanes の呼び出しが 0, red_mask, green_mask, blue_mask のピクセル値を返した場 合と同じ効果になる。後者の3つは、指定したビジュアルにおいてそれぞれ対 応するマスクと同じ値を持つ。 しかし全ての場合において、これらのエントリーのいずれも XFreeColors で解放することはできない。
XCreateColormap はエラー BadAlloc, BadMatch, BadValue, BadWindow を起こすことがある。
関数 XCopyColormapAndFree は指定されたカラーマップとビジュアル型が同じで、また対象とするスク リーン上も同じであるようなカラーマップを生成し、新しいカラーマップのID を返す。 この関数はまた、クライアントが現在割り当てているエントリーの全てを、 指定したカラーマップから新しいカラーマップに移動させる。この時は色の値、 読み取り専用か書き込み可能であるかの属性は変化せず、指定したカラーマッ プのエントリーは解放される。 新しいカラーマップの他のエントリーにおける色の値は未定義である。 指定したカラーマップが、 alloc を AllocAll としてクライアントで生成されていた場合、新しいカラーマップも AllocAll で生成され、全てのエントリーに対する全ての色の値は指定したカラーマップ からコピーされ、そして指定したカラーマップは解放される。 指定したカラーマップが、クライアントで AllocAll として生成されていなかった場合には、移動されるピクセルとプレーンは 以下の関数を用いてクライアントで割り当てられ、それ以降解放されていない ものである: XAllocColor, XAllocNamedColor, XAllocColorCells, XAllocColorPlanes
XCopyColormapAndFree はエラー BadAlloc, BadColor を起こすことがある。
XFreeColormap はカラーマップリソースIDとカラーマップの関連づけを削除し、カラーマップ のメモリを解放する。 しかし、この関数はスクリーンのデフォルトのカラーマップには無効である。 指定したカラーマップがスクリーンにインストールされたカラーマップの場合、 この関数はこれをアンインストールする( XUninstallColormap を参照)。 指定したカラーマップが( XCreateWindow, XSetWindowColormap, XChangeWindowAttributes によって)あるウィンドウのカラーマップとして定義されている場合には、 XFreeColormap はウィンドウに関連付けられたカラーマップを None に変更し、 ColormapNotify イベントを生成する。 X は None のカラーマップを使ってウィンドウに表示される色については定義していない。
XFreeColormap はエラー BadColor を起こすことがある。
typedef struct { unsigned long pixel;/* ピクセル値 */ unsigned short red, green, blue;/* RGB 値 */ char flags; /* DoRed, DoGreen, DoBlue */ char pad; } XColor;
red, green, blue の値は常に 0 以上 65535 以下であり、ディスプレイのハー ドウェアが実際に使用するビット数には依存しない。 X サーバはこれらの値をハードウェアが使う範囲に調整する。 黒は (0,0,0) で表され、白は (65535,65535,65535)で表される。 関数によっては、flags メンバで red, green, blue のどれを使うかを制御す る。この場合、flags メンバは DoRed, DoGreen, DoBlue のうち0個以上について論理和をとったものである。