EN JA
curs_color(3X)
curs_color(3X) curs_color(3X)

名称

start_color, init_pair, init_color, has_colors, can_change_color, color_content, pair_content, COLOR_PAIR - curses カラー操作ルーチン

書式

# include <curses.h>
 
int start_color(void);
 
int init_pair(short pair, short f, short b);
 
int init_color(short color, short r, short g, short b);
 
bool has_colors(void);
 
bool can_change_color(void);
 
int color_content(short color, short *r, short *g, short *b);
 
int pair_content(short pair, short *f, short *b);
 

解説

概要

curses は、ケーパビリティのある端末でカラー属性をサポートします。これらのルーチンを使用するには、通常、 initscr の直後に start_color を呼び出さなければなりません。色は必ずペアで使用されます (色のペアと呼ばれます)。色のペアは、(文字用の) 前景色と (文字が表示されるブランクのフィールド用の) 背景色で構成されます。プログラマは、ルーチン init_pair で色のペアを初期化します。初期化された後、 <curses.h> で定義されているマクロである COLOR_PAIR( n) は、新しいビデオ属性として使用できます。

端末が色を再定義できる場合は、プログラマは、色の定義を変更するために、ルーチン init_color を使用できます。ルーチン has_colorscan_change_color は、端末に色のケーパビリティを持っているかどうか、プログラマが色を変更できるかどうかに依存して、 TRUE または FALSE を返します。ルーチン color_content は、プログラマは初期化された色の中の赤、緑、青のコンポーネント (構成要素) の量を抽出できるようにします。ルーチン pair_content は、与えられた色のペアがどのように現在定義されているか、プログラマが知ることを可能にします。

ルーチンの解説

start_color ルーチンには引数は必要ありません。プログラマが色を使用したければ、そして他の色操作ルーチンが呼び出される前に、それは呼び出さなければなりません。 initscr のすぐ後でこのルーチンを呼び出すのはよい演習です。 start_color は 8 つの基本色 (黒、赤、緑、黄色、青、赤紫、水色、白) と 2 つのグローバル変数 COLORSCOLOR_PAIRS を初期化します (端末がサポートできる色と色のペアの最大数をそれぞれ定義します)。また、端末をオンに切り替えたとき、それらが持っていた値に、端末上の色を復元します。

init_pair ルーチンは、色のペアの定義を変更します。次の 3 つの引数を取ります。変更される色のペアの番号、前景色の番号、および背景色の番号です。移植性のあるアプリケーションのために。

-
1 つめの引数の値は 1COLOR_PAIRS-1 の間になければなりません。
-
色ペア 0 は、黒で白と仮定されますが、実際、色が初期化される前に実装される端末しだいです。アプリケーションによって変更することができません。

色のペアが以前に初期化された場合、画面はリフレッシュされ、その色のペアが発生したところはすべて新しい定義に変更されます。

拡張として、ncurses は、 assume_default_colors ルーチンによって色のペア 0 を設定するか、最初に use_default_colors ルーチンを呼び出せばデフォルト色 (色番号 -1) の使用を指定できるようにします。

init_color ルーチンは色の定義を変更します。次の 4 つの引数を取ります。 3 つの RGB 値 (赤、緑、青の各コンポーネントの量について) に続けて変更される色の番号。最初の引数の値は、 0COLORS の間になければなりません。 (デフォルトの色インデックスについては、 のセクションを参照してください)。最後の 3 つの引数はそれぞれ 0 と 1000 の値の間になければなりません。 init_color を使用されるとき、画面上のその色の発生はすべてただちに新しい定義に変わります。

has_colors ルーチンには引数は必要ありません。端末が色を操作できる場合は TRUE を返します。そうでない場合は、 FALSE を返します。このルーチンは、端末に独立なプログラムを書くことを容易にします。たとえば、プログラマは、色または他のビデオ属性を使用するかどうか決定するためにそれを使用できます。

can_change_color ルーチンには引数は必要ありません。端末が色をサポートし、色の定義を変更できる場合は TRUE を返します。そうでない場合、 FALSE を返します。このルーチンは、端末に独立なプログラムを書くことを容易にします。

