diff options
Diffstat (limited to 'src/cmap.cxx')
| -rw-r--r-- | src/cmap.cxx | 198 |
1 files changed, 101 insertions, 97 deletions
diff --git a/src/cmap.cxx b/src/cmap.cxx index 6fc08e023..0825a50f5 100644 --- a/src/cmap.cxx +++ b/src/cmap.cxx @@ -1,28 +1,30 @@ // -// "$Id$" -// // Colormap generation program for the Fast Light Tool Kit (FLTK). // -// Copyright 1998-2016 by Bill Spitzak and others. +// Copyright 1998-2020 by Bill Spitzak and others. // // This library is free software. Distribution and use rights are outlined in // the file "COPYING" which should have been included with this file. If this // file is missing or damaged, see the license at: // -// http://www.fltk.org/COPYING.php +// https://www.fltk.org/COPYING.php // // Please report all bugs and problems on the following page: // -// http://www.fltk.org/str.php +// https://www.fltk.org/str.php // +// // This program produces the contents of "fl_cmap.h" as stdout // -// Compile, link, and run (example): +// Compile, link, run and delete the program 'cmap' (for instance on a +// Linux system) to generate fl_cmap.h: // -// gcc -o cmap cmap.cxx -lm && ./cmap > fl_cmap.h +// $ gcc -o cmap cmap.cxx -lm && ./cmap > fl_cmap.h && rm -f ./cmap #include <stdio.h> +#include <math.h> +#include <time.h> // This table is initialized with color values I got by reading the // colormap on an IRIX 4.3 machine: @@ -32,13 +34,16 @@ // fltk programs more friendly on color-adjusted screens. If you want // pure colors you should get them out of the colormap. -//#define III 244 // maximum intensity of the basic colors +// #define III 244 // maximum intensity of the basic colors // that results in errors and unshared colormap entries, so full intensity: + #define III 255 // maximum intensity of the basic colors static short cmap[256][3] = { -// 3-bit colormap: + + // 3-bit colormap: + { 0, 0, 0}, // black {III, 0, 0}, // red { 0,III, 0}, // green @@ -47,7 +52,9 @@ static short cmap[256][3] = { {III, 0,III}, // magenta { 0,III,III}, // cyan {III,III,III}, // white -// pastel versions of those colors, from SGI's standard color map: + + // pastel versions of those colors, from SGI's standard color map: + { 85, 85, 85}, // 1/3 gray {198,113,113}, // salmon? pale red? {113,198,113}, // pale green @@ -55,37 +62,22 @@ static short cmap[256][3] = { {113,113,198}, // pale blue {142, 56,142}, // purple, orchid, pale magenta { 56,142,142}, // cadet blue, aquamarine, pale cyan -// The next location is used for FL_SELECTION_COLOR. It formerly was 2/3 gray -// but this is changed to be the Windows blue color. This allows the default -// behavior on both X and Windows to match: - { 0, 0,128}, -//{170,170,170}, // old 2/3 gray color -// These next 16 are the FL_FREE_COLOR area. In some versions of fltk -// these were filled with random colors that a Irix 5.3 machine placed -// in these locations. Other versions of fltk filled this with the 1/3 -// gray above to discourage their use. This newest version uses colors -// that NewTek has assigned for their GUI: -#if 0 - // The Irix 5.3 colors: - { 16, 16, 16}, - {128, 40,128}, - {198, 30, 30}, - { 66, 30, 30}, - {176,140,140}, - { 0, 20, 20}, - { 20, 10, 10}, - { 40, 20, 20}, - { 60, 30, 30}, - { 0, 80, 80}, - { 0, 40, 40}, - { 20, 20, 0}, - { 40, 40, 0}, - { 80, 80, 10}, - {150,150, 20}, - {160, 10, 10}, -#else - // The NewTek colors: (from George Yohng) - {168,168,152}, + + // The next location (15) is used for FL_SELECTION_COLOR. It formerly was + // 2/3 gray but this is changed to be the Windows blue color. This allows + // the default behavior on both X and Windows to match: + // {170,170,170}, // old 2/3 gray color + + { 0, 0,128}, // 15 = FL_SELECTION_COLOR + + // These next 16 (index 16 - 31) are the FL_FREE_COLOR area. In some + // versions of fltk these were filled with random colors that a Irix 5.3 + // machine placed in these locations. + + // This version uses colors that NewTek has assigned for their GUI + // (from George Yohng): + + {168,168,152}, // 16 = FL_FREE_COLOR {232,232,216}, {104,104, 88}, {152,168,168}, @@ -100,9 +92,9 @@ static short cmap[256][3] = { {144,144,144}, {192,192,192}, { 80, 80, 80}, - {160,160,160}, -#endif -// The rest of the colormap is a gray ramp and table, filled in below: + {160,160,160}, // 31 + + // The rest of the colormap is a gray ramp and table, filled in below: }; // This is Fl::background from Fl_get_system_colors.cxx, with modifications: @@ -111,83 +103,95 @@ static short cmap[256][3] = { #define FL_NUM_GRAY 24 #define FL_GRAY 49 // old value is 47 typedef unsigned char uchar; -#include <math.h> void background(uchar r, uchar g, uchar b) { // replace the gray ramp so that color 47 (by default 2/3) is this color - if (!r) r = 1; else if (r==255) r = 254; - double powr = log(r/255.0)/log((FL_GRAY-FL_GRAY_RAMP)/(FL_NUM_GRAY-1.0)); - if (!g) g = 1; else if (g==255) g = 254; - double powg = log(g/255.0)/log((FL_GRAY-FL_GRAY_RAMP)/(FL_NUM_GRAY-1.0)); - if (!b) b = 1; else if (b==255) b = 254; - double powb = log(b/255.0)/log((FL_GRAY-FL_GRAY_RAMP)/(FL_NUM_GRAY-1.0)); + if (!r) + r = 1; + else if (r == 255) + r = 254; + double powr = log(r / 255.0) / log((FL_GRAY - FL_GRAY_RAMP) / (FL_NUM_GRAY - 1.0)); + if (!g) + g = 1; + else if (g == 255) + g = 254; + double powg = log(g / 255.0) / log((FL_GRAY - FL_GRAY_RAMP) / (FL_NUM_GRAY - 1.0)); + if (!b) + b = 1; + else if (b == 255) + b = 254; + double powb = log(b / 255.0) / log((FL_GRAY - FL_GRAY_RAMP) / (FL_NUM_GRAY - 1.0)); for (int i = 0; i < FL_NUM_GRAY; i++) { - double gray = i/(FL_NUM_GRAY-1.0); - cmap[i+FL_GRAY_RAMP][0] = uchar(pow(gray,powr)*255+.5); - cmap[i+FL_GRAY_RAMP][1] = uchar(pow(gray,powg)*255+.5); - cmap[i+FL_GRAY_RAMP][2] = uchar(pow(gray,powb)*255+.5); + double gray = i / (FL_NUM_GRAY - 1.0); + cmap[i + FL_GRAY_RAMP][0] = uchar(pow(gray, powr) * 255 + .5); + cmap[i + FL_GRAY_RAMP][1] = uchar(pow(gray, powg) * 255 + .5); + cmap[i + FL_GRAY_RAMP][2] = uchar(pow(gray, powb) * 255 + .5); } } int main() { - int i,r,g,b; -#if 0 - /* Read colormap colors into internal table */ - long cmwin; - noport(); - cmwin = winopen("CM"); - for (i=0; i<256; i++) - getmcolor(i,&cmap[i][0],&cmap[i][1],&cmap[i][2]); - winclose(cmwin); -#endif - - // overwrite the X allocation area with one color so people are - // discouraged from using it: - - // for (i=16; i<32; i++) {cmap[i][0]=cmap[i][1]=cmap[i][2] = 85;} + int i, r, g, b, year; + time_t t = time(0); + struct tm *lt = localtime(&t); + year = lt->tm_year + 1900; // copyright year // fill in the gray ramp: - background(0xc0, 0xc0, 0xc0); // microsoft colors // background(170, 170, 170); // old fltk colors + background(0xc0, 0xc0, 0xc0); // microsoft colors + // copy the 1/3 and 2/3 gray to the closest locations in gray ramp: cmap[39][0] = cmap[39][1] = cmap[39][2] = 85; cmap[47][0] = cmap[47][1] = cmap[47][2] = 170; // fill in the color cube i = 56; - for (b=0; b<5; b++) - for (r=0; r<5; r++) - for (g=0; g<8; g++) { - cmap[i][0] = r*255/4; - cmap[i][1] = g*255/7; - cmap[i][2] = b*255/4; + for (b = 0; b < 5; b++) { + for (r = 0; r < 5; r++) { + for (g = 0; g < 8; g++) { + cmap[i][0] = r * 255 / 4; + cmap[i][1] = g * 255 / 7; + cmap[i][2] = b * 255 / 4; i++; } + } + } - // write comment into 'cmap.h' so the reader knows what it is good for - - printf("//\n"); - printf("// \"$%s$\"\n","Id"); // avoid expansion of Id - printf("//\n"); - printf("// DO NOT EDIT THIS FILE !\n"); - printf("//\n"); - printf("// This file must be created with \"src/cmap.cxx\".\n"); - printf("//\n"); - - // write color map values - - for (i=0; i<256; i++) { - printf("\t0x%02x%02x%02x00",cmap[i][0],cmap[i][1],cmap[i][2]); - if (i < 255) printf(",\n"); + // write comment into 'cmap.h' so the reader knows what it is good for + + printf("//\n"); + printf("// DO NOT EDIT THIS FILE !\n"); + printf("//\n"); + printf("// This file must be created with \"src/cmap.cxx\".\n"); + printf("//\n"); + printf("// Copyright 1998-%d by Bill Spitzak and others.\n", year); + printf("//\n"); + printf("// This library is free software. Distribution and use rights are outlined in\n"); + printf("// the file \"COPYING\" which should have been included with this file. If this\n"); + printf("// file is missing or damaged, see the license at:\n"); + printf("//\n"); + printf("// https://www.fltk.org/COPYING.php\n"); + printf("//\n"); + printf("// Please report all bugs and problems on the following page:\n"); + printf("//\n"); + printf("// https://www.fltk.org/str.php\n"); + printf("//\n"); + + // write color map values + + for (i = 0; i < 256; i++) { + printf("\t0x%02x%02x%02x00", cmap[i][0], cmap[i][1], cmap[i][2]); + if (i < 255) + printf(", // %3d\n", i); + else + printf(" // %3d\n", i); } - printf("\n"); - // write final comment + // write final comment - printf("//\n"); - printf("// End of \"$%s$\".\n","Id"); // avoid expansion of Id - printf("//\n"); + printf("//\n"); + printf("// End of fl_cmap.h - generated by cmap.cxx\n"); + printf("//\n"); return 0; } |
