diff --git a/MicroView.cpp b/MicroView.cpp index b10c361..39dd09a 100644 --- a/MicroView.cpp +++ b/MicroView.cpp @@ -171,20 +171,25 @@ void MICROVIEW::display(void) { } } -void MICROVIEW::pixel(uint8_t x, uint8_t y, uint8_t color) { +void MICROVIEW::pixel(uint8_t x, uint8_t y, uint8_t color, uint8_t mode) { if ((x<0) || (x>LCDWIDTH-1) || (y<0) || (y>LCDHEIGHT-1)) return; - if (color==WHITE) - screenmemory[x+ (y/8)*LCDWIDTH] |= _BV((y%8)); - else - screenmemory[x+ (y/8)*LCDWIDTH] &= ~_BV((y%8)); + if (mode==XOR) { + screenmemory[x+ (y/8)*LCDWIDTH] ^= _BV((y%8)); + } + else { + if (color==WHITE) + screenmemory[x+ (y/8)*LCDWIDTH] |= _BV((y%8)); + else + screenmemory[x+ (y/8)*LCDWIDTH] &= ~_BV((y%8)); + } //display(); } // bresenham's algorithm -void MICROVIEW::line(uint8_t x0, uint8_t y0, uint8_t x1, uint8_t y1, uint8_t color) { +void MICROVIEW::line(uint8_t x0, uint8_t y0, uint8_t x1, uint8_t y1, uint8_t color, uint8_t mode) { uint8_t steep = abs(y1 - y0) > abs(x1 - x0); if (steep) { swap(x0, y0); @@ -210,9 +215,9 @@ void MICROVIEW::line(uint8_t x0, uint8_t y0, uint8_t x1, uint8_t y1, uint8_t col for (; x0= 0) { + y--; + ddF_y += 2; + f += ddF_y; + } + x++; + ddF_x += 2; + f += ddF_x; + + pixel(x0 + x, y0 + y, color, mode); + pixel(x0 - x, y0 + y, color, mode); + pixel(x0 + x, y0 - y, color, mode); + pixel(x0 - x, y0 - y, color, mode); + + pixel(x0 + y, y0 + x, color, mode); + pixel(x0 - y, y0 + x, color, mode); + pixel(x0 + y, y0 - x, color, mode); + pixel(x0 - y, y0 - x, color, mode); + + } +} + void MICROVIEW::stopScroll(void){ command(DEACTIVATESCROLL); } diff --git a/MicroView.h b/MicroView.h index 77f592a..2c0a1cd 100644 --- a/MicroView.h +++ b/MicroView.h @@ -21,6 +21,9 @@ #define LCDWIDTH 64 #define LCDHEIGHT 48 +#define NORM 0 +#define XOR 1 + #define PAGE 0 #define ALL 1 @@ -66,9 +69,13 @@ class MICROVIEW { void clear(uint8_t mode); void invert(uint8_t i); void display(void); - void pixel(uint8_t x, uint8_t y, uint8_t color); - void line(uint8_t x0, uint8_t y0, uint8_t x1, uint8_t y1, uint8_t color); - + void pixel(uint8_t x, uint8_t y, uint8_t color, uint8_t mode); + void line(uint8_t x0, uint8_t y0, uint8_t x1, uint8_t y1, uint8_t color, uint8_t mode); + void lineH(uint8_t x, uint8_t y, uint8_t width, uint8_t color, uint8_t mode); + void lineV(uint8_t x, uint8_t y, uint8_t height, uint8_t color, uint8_t mode); + void rect(uint8_t x, uint8_t y, uint8_t width, uint8_t height, uint8_t color , uint8_t mode); + void rectFill(uint8_t x, uint8_t y, uint8_t width, uint8_t height, uint8_t color , uint8_t mode); + void circle(uint8_t x, uint8_t y, uint8_t radius, uint8_t color, uint8_t mode); void drawBitmap(void);