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); 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. Returns a color that contrasts with the background color.
This will be the foreground color if it contrasts sufficiently with the 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 \return contrasting color
*/ */
Fl_Color fl_contrast(Fl_Color fg, Fl_Color bg) { 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... // 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; if (bg & 0xffffff00) c2 = (unsigned)bg;
else c2 = fl_cmap[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... // Compare and return the contrasting color...
if ((l1 - l2) > 99) return fg; if ((l1 - l2) > 99) return fg;
else if ((l2 - l1) > 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