diff options
| author | Michael R Sweet <michael.r.sweet@gmail.com> | 2005-05-12 17:08:35 +0000 |
|---|---|---|
| committer | Michael R Sweet <michael.r.sweet@gmail.com> | 2005-05-12 17:08:35 +0000 |
| commit | f88e7b23afb128d10be838d275e4f61ba6836112 (patch) | |
| tree | 9984a2c538d178e0d6f37f999bd808a7492dfd6f | |
| parent | 2d1eade9bf235e9ce3d3aecd983b2f0e2992e4fc (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-- | CHANGES | 2 | ||||
| -rw-r--r-- | src/fl_color.cxx | 20 |
2 files changed, 15 insertions, 7 deletions
@@ -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; } // |
