diff options
author | mrwastl <mrwastl@users.sourceforge.net> | 2011-05-28 13:23:09 +0200 |
---|---|---|
committer | mrwastl <mrwastl@users.sourceforge.net> | 2011-05-28 13:23:09 +0200 |
commit | 9adb8f879bcad24978b4ac4d96920dc8727c17a0 (patch) | |
tree | e1e1790d0c6da0f61de72f986d1710467b3942e0 | |
parent | 219dd7dd5d52d07032b4129a96499c7cbe7a4ab3 (diff) | |
download | graphlcd-base-9adb8f879bcad24978b4ac4d96920dc8727c17a0.tar.gz graphlcd-base-9adb8f879bcad24978b4ac4d96920dc8727c17a0.tar.bz2 |
added generic Set8Pixels() to base class cDriver; serdisp-driver: class members fg/bg_colours now uint32_t, better adaption to new cColor-scheme, use Set8Pixels() from base class
-rw-r--r-- | glcddrivers/driver.c | 17 | ||||
-rw-r--r-- | glcddrivers/driver.h | 2 | ||||
-rw-r--r-- | glcddrivers/serdisp.c | 34 | ||||
-rw-r--r-- | glcddrivers/serdisp.h | 6 |
4 files changed, 37 insertions, 22 deletions
diff --git a/glcddrivers/driver.c b/glcddrivers/driver.c index 056f8bc..2a823d7 100644 --- a/glcddrivers/driver.c +++ b/glcddrivers/driver.c @@ -65,4 +65,21 @@ void cDriver::SetScreen(const uint32_t * data, int wid, int hgt) */ } +void cDriver::Set8Pixels(int x, int y, unsigned char data) +{ + int n; + // calling GetForegroundColor() and GetBackgroundColor() is slow in some situations. + // will be replaced through setting object-wide (incl. derived objs) class members + uint32_t fg = GetForegroundColor(); + uint32_t bg = GetBackgroundColor(); + + // guarante that x starts at a position divisible by 8 + x &= 0xFFF8; + + for (n = 0; n < 8; ++n) { + SetPixel(x + n, y, (data & (0x80 >> n)) ? fg : bg); + } +} + + } // end of namespace diff --git a/glcddrivers/driver.h b/glcddrivers/driver.h index babb71a..c235459 100644 --- a/glcddrivers/driver.h +++ b/glcddrivers/driver.h @@ -58,7 +58,7 @@ public: virtual void Clear() {} virtual void SetPixel(int x, int y, uint32_t data) {} - virtual void Set8Pixels(int x, int y, unsigned char data) {} + virtual void Set8Pixels(int x, int y, unsigned char data); // virtual void SetScreen(const unsigned char * data, int width, int height, int lineSize); virtual void SetScreen(const uint32_t *data, int width, int height); virtual void Refresh(bool refreshAll = false) {} diff --git a/glcddrivers/serdisp.c b/glcddrivers/serdisp.c index 2b46a8a..9c667dc 100644 --- a/glcddrivers/serdisp.c +++ b/glcddrivers/serdisp.c @@ -32,9 +32,6 @@ #define FEATURE_BACKLIGHT 0x03 #define FEATURE_ROTATE 0x04 -#define SD_COL_BLACK 0xFF000000 -#define SD_COL_WHITE 0xFFFFFFFF - // taken from serdisp_gpevents.h #define SDGPT_SIMPLETOUCH 0x10 /* simple touch screen event, type: SDGP_evpkt_simpletouch_t */ @@ -89,8 +86,8 @@ int cDriverSerDisp::Init(void) /* pre-init some flags, function pointers, ... */ supports_options = 0; - fg_colour = 1; - bg_colour = -1; + fg_colour = GLCD::cColor::Black; /* set foreground colour to black */ + bg_colour = GLCD::cColor::ERRCOL; // get serdisp version fp_serdisp_getversioncode = (long int (*)()) dlsym(sdhnd, "serdisp_getversioncode"); @@ -123,7 +120,6 @@ int cDriverSerDisp::Init(void) config->name.c_str(), "serdisp_setcolour", errmsg); return -1; } - fg_colour = SD_COL_BLACK; /* set foreground colour to black */ if (serdisp_version >= SERDISP_VERSION(1,96) ) { supports_options = 1; @@ -236,12 +232,12 @@ int cDriverSerDisp::Init(void) } else if (config->options[i].name == "Wiring") { wiringstring = config->options[i].value; } else if (config->options[i].name == "FGColour") { - fg_colour = strtoul(config->options[i].value.c_str(), (char **)NULL, 0); - fg_colour |= 0xFF000000L; /* force alpha to 0xFF */ + fg_colour = (uint32_t)strtoul(config->options[i].value.c_str(), (char **)NULL, 0); + fg_colour |= 0xFF000000; /* force alpha to 0xFF */ fg_forced = 1; } else if (config->options[i].name == "BGColour") { - bg_colour = strtoul(config->options[i].value.c_str(), (char **)NULL, 0); - bg_colour |= 0xFF000000L; /* force alpha to 0xFF */ + bg_colour = (uint32_t)strtoul(config->options[i].value.c_str(), (char **)NULL, 0); + bg_colour |= 0xFF000000; /* force alpha to 0xFF */ bg_forced = 1; } } @@ -301,9 +297,9 @@ int cDriverSerDisp::Init(void) // self-emitting displays (like OLEDs): default background colour => black if ( supports_options && fp_serdisp_isoption(dd, "SELFEMITTING") && (fp_serdisp_getoption(dd, "SELFEMITTING", 0)) ) { if (!bg_forced) - bg_colour = SD_COL_BLACK; /* set background colour to black */ + bg_colour = GLCD::cColor::Black; /* set background colour to black */ if (!fg_forced) - fg_colour = SD_COL_WHITE; /* set foreground colour to white */ + fg_colour = GLCD::cColor::White; /* set foreground colour to white */ } width = config->width; @@ -432,16 +428,17 @@ int cDriverSerDisp::CheckSetup() void cDriverSerDisp::Clear(void) { - if (bg_colour == -1) + if (bg_colour == GLCD::cColor::ERRCOL) // bg_colour not set fp_serdisp_clearbuffer(dd); else { /* if bg_colour is set, draw background 'by hand' */ int x,y; for (y = 0; y < fp_serdisp_getheight(dd); y++) for (x = 0; x < fp_serdisp_getwidth(dd); x++) - fp_serdisp_setcolour(dd, x, y, bg_colour); + fp_serdisp_setcolour(dd, x, y, (long)bg_colour); } } +#if 0 void cDriverSerDisp::Set8Pixels(int x, int y, unsigned char data) { int i, start, pixel; @@ -452,16 +449,17 @@ void cDriverSerDisp::Set8Pixels(int x, int y, unsigned char data) { for (i = 0; i < 8; i++) { pixel = data & (1 << i); if (pixel) { - SetPixel(start + i, y, fg_colour); - } else if (!pixel && bg_colour != -1) { /* if bg_colour is set: use it if pixel is not set */ - SetPixel(start + i, y, bg_colour); + SetPixel(start + i, y, (long)fg_colour); + } else if (!pixel && bg_colour != GLCD::cColor::ERRCOL) { /* if bg_colour is set: use it if pixel is not set */ + SetPixel(start + i, y, (long)bg_colour); } } } +#endif void cDriverSerDisp::SetPixel(int x, int y, uint32_t data) { - fp_serdisp_setcolour(dd, x, y, data); + fp_serdisp_setcolour(dd, x, y, (long)data); } #if 0 diff --git a/glcddrivers/serdisp.h b/glcddrivers/serdisp.h index b748083..2300357 100644 --- a/glcddrivers/serdisp.h +++ b/glcddrivers/serdisp.h @@ -65,8 +65,8 @@ private: long serdisp_version; int supports_options; - long fg_colour; - long bg_colour; + uint32_t fg_colour; + uint32_t bg_colour; void* sdhnd; // serdisplib handle void* dd; // display descriptor @@ -113,7 +113,7 @@ public: virtual void Clear(); virtual void SetPixel(int x, int y, uint32_t data); - virtual void Set8Pixels(int x, int y, unsigned char data); + //virtual void Set8Pixels(int x, int y, unsigned char data); #if 0 virtual void SetScreen(const unsigned char * data, int width, int height, int lineSize); #endif |