| .\"*************************************************************************** |
| .\" Copyright (c) 1998-2010,2015 Free Software Foundation, Inc. * |
| .\" * |
| .\" Permission is hereby granted, free of charge, to any person obtaining a * |
| .\" copy of this software and associated documentation files (the * |
| .\" "Software"), to deal in the Software without restriction, including * |
| .\" without limitation the rights to use, copy, modify, merge, publish, * |
| .\" distribute, distribute with modifications, sublicense, and/or sell * |
| .\" copies of the Software, and to permit persons to whom the Software is * |
| .\" furnished to do so, subject to the following conditions: * |
| .\" * |
| .\" The above copyright notice and this permission notice shall be included * |
| .\" in all copies or substantial portions of the Software. * |
| .\" * |
| .\" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * |
| .\" OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * |
| .\" MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * |
| .\" IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, * |
| .\" DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * |
| .\" OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * |
| .\" THE USE OR OTHER DEALINGS IN THE SOFTWARE. * |
| .\" * |
| .\" Except as contained in this notice, the name(s) of the above copyright * |
| .\" holders shall not be used in advertising or otherwise to promote the * |
| .\" sale, use or other dealings in this Software without prior written * |
| .\" authorization. * |
| .\"*************************************************************************** |
| .\" |
| .\" $Id: curs_color.3x,v 1.39 2015/06/06 23:29:02 tom Exp $ |
| .TH curs_color 3X "" |
| .ie \n(.g .ds `` \(lq |
| .el .ds `` `` |
| .ie \n(.g .ds '' \(rq |
| .el .ds '' '' |
| .de bP |
| .IP \(bu 4 |
| .. |
| .ds n 5 |
| .na |
| .hy 0 |
| .SH NAME |
| \fBstart_color\fR, |
| \fBinit_pair\fR, |
| \fBinit_color\fR, |
| \fBhas_colors\fR, |
| \fBcan_change_color\fR, |
| \fBcolor_content\fR, |
| \fBpair_content\fR, |
| \fBCOLOR_PAIR\fR \- \fBcurses\fR color manipulation routines |
| .ad |
| .hy |
| .SH SYNOPSIS |
| \fB# include <curses.h>\fR |
| .sp |
| \fBint start_color(void);\fR |
| .br |
| \fBint init_pair(short pair, short f, short b);\fR |
| .br |
| \fBint init_color(short color, short r, short g, short b);\fR |
| .br |
| \fBbool has_colors(void);\fR |
| .br |
| \fBbool can_change_color(void);\fR |
| .br |
| \fBint color_content(short color, short *r, short *g, short *b);\fR |
| .br |
| \fBint pair_content(short pair, short *f, short *b);\fR |
| .br |
| .SH DESCRIPTION |
| .SS Overview |
| \fBcurses\fR supports color attributes on terminals with that capability. |
| To use these routines \fBstart_color\fR must be called, usually right after |
| \fBinitscr\fR. |
| Colors are always used in pairs (referred to as color-pairs). |
| A color-pair consists of a foreground color (for characters) and a background |
| color (for the blank field on which the characters are displayed). |
| A programmer initializes a color-pair with the routine \fBinit_pair\fR. |
| After it has been initialized, \fBCOLOR_PAIR\fR(\fIn\fR), a macro defined in |
| \fB<curses.h>\fR, can be used as a new video attribute. |
| .PP |
| If a terminal is capable of redefining colors, the programmer can use the |
| routine \fBinit_color\fR to change the definition of a color. |
| The routines \fBhas_colors\fR and \fBcan_change_color\fR |
| return \fBTRUE\fR or \fBFALSE\fR, |
| depending on whether the terminal has color capabilities and whether the |
| programmer can change the colors. |
| The routine \fBcolor_content\fR allows a |
| programmer to extract the amounts of red, green, and blue components in an |
| initialized color. |
| The routine \fBpair_content\fR allows a programmer to find |
| out how a given color-pair is currently defined. |
| .SS Color Rendering |
| The \fBcurses\fP library combines these inputs to produce the |
| actual foreground and background colors shown on the screen: |
| .bP |
| per-character video attributes (e.g., via \fBwaddch\fP), |
| .bP |
| the window attribute (e.g., by \fBwattrset\fP), and |
| .bP |
| the background character (e.g., \fBwbkgdset\fP). |
| .PP |
| Per-character and window attributes are usually set by a parameter containing |
| video attributes including a \fBCOLOR_PAIR\fP value. |
| Some functions such as \fBwattr_set\fP use a separate parameter which |
| is the color pair number. |
| .PP |
| The background character is a special case: it includes a character value, |
| just as if it were passed to \fBwaddch\fP. |
| .PP |
| The \fBcurses\fP library does the actual work of combining these color |
| pairs in an internal function called from \fBwaddch\fP: |
| .bP |
| If the parameter passed to \fBwaddch\fP is \fIblank\fP, |
| and it uses the special color pair 0, |
| .RS |
| .bP |
| \fBcurses\fP next checks the window attribute. |
| .bP |
| If the window attribute does not use color pair 0, |
| \fBcurses\fP uses the color pair from the window attribute. |
| .bP |
| Otherwise, \fBcurses\fP uses the background character. |
| .RE |
| .bP |
| If the parameter passed to \fBwaddch\fP is \fInot blank\fP, |
| or it does not use the special color pair 0, |
| \fBcurses\fP prefers the color pair from the parameter, |
| if it is nonzero. |
| Otherwise, it tries the window attribute next, and finally the |
| background character. |
| .PP |
| Some \fBcurses\fP functions such as \fBwprintw\fP call \fBwaddch\fP. |
| Those do not combine its parameter with a color pair. |
| Consequently those calls use only the window attribute or |
| the background character. |
| .SS Routine Descriptions |
| The \fBstart_color\fR routine requires no arguments. |
| It must be called if the programmer wants to use colors, and before any other |
| color manipulation routine is called. |
| It is good practice to call this routine right after \fBinitscr\fR. |
| \fBstart_color\fR does this: |
| .bP |
| It initializes two global variables, \fBCOLORS\fR and |
| \fBCOLOR_PAIRS\fR (respectively defining the maximum number of colors |
| and color-pairs the terminal can support). |
| .bP |
| It initializes the special color pair \fB0\fP to the default foreground |
| and background colors. |
| No other color pairs are initialized. |
| .bP |
| It restores the colors on the terminal to the values |
| they had when the terminal was just turned on. |
| .bP |
| If the terminal supports the \fBinitc\fP (\fBinitialize_color\fP) capability, |
| \fBstart_color\fP |
| initializes its internal table representing the |
| red, green and blue components of the color palette. |
| .IP |
| The components depend on whether the terminal uses |
| CGA (aka "ANSI") or |
| HLS (i.e., the \fBhls\fP (\fBhue_lightness_saturation\fP) capability is set). |
| The table is initialized first for eight basic colors |
| (black, red, green, yellow, blue, magenta, cyan, and white), |
| and after that (if the terminal supports more than eight colors) |
| the components are initialized to \fB1000\fP. |
| .IP |
| \fBstart_color\fP does not attempt to set the terminal's color palette |
| to match its built-in table. |
| An application may use \fBinit_color\fP to alter the internal table |
| along with the terminal's color. |
| .PP |
| These limits apply to color values and color pairs. |
| Values outside these limits are not legal, and may result in a runtime error: |
| .bP |
| \fBCOLORS\fP corresponds to the terminal database's \fBmax_colors\fP capability, |
| which is typically a signed 16-bit integer (see \fBterminfo\fR(\*n)). |
| .bP |
| color values are expected to be in the range \fB0\fP to \fBCOLORS\-1\fP, |
| inclusive (including \fB0\fP and \fBCOLORS\-1\fP). |
| .bP |
| a special color value \fB\-1\fP is used in certain extended functions |
| to denote the \fIdefault color\fP (see \fBuse_default_colors\fP). |
| .bP |
| \fBCOLOR_PAIRS\fP corresponds to the terminal database's \fBmax_pairs\fP capability, |
| which is typically a signed 16-bit integer (see \fBterminfo\fR(\*n)). |
| .bP |
| legal color pair values are in the range \fB1\fP to \fBCOLOR_PAIRS\-1\fP, |
| inclusive. |
| .bP |
| color pair \fB0\fP is special; it denotes \*(``no color\*(''. |
| .IP |
| Color pair \fB0\fP is assumed to be white on black, |
| but is actually whatever the terminal implements before color is initialized. |
| It cannot be modified by the application. |
| .PP |
| The \fBinit_pair\fR routine changes the definition of a color-pair. |
| It takes three arguments: the number of the color-pair to be changed, the foreground |
| color number, and the background color number. |
| For portable applications: |
| .bP |
| The first argument must be a legal color pair value. |
| If default colors are used (see \fBuse_default_colors\fP) |
| the upper limit is adjusted to allow for extra pairs which use |
| a default color in foreground and/or background. |
| .bP |
| The second and third arguments must be legal color values. |
| .PP |
| If the color-pair was previously initialized, |
| the screen is refreshed and all occurrences of that color-pair |
| are changed to the new definition. |
| .PP |
| As an extension, ncurses allows you to set color pair \fB0\fP via |
| the \fBassume_default_colors\fR routine, or to specify the use of |
| default colors (color number \fB\-1\fR) if you first invoke the |
| \fBuse_default_colors\fR routine. |
| .PP |
| The \fBinit_color\fR routine changes the definition of a color. |
| It takes four arguments: the number of the color to be changed followed by three RGB values |
| (for the amounts of red, green, and blue components). |
| The first argument must be a legal color value; |
| default colors are not allowed here. |
| (See the section \fBColors\fR for the default color index.) |
| Each of the last three arguments |
| must be a value in the range \fB0\fP through \fB1000\fP. |
| When \fBinit_color\fR is used, all |
| occurrences of that color on the screen immediately change to the new |
| definition. |
| .PP |
| The \fBhas_colors\fR routine requires no arguments. |
| It returns \fBTRUE\fR if |
| the terminal can manipulate colors; otherwise, it returns \fBFALSE\fR. |
| This routine facilitates writing terminal-independent programs. |
| For example, a programmer can use it to decide |
| whether to use color or some other video attribute. |
| .PP |
| The \fBcan_change_color\fR routine requires no arguments. |
| It returns \fBTRUE\fR if the terminal supports colors |
| and can change their definitions; |
| other, it returns \fBFALSE\fR. |
| This routine facilitates writing terminal-independent programs. |
| .PP |
| The \fBcolor_content\fR routine gives programmers a way to find the intensity |
| of the red, green, and blue (RGB) components in a color. |
| It requires four arguments: the color number, and three addresses |
| of \fBshort\fRs for storing |
| the information about the amounts of red, green, and blue components in the |
| given color. |
| The first argument must be a legal color value, i.e., |
| \fB0\fP through \fBCOLORS\-1\fP, inclusive. |
| The values that are stored at the addresses pointed to by the |
| last three arguments are in the range |
| \fB0\fP (no component) through \fB1000\fP (maximum amount of component), inclusive. |
| .PP |
| The \fBpair_content\fR routine allows programmers to find out what colors a |
| given color-pair consists of. |
| It requires three arguments: the color-pair |
| number, and two addresses of \fBshort\fRs for storing the foreground and the |
| background color numbers. |
| The first argument must be a legal color value, |
| i.e., in the range \fB1\fP through \fBCOLOR_PAIRS\-1\fR, inclusive. |
| The values that are stored at the addresses pointed |
| to by the second and third arguments are in the |
| range \fB0\fP through \fBCOLORS\fR, inclusive. |
| .SS Colors |
| In \fB<curses.h>\fR the following macros are defined. |
| These are the standard colors (ISO-6429). |
| \fBcurses\fR also assumes that \fBCOLOR_BLACK\fR is the default |
| background color for all terminals. |
| .PP |
| .nf |
| \fBCOLOR_BLACK\fR |
| \fBCOLOR_RED\fR |
| \fBCOLOR_GREEN\fR |
| \fBCOLOR_YELLOW\fR |
| \fBCOLOR_BLUE\fR |
| \fBCOLOR_MAGENTA\fR |
| \fBCOLOR_CYAN\fR |
| \fBCOLOR_WHITE\fR |
| .fi |
| .SH RETURN VALUE |
| The routines \fBcan_change_color()\fR and \fBhas_colors()\fR return \fBTRUE\fR |
| or \fBFALSE\fR. |
| .PP |
| All other routines return the integer \fBERR\fR upon failure and an \fBOK\fR |
| (SVr4 specifies only "an integer value other than \fBERR\fR") upon successful |
| completion. |
| .PP |
| X/Open defines no error conditions. |
| This implementation will return \fBERR\fR on attempts to |
| use color values outside the range \fB0\fP to COLORS\-1 |
| (except for the default colors extension), |
| or use color pairs outside the range \fB0\fP to \fBCOLOR_PAIRS\-1\fP. |
| Color values used in \fBinit_color\fP must be in the range \fB0\fP to \fB1000\fP. |
| An error is returned from all functions |
| if the terminal has not been initialized. |
| An error is returned from secondary functions such as \fBinit_pair\fP |
| if \fBstart_color\fP was not called. |
| .RS 3 |
| .TP 5 |
| \fBinit_color\fP |
| returns an error if the terminal does not support |
| this feature, e.g., if the \fIinitialize_color\fP capability is absent |
| from the terminal description. |
| .TP 5 |
| \fBstart_color\fP |
| returns an error if the color table cannot be allocated. |
| .RE |
| .SH NOTES |
| In the \fIncurses\fR implementation, there is a separate color activation flag, |
| color palette, color pairs table, and associated COLORS and COLOR_PAIRS counts |
| for each screen; the \fBstart_color\fR function only affects the current |
| screen. |
| The SVr4/XSI interface is not really designed with this in mind, and |
| historical implementations may use a single shared color palette. |
| .PP |
| Note that setting an implicit background color via a color pair affects only |
| character cells that a character write operation explicitly touches. |
| To change |
| the background color used when parts of a window are blanked by erasing or |
| scrolling operations, see \fBcurs_bkgd\fR(3X). |
| .PP |
| Several caveats apply on 386 and 486 machines with VGA-compatible graphics: |
| .bP |
| COLOR_YELLOW is actually brown. |
| To get yellow, use COLOR_YELLOW combined with the \fBA_BOLD\fR attribute. |
| .bP |
| The A_BLINK attribute should in theory cause the background to go bright. |
| This often fails to work, and even some cards for which it mostly works |
| (such as the |
| Paradise and compatibles) do the wrong thing when you try to set a bright |
| "yellow" background (you get a blinking yellow foreground instead). |
| .bP |
| Color RGB values are not settable. |
| .SH PORTABILITY |
| This implementation satisfies XSI Curses's minimum maximums |
| for \fBCOLORS\fR and \fBCOLOR_PAIRS\fR. |
| .PP |
| The \fBinit_pair\fP routine accepts negative values of foreground |
| and background color to support the \fBuse_default_colors\fP extension, |
| but only if that routine has been first invoked. |
| .PP |
| The assumption that \fBCOLOR_BLACK\fR is the default |
| background color for all terminals can be modified using the |
| \fBassume_default_colors\fP extension. |
| .PP |
| This implementation checks the pointers, |
| e.g., for the values returned by |
| \fBcolor_content\fP and \fBpair_content\fP, |
| and will treat those as optional parameters when null. |
| .SH SEE ALSO |
| \fBcurses\fR(3X), |
| \fBcurs_initscr\fR(3X), |
| \fBcurs_attr\fR(3X), |
| \fBcurs_variables\fR(3X), |
| \fBdefault_colors\fR(3X) |