color_content ルーチンは、色の中に赤、緑、青 (RGB) コンポーネントの強度を見つける方法をプログラマに与えます。次の 4 つの引数を必要とします。色の番号、および与えられた色の中の赤、緑、青のコンポーネントの量に関する情報を格納する short の 3 つのアドレス。最初の引数の値は 0 と COLORS の間になければなりません。最後の 3 つの引数が指すアドレスに格納される値は 0 (コンポーネントなし) と 1000 (コンポーネントの最大の量) の間です。

pair_content ルーチンは、与えられた色のペアがどの色で構成されるかプログラマが知ることができるようにします。次の 3 つの引数が必要です。色のペアの番号、前景色の番号と背景色の番号を格納するための short の 2 つのアドレス。最初の引数の値は 1 と COLOR_PAIRS-1 の間になければなりません。 2 つめと 3 つめの引数が指すアドレスに格納される値は 0 と COLORS の間にあります。

<curses.h> では、次のマクロが定義されます。これらはデフォルトの色です。また、 curses は、 COLOR_BLACK がすべての端末についてデフォルトの背景色であると仮定します。


COLOR_BLACK
COLOR_RED
COLOR_GREEN
COLOR_YELLOW
COLOR_BLUE
COLOR_MAGENTA
COLOR_CYAN
COLOR_WHITE

戻り値

ルーチン can_change_color()has_colors() は、 TRUEFALSE を返します。

整数を返すすべての他のルーチンは、失敗すると ERR を返します。成功して終了すれば、 OK (SVr4 は " ERR 以外の整数値"とだけ明記されています) を返します。

X/Open は、エラー条件を何も定義していません。この実装は、(デフォルトの色の拡張を除いて) 0 から COLORS-1 の範囲外の色の値を使用するか、または 0 から COLOR_PAIR-1 の範囲外の色ペアの使用を試みるとき、 ERR を返します。 init_color で使用される色の値は、0 から 1000 の範囲でなければなりません。端末が初期化されていないなら、すべての関数は、エラーを返します。 start_color が呼び出されなかったなら、 init_pair のような二次的な関数は、エラーを返します。

init_color
は、端末がこの機能をサポートしないなら、例えば、 initialize_color ケーパビリティが端末の記述に欠けているなら、エラーを返します、
start_color
は、色テーブルを割り付けることができないなら、エラーを返します、

ncurses 実装では、色パレット、色のペアテーブル、また各画面の COLORS と COLOR_PAIRS のカウントに関連させた個別の色活性化フラグがあります。 start_color 関数は現在の画面に単に影響します。 SVr4/XSI インタフェースは、これを考慮して実際に設計されていません。また、歴史的な実装は単一の共有される色パレットを使用するかもしれません。

色のペアによって暗黙の背景色を設定することが文字書き込み操作が明示的にタッチする文字セルだけに影響することに注意してください。ウィンドウの部品が操作の削除かスクロールによりブランク (空白) にされるときに使用される背景色を変更するためには、 curs_bkgd(3X) を参照してください。

いくつかの警告は VGA 互換のグラフィックスがある 386 と 486 マシンに適用されます。

-
COLOR_YELLOW は実際には茶色です。黄色にするためには、 A_BOLD 属性と結合した COLOR_YELLOW を使用してください。
-
A_BLINK 属性は、理論的には背景を明るくするはずです。これはしばしば働きません。 (Paradise および互換機のように) ほとんど動作しているいくつかのカードさえ、明るい "黄色の"背景を設定しようとするときに間違った動作をします。 (代わりに前景が黄色でブリンク (点滅) します)。
-
色の RGB 値は設定できません。

移植性

この実装は、XSI Curses の COLORSCOLOR_PAIRS のための最小の最大を満足させます。

init_pair ルーチンは、 use_default_colors 拡張をサポートするために前景および背景色の否定の値を受け付けますが、そのルーチンが最初に呼び出された場合のみです。

COLOR_BLACK がすべての端末のためのデフォルト背景色であるという仮定は assume_default_colors 拡張を使用して修正できます。

この実装は、例えば、 color_contentpair_content によって返された値のような、ポインタをチェックして、null であるとき、省略可能なパラメータとして扱います。

関連項目

curses(3X), curs_initscr(3X), curs_attr(3X), default_colors(3X)