XAllocStandardColormap(3X11)

名前
XAllocStandardColormap, XSetRGBColormaps, XGetRGBColormaps, XStandardColormap - 標準カラーマップ構造体のアロケート・設定・取得

書式
XStandardColormap *XAllocStandardColormap()

void XSetRGBColormaps(display, w, std_colormap, count, property)
      Display *display;
      Window w;
      XStandardColormap *std_colormap;
      int count;
      Atom property;

Status XGetRGBColormaps(display, w, std_colormap_return, count_return, property)
      Display *display;
      Window w;
      XStandardColormap **std_colormap_return;
      int *count_return;
      Atom property;

引き数

display
    X サーバへの接続を指定。

count
    カラーマップの数を指定。

count_return
    カラーマップの数が返される。

property
    プロパティの名前を指定。

std_colormap
    使用する 構造体を指定。

std_colormap_return
    構造体が返される。

説明
関数 は 構造体をアロケートし、それに対するポインタを返す。 構造体の全てのフィールドはゼロで初期化されることに注意せよ。 十分なメモリが利用できない場合、 はNULLを返す。 この構造体に割り当てられたメモリを解放するには を使用すること。

関数 は指定したウィンドウの指定したプロパティの RGB カラーマップの定義を置 き換える。 そのプロパティが存在しない場合、 は指定したウィンドウの指定したプロパティの RGB カラーマップの定義をセッ トする。 プロパティはタイプ RGB_COLOR_MAP, フォーマット32で格納される。 RGB_DEFAULT_MAP のみが複数の定義を持つという ICCCM の規定は、関数を呼 び出す側で守る義務があることに注意せよ。

関数 を使うのは、通常はウィンドウかセッションマネージャだけである。 標準カラーマップは以下の手続きで作成する。

1.  現在のサーバへの新しい接続をオープンする。

2.  サーバをグラブする。

3.  スクリーンのルートウィンドウのプロパティリストにこのプロパティがあるか どうか確認する。

4.  必要なプロパティがなければ次の処理を行う。

    •   (スクリーンのデフォルトのカラーマップを使わない場合に限り)カラーマップ を生成する。

    •   ビジュアルの色の特性を決定する。

    •   カラーマップ内のセルをアロケートする(あるいは で作成する)。

    •   を呼び、カラーマップに適切な色の値を格納する。

    •   構造体のメンバを設定する。

    •   このプロパティをルートウィンドウに割り付ける。

    •   を使用して、リソースを永続的なものにする。

5.  サーバのグラブを解除する。

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

は、指定したウィンドウの指定したプロパティ内の RGB カラーマップ定義を 返す。 プロパティが存在し、そのタイプが RGB_COLOR_MAP で、フォーマットが 32 で、かつカラーマップ定義を含むのに十分な長さを持っていれば、 は返すカラーマップをアロケートし、その領域を埋め、ゼロでないステータス を返す。 ビジュアルIDがない場合、 はウィンドウが配置されるスクリーンのデフォルトのビジュアルを仮定する。 kill ID が存在しない場合には None が仮定される。 これは、このリソースは解放できないことを示す。 これ以外の場合には、いずれのフィールドも設定されず、 はゼロのステータスを返す。 RGB_DEFAULT_MAP だけが1つ以上の定義を含む ICCCM の制限を引き受けるのは 関数を呼び出す側の責任であることに注意せよ。

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

構造体
構造体の内容を以下に示す。

/* ヒント */
#define |  | ( (XID) 1L)
/* 値 */ typedef struct {
    Colormap colormap;
    unsigned long red_max;
    unsigned long red_mult;
    unsigned long green_max;
    unsigned long green_mult;
    unsigned long blue_max;
    unsigned long blue_mult;
    unsigned long base_pixel;
    VisualID visualid;
    XID killid; } XStandardColormap;

colormap メンバは、関数 で作られるカラーマップである。 red_max, green_max, blue_max メンバは RGBの各値の最大値を与える。 色の各係数の範囲はゼロ以上最大値以下である。 例えば、標準的なカラーマップの配置は 3/3/2である(赤に3プレーン、緑に3 プレーン、青に2プレーン)。 このカラーマップは red_max = 7, green_max = 7, blue_max = 3 となる。 216しか使えないような場合の配置としては、red_max = 5, green_max = 5, blue_max = 5 などが考えられる。

red_mult, green_mult, blue_mult メンバは完全なピクセル値を作るための倍 率を与える。 (詳しい情報については base_pixels メンバの説明を参照すること。) 3/3/2 の配置の場合には red_mult は 32, green_mult は 4, blue_mult は 1 となる。 6/6/6 の配置の場合には、red_mult は 36, green_mult は 6, blue_mult は 1 となる。

base_pixel メンバは、完全なピクセル値を作るために使われるベースピクセ ル値を与える。 通常、この base_pixel は関数 を呼び出して得る。 正しい範囲の RGB の各係数を与えると、次の式で対応するピクセル値を計算 することができる。

(r * red_mult + g * green_mult + b * blue_mult + base_pixel) & 0xFFFFFFFF

カラーマップについては、colormap, red_max, red_mult, base_pixel メンバ だけが定義される。 他のメンバは無視される。 のピクセル値の計算には次の式を使用する。

(gray * red_mult + base_pixel) & 0xFFFFFFFF

負の乗数を表すには、その乗数の 2 の補数表現を unsigned long に変換し、 その結果を適切な _mult フィールドに保存すれば良い。 0xFFFFFFFF のマスクを掛けるステップで、得られた正の乗数を負の乗数に効 率的に変換することができる。 多くの計算機アーキテクチャでは、マスキングのステップは計算に使用される 整数のサイズに依存して自動的に行われる。

visualid メンバは、カラーマップを生成したビジュアルのID番号を与える。 killid メンバは、リソースIDを与える。 このリソースIDは、この標準カラーマップが保持しているセルをカラーマップ IDの解放によって解放するのか、指定されたリソースについての の呼び出しによって行うのかを示す。 (この方法は、現在あるカラーマップ以外のアロケートに対して必要である。)

の情報を含むプロパティのタイプは RGB_COLOR_MAP である。

返り値

サーバが、要求されたリソースやサーバメモリの割り当てに失敗した。

引き数 Atom の値が定義されている Atom でない。

引き数 Window の値が定義されている Window でない。

関連項目
XAllocColor(3X11), XCreateColormap(3X11), XFree(3X11), XSetCloseDownMode(3X11)
Xlib - C Language X Interface