1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
|
//
// Colormap generation program for the Fast Light Tool Kit (FLTK).
//
// Copyright 1998-2026 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:
//
// https://www.fltk.org/COPYING.php
//
// Please see the following page on how to report bugs and issues:
//
// https://www.fltk.org/bugs.php
//
//
// This program produces the contents of "fl_cmap.h" on stdout. If you
// need to change the built-in FLTK colormap, change this source file
// accordingly and proceed as follows:
//
// (1) Build the program `bin/cmap`
//
// $ `MAKE` cmap # see below for details
//
// or
//
// $ cmake --build . --target cmap
//
// in your CMake build directory (replace `MAKE` with your build tool,
// for instance `make` or `ninja` or whatever you chose to build FLTK).
//
// (2) Run the program from the build folder:
//
// $ bin/cmap > output.h
//
// (3) Compare `output.h` with the existing file in the source folder
// `[fltk-source-dir]/src/fl_cmap.h`. Take care that the result (diff)
// is plausible.
//
// (4) Replace `[fltk-source-dir]/src/fl_cmap.h` in the FLTK source tree
// with the created file `output.h`.
//
// (5) Build and test FLTK, check if the new color map is as intended.
//
// (6) Finally check in *both* modified file with `git commit` and push
// your changes to the main repository with `git push`.
//
// Note: the created executable `bin/cmap` is temporary and may be deleted
// at any time. It is not intended to be `installed` with the FLTK library.
//
#include <stdio.h>
#include <math.h>
#include <time.h>
// This table is initialized with color values taken from the colormap
// on an IRIX 4.3 machine:
// "full intensity colors" have been turned down some to make white
// background less intense by default. The hope is that this will make
// 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
// 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:
{ 0, 0, 0}, // black
{III, 0, 0}, // red
{ 0,III, 0}, // green
{III,III, 0}, // yellow
{ 0, 0,III}, // blue
{III, 0,III}, // magenta
{ 0,III,III}, // cyan
{III,III,III}, // white
// 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
{142,142, 56}, // khaki
{113,113,198}, // pale blue
{142, 56,142}, // purple, orchid, pale magenta
{ 56,142,142}, // cadet blue, aquamarine, pale cyan
// The next location (index 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},
{216,232,232},
{ 88,104,104},
{156,156,168},
{220,220,232},
{ 92, 92,104},
{156,168,156},
{220,232,220},
{ 92,104, 92},
{144,144,144},
{192,192,192},
{ 80, 80, 80},
{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:
#define FL_GRAY_RAMP 32
#define FL_NUM_GRAY 24
#define FL_GRAY 49 // old value is 47
typedef unsigned char uchar;
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));
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);
}
}
int main() {
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(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;
i++;
}
}
}
// 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 generated by \"util/cmap.cxx\".\n");
printf("// See instructions in this file.\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 see the following page on how to report bugs and issues:\n");
printf("//\n");
printf("// https://www.fltk.org/bugs.php\n");
printf("//\n");
// write color map values
for (i = 0; i < 256; i++) {
printf(" 0x%02x%02x%02x00", cmap[i][0], cmap[i][1], cmap[i][2]);
if (i < 255)
printf(", // %3d\n", i);
else
printf(" // %3d\n", i);
}
// write final comment
printf("//\n");
printf("// End of src/fl_cmap.h - generated by util/cmap.cxx\n");
printf("//\n");
return 0;
}
|