XAllocStandardColormap(3X11) — NEWS-OS Programmer’s Manual
名称
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;
引数
displayX サーバへの接続を指定します。
countカラーマップ数を指定します。
count_returnカラーマップ数を返します。
property属性名を指定します。
std_colormapXStandardColormap 構造体を指定します。
std_colormap_return
XStandardColormap 構造体を返します。
解説
XAllocStandardColormap 関数は XStandardColormap 構造体へのポインタを割り当て、返します。 XStandardColormap 構造体の全てのフィールドがゼロに初期設定されていること。 メモリに必要な領域が不足する場合、 XAllocStandardColormap はナルを返します。 この構造体へ割り当てられるメモリを解放するため、 XFree を使います。 XSetRGBColormaps 関数は 指定したウィンドウの属性の RGB カラーマップ定義を交換します。 その属性が存在しない場合でも、 XSetRGBColormaps は RGB カラーマップ定義を設定します。 その定義はタイプが RGB_COLOR_MAP、フォーマットが 32 で格納されます。 RGB_DEFAULT_MAP だけに複数定義が可能という ICCCM 制限の遵守は、 ユーザ責任です。 XSetRGBColormaps 関数は、通常ウィンドウまたはセッションマネージャのみ使用します。 標準のカラーマップを作成するには、以下の様にしてください。
1.同じサーバへ新規に接続をする。
2.サーバをグラブする。
3.属性が、画面のルートウィンドウの属性リストにあるかどうか確認する。
4.希望する属性がない場合:
•カラーマップを作成する (ただし、画面のデフォルトカラーマップを使用しない場合のみ)。
•visual の色の性質を決める。
•XAllocColorPlanes または XAllocColorCells を呼んで、カラーマップにセルを割り当てる。
•XStoreColors を呼んで、カラーマップに適切な色の値を格納する。
•XStandardColormap 構造体のメンバをうめる。
•ルートウィンドウにプロパティをアタッチする。
•XSetCloseDownMode を使用して、リソースを作成します。
5.サーバをアングラブします。 XSetRGBColormaps で発生するエラーには BadAlloc、 BadAtom、 または BadWindow エラーがあります。 XGetRGBColormaps 関数は 指定したウィンドウの属性に格納された RGB カラーマップ定義を返します。 その定義が存在し、タイプが RGB_COLOR_MAP でフォーマットが 32 の場合、 またカラーマップ定義を保持出来る程長い場合、 XGetRGBColormaps は返されたカラーマップに空白を割り当て、 ゼロ以外のステータスを返します。 visualid が無い場合、 XGetRGBColormaps はウィンドウがあるスクリーンへのデフォルトの visual として扱われます。 また、 killid が無い場合には、 リソースを解放出来ないことを示す None と見なされます。 XGetRGBColormaps は返されたカラーマップに空白を割り当て、 ゼロ以外のステータスを返します。
上記以外の場合には、 どのフィールドも設定されず、 XGetRGBColormaps はゼロのステータスを返します。 また、RGB_DEFAULT_MAP だけに複数定義が可能いう ICCCM 制限の順守は、 ユーザ責任です。 XGetRGBColormaps で発生するエラーには、 BadAtom および BadWindow エラーがあります。
構造体
XStandardColormap 構造体は、以下の様になります。 /∗ ヒント ∗/
| #define | ReleaseByFreeingColormap | ( (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 メンバは XCreateColormaセ 関数で生成されるカラーマップです。 メンバの red_max、 green_max、および blue_max は、赤色、緑色、青色それぞれの最大値を与えます。 それぞれの色係数はゼロから最大値までを含みます。 例えば、 一般的なカラーマップ構成は 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_pixel メンバの説明を参照)。 3/3/2 というような構成であれば、 red_mult = 32、reen_mult = 4、そして blue_mult = 1 となり、 各色が 6 種類の場合、 red_mult = 36、green_mult = 6、そして blue_mult = 1 となります。 base_pixel メンバはピクセル値を構成する基本ピクセル値を与えます。 通常、 base_pixel は XAllocColorPlanes 関数へのコールによって得られます。 赤、緑、青それぞれに適切な範囲で値があたえられると、 以下の式に従いピクセル値が計算されます。
(r ∗ red_mult + g ∗ green_mult + b ∗ blue_mult + base_pixel) & 0xFFFFFFFF
GrayScale カラーマップに関しては、メンバの colormap、red_max、red_mult、 および base_pixel が定義されます。 その他のメンバは無視されます。 GrayScale ピクセル値を計算するには、以下の書式で記述して下さい。
(gray ∗ red_mult + base_pixel) & 0xFFFFFFFF
マイナスの掛け算は、 乗数の 2 のコンプリメント (ビットを反転させたもの) を unsigned long に変換し、結果を適切な _mult フィールドに格納します。 0xFFFFFFFF でマスクして、効率的に正の乗数を負の乗数に変換します。 このマスクは、計算に使用される整数の型のサイズにより、 ほとんどのマシンで自動的に行われます。 visualid メンバはカラーマップが作成された visual の ID 番号を返します。 killid メンバはリソース ID を返します。 このリソース ID は、カラーマップ ID を開放して、 または指定されたリソースに対して XKillClient 関数を呼び出して、 標準カラーマップが保持するセルを開放するかどうかを示します。 (この方法は、実存するカラーマップからの割り付けに必要です。) XStandardColormap 情報を保持する属性は、タイプ RGB_COLOR_MAP になります。
診断
BadAlloc サーバはリクエストされたリソースまたはサーバメモリの割り付けに失敗した。
BadAtom Atom 引数の値が定義された Atom 名称と一致しない。
BadWindow
Window 引数の値が定義されたウィンドウの名称に一致しない。
関連事項
XAllocColor(3X11), XCreateColormap(3X11), XFree(3X11), XSetCloseDownMode(3X11)
Xlib − C Language X Interface
NEWS-OSRelease 4.2.1R