summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/fl_color.cxx42
1 files changed, 22 insertions, 20 deletions
diff --git a/src/fl_color.cxx b/src/fl_color.cxx
index 2c1544a18..64368168f 100644
--- a/src/fl_color.cxx
+++ b/src/fl_color.cxx
@@ -1,5 +1,5 @@
//
-// "$Id: fl_color.cxx,v 1.11 1999/01/19 19:10:39 mike Exp $"
+// "$Id: fl_color.cxx,v 1.12 1999/01/25 20:43:05 mike Exp $"
//
// Color functions for the Fast Light Tool Kit (FLTK).
//
@@ -316,25 +316,27 @@ void Fl::get_color(Fl_Color i, uchar &red, uchar &green, uchar &blue) {
blue = uchar(c>>8);
}
+Fl_Color fl_color_average(Fl_Color color1, Fl_Color color2, float weight) {
+ Fl_Color avg;
+ unsigned rgb1 = fl_cmap[color1];
+ unsigned rgb2 = fl_cmap[color2];
+ uchar r, g, b;
+
+ r = (uchar)(((uchar)(rgb1>>24))*weight + ((uchar)(rgb2>>24))*(1-weight));
+ g = (uchar)(((uchar)(rgb1>>16))*weight + ((uchar)(rgb2>>16))*(1-weight));
+ b = (uchar)(((uchar)(rgb1>>8))*weight + ((uchar)(rgb2>>8))*(1-weight));
+
+ if (r == g && r == b) { // get it out of gray ramp
+ avg = fl_gray_ramp(r*FL_NUM_GRAY/256);
+ } else { // get it out of color cube:
+ avg = fl_color_cube(r*FL_NUM_RED/256,g*FL_NUM_GREEN/256,b*FL_NUM_BLUE/256);
+ }
+
+ return avg;
+}
+
Fl_Color inactive(Fl_Color c) {
- // cache because it is like to ask for the same color a lot:
- static Fl_Color cache_from = FL_GRAY;
- static Fl_Color cache_to = FL_GRAY;
- if (c == cache_from) return cache_to;
- cache_from = c;
- // do a 33% mix between this color and FL_GRAY:
- unsigned rgb1 = fl_cmap[c];
- unsigned rgb2 = fl_cmap[FL_GRAY];
- uchar r = (uchar)((((uchar)(rgb1>>24)) + ((uchar)(rgb2>>24))*2)/3);
- uchar g = (uchar)((((uchar)(rgb1>>16)) + ((uchar)(rgb2>>16))*2)/3);
- uchar b = (uchar)((((uchar)(rgb1>> 8)) + ((uchar)(rgb2>> 8))*2)/3);
- // and find the closest color in gray ramp or color cube:
- if (r == g && r == b) // get it out of gray ramp
- cache_to = fl_gray_ramp(r*FL_NUM_GRAY/256);
- else // get it out of color cube:
- cache_to =
- fl_color_cube(r*FL_NUM_RED/256,g*FL_NUM_GREEN/256,b*FL_NUM_BLUE/256);
- return cache_to;
+ return fl_color_average(c, FL_GRAY, .33f);
}
Fl_Color contrast(Fl_Color fg, Fl_Color bg) {
@@ -349,5 +351,5 @@ Fl_Color contrast(Fl_Color fg, Fl_Color bg) {
}
//
-// End of "$Id: fl_color.cxx,v 1.11 1999/01/19 19:10:39 mike Exp $".
+// End of "$Id: fl_color.cxx,v 1.12 1999/01/25 20:43:05 mike Exp $".
//