[GRASS5] R_color vs R_standard_color

Glynn Clements glynn at gclements.plus.com
Tue Apr 18 04:58:44 EDT 2006

Cedric Shock wrote:

> Is there any real difference between R_color and R_standard_color?

I made an attempt at documenting all of the different colour systems
in display/drivers/lib/colors.txt.

The colour table used by R_color() can be modified through
R_reset_color[s], while the one used by R_standard_color can't.

> Take this example (d.bargraph's background color):
> int color1;
> const int customBGcolor = MAXCOLORS + 2;
> ...
> Then either
> R_reset_color(customBGcolor, R, G, B);
> color1 = customBGcolor;
> or (essentially)
> color1 = D_translate_color (...);
> happens. So now color1 is either a number on the range 1 to MAXCOLORS if the 
> color came from translate_color, or it's MAXCOLORS + 2 if a color was 
> provided and set. Later, when drawing the box, the following is done:
> if(color1 > MAXCOLORS)	/* ie custom RGB color */
>     R_color(color1);
> else
>     R_standard_color(color1);
> Is this because:
> a.) colors and standard colors really are completely separate but both are 
> being handled using a single integer with a divided range than a struct.
> b.) In the past they were different but now they are the same.
> c.) Something else I'm failing to imagine.

Most of the complications arise from the fact that the display
architecture originally only supported colour-mapped displays, and
R_reset_color[s] modified the palette directly. Support for RGB
displays was added later, by providing a software palette.

The point of having a set of standard colours was to provide a common
palette so that you could overlay multiple maps in the monitor without
conflicts over palette entries.

Glynn Clements <glynn at gclements.plus.com>

More information about the grass-dev mailing list