@@ -62,6 +62,15 @@ uint8 lcd_setWindow(lcd_t* lcd, uint8 x1, uint8 y1, uint8 x2, uint8 y2); | |||||
*/ | */ | ||||
void lcd_pushPixel(lcd_t* lcd, uint8 r, uint8 g, uint8 b); | void lcd_pushPixel(lcd_t* lcd, uint8 r, uint8 g, uint8 b); | ||||
/* | |||||
* Push a 'transparent' pixel into the previously set drawing area. | |||||
* Requires buffering to be enabled. | |||||
* | |||||
* Parameters: | |||||
* lcd - display to use | |||||
*/ | |||||
void lcd_pushPixelSkip(lcd_t* lcd); | |||||
/* | /* | ||||
* Push an array of pixels into the previously set drawing area. | * Push an array of pixels into the previously set drawing area. | ||||
* Significantly faster than pushing pixels individually. | * Significantly faster than pushing pixels individually. | ||||
@@ -5,7 +5,7 @@ | |||||
#include "spilcd_font.h" | #include "spilcd_font.h" | ||||
#include "font8x8_basic.h" | #include "font8x8_basic.h" | ||||
static void lcd_pushChar(lcd_t* lcd, char c) | |||||
static void lcd_pushChar(lcd_t* lcd, char c, uint8 r, uint8 g, uint8 b) | |||||
{ | { | ||||
char* bitmap = font8x8_basic[(unsigned int) c]; | char* bitmap = font8x8_basic[(unsigned int) c]; | ||||
int x,y; | int x,y; | ||||
@@ -14,9 +14,10 @@ static void lcd_pushChar(lcd_t* lcd, char c) | |||||
for (y=0; y < 8; y++) { | for (y=0; y < 8; y++) { | ||||
set = bitmap[x] & 1 << y; | set = bitmap[x] & 1 << y; | ||||
if (set) { | if (set) { | ||||
lcd_pushPixel(lcd, 200, 0, 0); | |||||
lcd_pushPixel(lcd, r, g, b); | |||||
} else { | } else { | ||||
lcd_pushPixel(lcd, 0, 0, 0); | |||||
//lcd_pushPixel(lcd, 0, 0, 0); | |||||
lcd_pushPixelSkip(lcd); | |||||
} | } | ||||
} | } | ||||
} | } | ||||
@@ -25,7 +26,7 @@ static void lcd_pushChar(lcd_t* lcd, char c) | |||||
void lcd_drawChar(lcd_t* lcd, uint8 x, uint8 y, char c, uint8 r, uint8 g, uint8 b) | void lcd_drawChar(lcd_t* lcd, uint8 x, uint8 y, char c, uint8 r, uint8 g, uint8 b) | ||||
{ | { | ||||
lcd_setWindow(lcd, x, y, x+8 - 1, y+8 - 1); | lcd_setWindow(lcd, x, y, x+8 - 1, y+8 - 1); | ||||
lcd_pushChar(lcd, c); | |||||
lcd_pushChar(lcd, c, r, g, b); | |||||
} | } | ||||
void lcd_drawText(lcd_t* lcd, uint8 x, uint8 y, char* text, uint8 r, uint8 g, uint8 b) | void lcd_drawText(lcd_t* lcd, uint8 x, uint8 y, char* text, uint8 r, uint8 g, uint8 b) | ||||
@@ -36,6 +36,18 @@ static uint8 screen_window_y2; | |||||
static uint8 screen_cursor_x; | static uint8 screen_cursor_x; | ||||
static uint8 screen_cursor_y; | static uint8 screen_cursor_y; | ||||
void advance_screen_cursor() | |||||
{ | |||||
screen_cursor_x++; | |||||
if (screen_cursor_x > screen_window_x2) { | |||||
screen_cursor_x = screen_window_x1; | |||||
screen_cursor_y++; | |||||
if (screen_cursor_y > screen_window_y2) { | |||||
screen_cursor_y = screen_window_y1; | |||||
} | |||||
} | |||||
} | |||||
static lcd_t *activeDisplay; | static lcd_t *activeDisplay; | ||||
/* | /* | ||||
@@ -298,14 +310,12 @@ void lcd_pushPixel(lcd_t* lcd, uint8 r, uint8 g, uint8 b) | |||||
screen_buffer[i * 3 + 1] = g; | screen_buffer[i * 3 + 1] = g; | ||||
screen_buffer[i * 3 + 2] = b; | screen_buffer[i * 3 + 2] = b; | ||||
screen_cursor_x++; | |||||
if (screen_cursor_x > screen_window_x2) { | |||||
screen_cursor_x = screen_window_x1; | |||||
screen_cursor_y++; | |||||
if (screen_cursor_y > screen_window_y2) { | |||||
screen_cursor_y = screen_window_y1; | |||||
} | |||||
} | |||||
advance_screen_cursor(); | |||||
} | |||||
void lcd_pushPixelSkip(lcd_t* lcd) | |||||
{ | |||||
advance_screen_cursor(); | |||||
} | } | ||||
void lcd_pushPixels(lcd_t* lcd, uint8* pixels, size_t count) | void lcd_pushPixels(lcd_t* lcd, uint8* pixels, size_t count) | ||||