SG12864A
Dependents: SG12864A_TestProgram
Diff: SG12864A.cpp
- Revision:
- 3:86e7fba29623
- Parent:
- 2:91c03e41c927
- Child:
- 4:200d1ea4e76e
--- a/SG12864A.cpp Tue Jul 20 05:30:47 2010 +0000 +++ b/SG12864A.cpp Tue Jul 20 07:23:15 2010 +0000 @@ -159,13 +159,17 @@ void SG12864A::bufferPull(void) { } -void SG12864A::bufferClear(void) { +void SG12864A::bufferClear(bool reverse) { for (int i = 0; i < sizeof(buffer); i++) { - buffer[i] = 0x00; + if (reverse) { + buffer[i] = 0xFF; + } else { + buffer[i] = 0x00; + } } } -void SG12864A::bufferDrawLine(uint16_t x1, uint16_t y1, uint16_t x2, uint16_t y2) { +void SG12864A::bufferDrawLine(uint16_t x1, uint16_t y1, uint16_t x2, uint16_t y2, bool reverse) { /* * Bresenham's line algorithm */ @@ -190,9 +194,17 @@ } for (int x = x1; x <= x2; x++) { if (steep) { - setPixel(y,x); + if (reverse) { + unsetPixel(y, x); + } else { + setPixel(y, x); + } } else { - setPixel(x,y); + if (reverse) { + unsetPixel(x, y); + } else { + setPixel(x, y); + } } error = error - deltay; if (error < 0) { @@ -202,45 +214,67 @@ } } -void SG12864A::bufferDrawBox(uint16_t x1, uint16_t y1, uint16_t x2, uint16_t y2) { +void SG12864A::bufferDrawBox(uint16_t x1, uint16_t y1, uint16_t x2, uint16_t y2, bool reverse) { for (int x = x1; x <= x2; x++) { - setPixel(x, y1); - setPixel(x, y2); + if (reverse) { + unsetPixel(x, y1); + unsetPixel(x, y2); + } else { + setPixel(x, y1); + setPixel(x, y2); + } } for (int y = y1; y <= y2; y++) { - setPixel(x1, y); - setPixel(x2, y); - } -} - -void SG12864A::bufferFillBox(uint16_t x1, uint16_t y1, uint16_t x2, uint16_t y2) { - for (int x = x1; x <= x2; x++) { - for (int y = y1; y <= y2; y++) { - setPixel(x, y); + if (reverse) { + unsetPixel(x1, y); + unsetPixel(x2, y); + } else { + setPixel(x1, y); + setPixel(x2, y); } } } -void SG12864A::bufferDrawString(const uint8_t x, const uint8_t y, const char * str) { - char *p = (char *)str; +void SG12864A::bufferFillBox(uint16_t x1, uint16_t y1, uint16_t x2, uint16_t y2, bool reverse) { + for (int x = x1; x <= x2; x++) { + for (int y = y1; y <= y2; y++) { + if (reverse) { + unsetPixel(x, y); + } else { + setPixel(x, y); + } + } + } +} + +void SG12864A::bufferDrawString(uint8_t x, uint8_t y, char * str, bool reverse) { + char *p = str; int cnt = 0; while (*p) { - bufferDrawChar(x + (FONT_X * cnt), y, *p); + bufferDrawChar(x + (FONT_X * cnt), y, *p, reverse); p++; cnt++; } } -void SG12864A::bufferDrawChar(const uint8_t x, const uint8_t y, const char c) { +void SG12864A::bufferDrawChar(uint8_t x, uint8_t y, char c, bool reverse) { if ((FONT_MIN_CODE <= c) &&(c <= FONT_MAX_CODE)) { int aofs = (c - FONT_MIN_CODE) * FONT_X; for (int i = 0; i < FONT_X; i++) { uint8_t pat = font5x7_data[aofs + i]; for (int j = 0; j < FONT_Y; j++) { if (pat & (1 << j)) { - setPixel(x + i, y + j); + if (reverse) { + unsetPixel(x + i, y + j); + } else { + setPixel(x + i, y + j); + } } else { - unsetPixel(x + i, y + j); + if (reverse) { + setPixel(x + i, y + j); + } else { + unsetPixel(x + i, y + j); + } } } } @@ -249,15 +283,42 @@ uint8_t pat = (i % 2) ? 0x55 : 0xAA; for (int j = 0; j < FONT_Y; j++) { if (pat & (1 << j)) { - setPixel(x + i, y + j); + if (reverse) { + unsetPixel(x + i, y + j); + } else { + setPixel(x + i, y + j); + } } else { - unsetPixel(x + i, y + j); + if (reverse) { + setPixel(x + i, y + j); + } else { + unsetPixel(x + i, y + j); + } } } } } } +void SG12864A::bufferDrawCheckbox(uint16_t x1, uint16_t y1, uint16_t x2, uint16_t y2, bool state, bool reverse) { + bufferDrawBox(x1, y1, x2, y2, reverse); + if (state) { + bufferDrawLine(x1, y1, x2, y2, reverse); + bufferDrawLine(x1, y2, x2, y1, reverse); + } +} + +void SG12864A::bufferDrawProgressbar(uint16_t x1, uint16_t y1, uint16_t x2, uint16_t y2, int min, int max, int value, bool horizontal, bool reverse) { + bufferDrawBox(x1, y1, x2, y2, reverse); + if ((value < min) || (max < value)) { + return; + } + int tmp_max = max - min; + int tmp_val = value - min; + int pix = ((x2 - x1) * tmp_val) / tmp_max; + bufferFillBox(x1 + 1, y1 + 1, x1 + pix - 1, y2 - 1, reverse); +} + /** * High Level Interface. *