XColor(3) カラーマップと色構造体の生成・コピー・破棄

Other Alias

XCreateColormap, XCopyColormapAndFree, XFreeColormap

書式

Colormap XCreateColormap(display, w, visual, alloc)

      Display *display;

      Window w;

      Visual *visual;

      int alloc;

Colormap XCopyColormapAndFree(display, colormap)

      Display *display;

      Colormap colormap;

XFreeColormap(display, colormap)

      Display *display;

      Colormap colormap;

引き数

alloc
割り当てられるカラーマップのエントリーを指定する。 AllocNoneAllocAll を渡すことができる。
colormap
生成、コピー、設定、破棄を行うカラーマップを指定する。
display
X サーバへの接続を指定する。
visual
スクリーンがサポートしているビジュアル型を指定する。 スクリーンがサポートしてないビジュアルの場合、エラー BadMatch となる。
w
カラーマップを作るスクリーンに属するウィンドウを指定する。

説明

関数 XCreateColormap は、指定したウィンドウがあるスクリーンに対して、指定したビジュアル型 のカラーマップを生成し、これに対応するカラーマップの ID を返す。 指定したウィンドウはスクリーンを決定するためだけに使われる点に注意せよ。

ビジュアルクラス GrayScale, PseudoColor, DirectColor に対しては、カラーマップエントリーの初期値は未定義である。 StaticGray, StaticColor, TrueColor に対しては、エントリーは定義済みの値を持つが、これらの値はビジュアルに 依存するもので、X によっては定義されない。 StaticGray, StaticColor, TrueColor に対しては、引き数 alloc は AllocNone でなければならず、そうでない場合にはエラー BadMatch となる。 これら以外のビジュアルクラスにおいて alloc が AllocNone ならば、カラーマップには初期値として割り当てられているエントリーは存 在せず、クライアントがエントリーを割り当てることができる。 ビジュアル型についての情報は、3.1 章を参照すること。

引き数 alloc が AllocAll の場合、カラーマップ全体は書き込み可能で割り当てられる。 割り当てられたエントリーの初期値は未定義である。 GrayScalePseudoColor を指定すると、 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 を起こすことがある。

構造体

The XColor structure contains:

typedef struct {
     unsigned long pixel;
     unsigned short red, green, blue;
     char flags;         
     char pad;
} XColor;

red, green, blue の値は常に 0 以上 65535 以下であり、ディスプレイのハー ドウェアが実際に使用するビット数には依存しない。 X サーバはこれらの値をハードウェアが使う範囲に調整する。 黒は (0,0,0) で表され、白は (65535,65535,65535)で表される。 関数によっては、flags メンバで red, green, blue のどれを使うかを制御す る。この場合、flags メンバは DoRed, DoGreen, DoBlue のうち0個以上について論理和をとったものである。

返り値

BadAlloc
要求されたリソースやサーバメモリの割り当てにサーバが失敗した。
BadColor
引き数 Colormap の値が、定義されている Colormap を指していない。
BadMatch
An InputOnly のウィンドウが Drawable として用いられた。
BadMatch
引き数や引き数の組は正しい型・範囲を持っているが、そのリクエストが要求する 他の条件に適合できなかった。
BadValue
指定された数値の中にリクエストの許容範囲を越えているものがある。引き数に対 して特定の範囲が指定されていなければ、引き数の型で定義されている全ての範 囲が許される。選択肢として定義されている引き数はこのエラーを起こすことが ある。
BadWindow
引き数 Window の値が、定義されている Window を指していない。