mirror of
https://github.com/fltk/fltk.git
synced 2026-05-31 22:04:26 +08:00
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
This commit is contained in:
@@ -92,7 +92,8 @@ public:
|
|||||||
virtual int ready() = 0;
|
virtual int ready() = 0;
|
||||||
virtual void grab(Fl_Window* win) = 0;
|
virtual void grab(Fl_Window* win) = 0;
|
||||||
// --- global colors
|
// --- global colors
|
||||||
virtual int parse_color(const char* p, uchar& r, uchar& g, uchar& b) = 0;
|
/* the default implementation of parse_color() may be enough */
|
||||||
|
virtual int parse_color(const char* p, uchar& r, uchar& g, uchar& b);
|
||||||
virtual void get_system_colors() = 0;
|
virtual void get_system_colors() = 0;
|
||||||
virtual const char *get_system_scheme();
|
virtual const char *get_system_scheme();
|
||||||
// --- global timers
|
// --- global timers
|
||||||
|
|||||||
@@ -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$".
|
// End of "$Id$".
|
||||||
//
|
//
|
||||||
|
|||||||
@@ -74,7 +74,6 @@ public:
|
|||||||
virtual int ready();
|
virtual int ready();
|
||||||
virtual void grab(Fl_Window* win);
|
virtual void grab(Fl_Window* win);
|
||||||
// --- global colors
|
// --- global colors
|
||||||
virtual int parse_color(const char* p, uchar& r, uchar& g, uchar& b);
|
|
||||||
virtual void get_system_colors();
|
virtual void get_system_colors();
|
||||||
virtual const char *get_system_scheme();
|
virtual const char *get_system_scheme();
|
||||||
// --- global timers
|
// --- global timers
|
||||||
|
|||||||
@@ -167,31 +167,6 @@ void Fl_Cocoa_Screen_Driver::grab(Fl_Window* win)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// simulation of XParseColor:
|
|
||||||
int Fl_Cocoa_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;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
static void set_selection_color(uchar r, uchar g, uchar b)
|
static void set_selection_color(uchar r, uchar g, uchar b)
|
||||||
{
|
{
|
||||||
Fl::set_color(FL_SELECTION_COLOR,r,g,b);
|
Fl::set_color(FL_SELECTION_COLOR,r,g,b);
|
||||||
|
|||||||
@@ -48,7 +48,6 @@ public:
|
|||||||
virtual int ready();
|
virtual int ready();
|
||||||
virtual void grab(Fl_Window* win);
|
virtual void grab(Fl_Window* win);
|
||||||
// --- global colors
|
// --- global colors
|
||||||
virtual int parse_color(const char* p, uchar& r, uchar& g, uchar& b);
|
|
||||||
virtual void get_system_colors();
|
virtual void get_system_colors();
|
||||||
// --- global timers
|
// --- global timers
|
||||||
virtual void add_timeout(double time, Fl_Timeout_Handler cb, void *argp);
|
virtual void add_timeout(double time, Fl_Timeout_Handler cb, void *argp);
|
||||||
|
|||||||
@@ -108,12 +108,6 @@ void Fl_Pico_Screen_Driver::grab(Fl_Window* win)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
int Fl_Pico_Screen_Driver::parse_color(const char* p, uchar& r, uchar& g, uchar& b)
|
|
||||||
{
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void Fl_Pico_Screen_Driver::get_system_colors()
|
void Fl_Pico_Screen_Driver::get_system_colors()
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -70,7 +70,6 @@ public:
|
|||||||
virtual int ready();
|
virtual int ready();
|
||||||
virtual void grab(Fl_Window* win);
|
virtual void grab(Fl_Window* win);
|
||||||
// --- global colors
|
// --- global colors
|
||||||
virtual int parse_color(const char* p, uchar& r, uchar& g, uchar& b);
|
|
||||||
virtual void get_system_colors();
|
virtual void get_system_colors();
|
||||||
virtual const char *get_system_scheme();
|
virtual const char *get_system_scheme();
|
||||||
// --- global timers
|
// --- global timers
|
||||||
|
|||||||
@@ -299,31 +299,6 @@ void Fl_WinAPI_Screen_Driver::grab(Fl_Window* win)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// simulation of XParseColor:
|
|
||||||
int Fl_WinAPI_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;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
static void set_selection_color(uchar r, uchar g, uchar b)
|
static void set_selection_color(uchar r, uchar g, uchar b)
|
||||||
{
|
{
|
||||||
Fl::set_color(FL_SELECTION_COLOR,r,g,b);
|
Fl::set_color(FL_SELECTION_COLOR,r,g,b);
|
||||||
|
|||||||
Reference in New Issue
Block a user