diff options
| author | Manolo Gouy <Manolo> | 2018-01-09 07:26:49 +0000 |
|---|---|---|
| committer | Manolo Gouy <Manolo> | 2018-01-09 07:26:49 +0000 |
| commit | 3b437dae8ce735cded87e93021cb2026cc63cb30 (patch) | |
| tree | 874a5c2e44dd202e26d980a804dabf7d6114454b /src/Fl_Screen_Driver.cxx | |
| parent | 9f0e9ff8138fcd1ee817fe144282513283b0e331 (diff) | |
Put a default implementation of parse_color() in Fl_Screen_Driver and only Fl_X11_Screen_Driver reimplements it.
git-svn-id: file:///fltk/svn/fltk/branches/branch-1.4@12628 ea41ed52-d2ee-0310-a9c1-e6b18d33e121
Diffstat (limited to 'src/Fl_Screen_Driver.cxx')
| -rw-r--r-- | src/Fl_Screen_Driver.cxx | 25 |
1 files changed, 25 insertions, 0 deletions
diff --git a/src/Fl_Screen_Driver.cxx b/src/Fl_Screen_Driver.cxx index 822500a42..5c537ef14 100644 --- a/src/Fl_Screen_Driver.cxx +++ b/src/Fl_Screen_Driver.cxx @@ -495,6 +495,31 @@ void Fl_Screen_Driver::open_display() } } + +// simulation of XParseColor: +int Fl_Screen_Driver::parse_color(const char* p, uchar& r, uchar& g, uchar& b) +{ + if (*p == '#') p++; + size_t n = strlen(p); + size_t m = n/3; + const char *pattern = 0; + switch(m) { + case 1: pattern = "%1x%1x%1x"; break; + case 2: pattern = "%2x%2x%2x"; break; + case 3: pattern = "%3x%3x%3x"; break; + case 4: pattern = "%4x%4x%4x"; break; + default: return 0; + } + int R,G,B; if (sscanf(p,pattern,&R,&G,&B) != 3) return 0; + switch(m) { + case 1: R *= 0x11; G *= 0x11; B *= 0x11; break; + case 3: R >>= 4; G >>= 4; B >>= 4; break; + case 4: R >>= 8; G >>= 8; B >>= 8; break; + } + r = (uchar)R; g = (uchar)G; b = (uchar)B; + return 1; +} + // // End of "$Id$". // |
