summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichael R Sweet <michael.r.sweet@gmail.com>2005-05-12 17:08:35 +0000
committerMichael R Sweet <michael.r.sweet@gmail.com>2005-05-12 17:08:35 +0000
commitf88e7b23afb128d10be838d275e4f61ba6836112 (patch)
tree9984a2c538d178e0d6f37f999bd808a7492dfd6f
parent2d1eade9bf235e9ce3d3aecd983b2f0e2992e4fc (diff)
fl_contrast() now compares the luminosity of each color (STR
#837) git-svn-id: file:///fltk/svn/fltk/branches/branch-1.1@4339 ea41ed52-d2ee-0310-a9c1-e6b18d33e121
-rw-r--r--CHANGES2
-rw-r--r--src/fl_color.cxx20
2 files changed, 15 insertions, 7 deletions
diff --git a/CHANGES b/CHANGES
index 84eb6f1b0..72e1d634b 100644
--- a/CHANGES
+++ b/CHANGES
@@ -2,6 +2,8 @@ CHANGES IN FLTK 1.1.7
- Documentation fixes (STR #648, STR #692, STR #730, STR
#744, STR #745)
+ - fl_contrast() now compares the luminosity of each color
+ (STR #837)
- Fl_Input_ crashed on some platforms when wrapping
international text characters (STR #836)
- Fixed some BMP images loading bugs (STR #825)
diff --git a/src/fl_color.cxx b/src/fl_color.cxx
index d1a9dfa63..d2dcefb1c 100644
--- a/src/fl_color.cxx
+++ b/src/fl_color.cxx
@@ -362,20 +362,26 @@ Fl_Color fl_inactive(Fl_Color c) {
}
Fl_Color fl_contrast(Fl_Color fg, Fl_Color bg) {
- unsigned c1, c2;
+ unsigned c1, c2; // RGB colors
+ int l1, l2; // Luminosities
+
+ // Get the RGB values for each color...
if (fg & 0xffffff00) c1 = (unsigned)fg;
else c1 = fl_cmap[fg];
if (bg & 0xffffff00) c2 = (unsigned)bg;
else c2 = fl_cmap[bg];
- if ((c1^c2)&0x80800000)
- return fg;
- else if (c2&0x80800000)
- return FL_BLACK;
- else
- return FL_WHITE;
+ // Compute the luminosity...
+ l1 = ((c1 >> 24) * 31 + ((c1 >> 16) & 255) * 61 + ((c1 >> 8) & 255) * 8) / 100;
+ l2 = ((c2 >> 24) * 31 + ((c2 >> 16) & 255) * 61 + ((c2 >> 8) & 255) * 8) / 100;
+
+ // Compare and return the contrasting color...
+ if ((l1 - l2) > 127) return fg;
+ else if ((l2 - l1) > 127) return fg;
+ else if (l2 > 127) return FL_BLACK;
+ else return FL_WHITE;
}
//