Browse Source

fl_contrast: Return FL_FOREGROUND or FL_BACKGROUND rather than FL_BLACK and FL_WHITE...

tags/v1.3.1001
Jonathan Moore Liles 4 years ago
parent
commit
b825300b2a
1 changed files with 23 additions and 7 deletions
  1. +23
    -7
      src/fl_color.cxx

+ 23
- 7
src/fl_color.cxx View File

@@ -395,6 +395,12 @@ Fl_Color fl_inactive(Fl_Color c) {
return fl_color_average(c, FL_GRAY, .33f);
}


static int get_luminosity ( Fl_Color c1 )
{
return ((c1 >> 24) * 30 + ((c1 >> 16) & 255) * 59 + ((c1 >> 8) & 255) * 11) / 100;
}

/**
Returns a color that contrasts with the background color.
This will be the foreground color if it contrasts sufficiently with the
@@ -404,8 +410,8 @@ Fl_Color fl_inactive(Fl_Color c) {
\return contrasting color
*/
Fl_Color fl_contrast(Fl_Color fg, Fl_Color bg) {
unsigned c1, c2; // RGB colors
int l1, l2; // Luminosities
unsigned c1, c2, flbg, flfg; // RGB colors
int l1, l2, l3, l4; // Luminosities


// Get the RGB values for each color...
@@ -414,16 +420,26 @@ Fl_Color fl_contrast(Fl_Color fg, Fl_Color bg) {

if (bg & 0xffffff00) c2 = (unsigned)bg;
else c2 = fl_cmap[bg];
if (FL_BACKGROUND_COLOR & 0xffffff00) flbg = (unsigned)FL_BACKGROUND_COLOR;
else flbg = fl_cmap[FL_BACKGROUND_COLOR];

// Compute the luminosity...
l1 = ((c1 >> 24) * 30 + ((c1 >> 16) & 255) * 59 + ((c1 >> 8) & 255) * 11) / 100;
l2 = ((c2 >> 24) * 30 + ((c2 >> 16) & 255) * 59 + ((c2 >> 8) & 255) * 11) / 100;
if (FL_FOREGROUND_COLOR & 0xffffff00) flfg = (unsigned)FL_FOREGROUND_COLOR;
else flfg = fl_cmap[FL_FOREGROUND_COLOR];

// Compute the luminosity...
l1 = get_luminosity(c1);
l2 = get_luminosity(c2);
l3 = get_luminosity(flbg);
l4 = get_luminosity(flfg);
// Compare and return the contrasting color...
if ((l1 - l2) > 99) return fg;
else if ((l2 - l1) > 99) return fg;
else if (l2 > 127) return FL_BLACK;
else return FL_WHITE;
else
{
return abs( l2 - l3 ) > abs( l2 - l4 ) ? FL_BACKGROUND_COLOR : FL_FOREGROUND_COLOR;
}
}
/**
@}


Loading…
Cancel
Save