diff --git a/apps/plugin.c b/apps/plugin.c index e298b55b23..6df7621203 100644 --- a/apps/plugin.c +++ b/apps/plugin.c @@ -412,11 +412,11 @@ int plugin_load(const char* plugin, void* parameter) button_clear_queue(); #ifdef HAVE_LCD_BITMAP #if LCD_DEPTH > 1 - lcd_set_drawinfo(DRMODE_SOLID, 0, LCD_MAX_LEVEL); -#else + lcd_set_drawinfo(DRMODE_SOLID, LCD_BLACK, LCD_WHITE); +#else /* LCD_DEPTH == 1 */ lcd_set_drawmode(DRMODE_SOLID); -#endif -#endif +#endif /* LCD_DEPTH */ +#endif /* HAVE_LCD_BITMAP */ plugin_loaded = false; diff --git a/apps/plugin.h b/apps/plugin.h index b081887328..801c49e0f1 100644 --- a/apps/plugin.h +++ b/apps/plugin.h @@ -403,10 +403,17 @@ struct plugin_api { int *rundb_initialized; int (*strncmp)(const char *, const char *, size_t); #if LCD_DEPTH > 1 +#ifdef HAVE_LCD_COLOR + void (*lcd_set_foreground)(struct rgb color); + struct rgb (*lcd_get_foreground)(void); + void (*lcd_set_background)(struct rgb color); + struct rgb (*lcd_get_background)(void); +#else void (*lcd_set_foreground)(int brightness); int (*lcd_get_foreground)(void); void (*lcd_set_background)(int brightness); int (*lcd_get_background)(void); +#endif void (*lcd_bitmap_part)(const unsigned char *src, int src_x, int src_y, int stride, int x, int y, int width, int height); void (*lcd_bitmap)(const unsigned char *src, int x, int y, int width, diff --git a/apps/plugins/bounce.c b/apps/plugins/bounce.c index c3bea8e14f..3ff3a8d5f6 100644 --- a/apps/plugins/bounce.c +++ b/apps/plugins/bounce.c @@ -282,11 +282,18 @@ static void addclock(void) #define DRAW_WIDTH (LCD_WIDTH + LETTER_WIDTH*2) #if LCD_DEPTH > 1 -static const int face_colors[] = +#ifdef HAVE_LCD_COLOR +static const struct rgb face_colors[] = +{ + LCD_BLACK, {0, 0, LCD_MAX_BLUE}, {LCD_MAX_RED, 0, 0} +}; +#else +static const int face_colors[] = { 0, 2*LCD_MAX_LEVEL/3, LCD_MAX_LEVEL/3 }; #endif +#endif static int scrollit(void) { @@ -474,7 +481,7 @@ enum plugin_status plugin_start(struct plugin_api* api, void* parameter) if (h > 0) h = scrollit(); #if LCD_DEPTH > 1 - rb->lcd_set_foreground(0); + rb->lcd_set_foreground(LCD_BLACK); #endif } while(h > 0); diff --git a/apps/plugins/cube.c b/apps/plugins/cube.c index afb2b88628..e69ef46c80 100644 --- a/apps/plugins/cube.c +++ b/apps/plugins/cube.c @@ -152,11 +152,19 @@ static const struct face faces[6] = }; #if LCD_DEPTH > 1 -static const int face_colors[6] = +#ifdef HAVE_LCD_COLOR +static const struct rgb face_colors[6] = +{ + {LCD_MAX_RED, 0, 0}, {LCD_MAX_RED, 0, 0}, {0, LCD_MAX_GREEN, 0}, + {0, LCD_MAX_GREEN, 0}, {0, 0, LCD_MAX_BLUE}, {0, 0, LCD_MAX_BLUE} +}; +#else +static const int face_colors[6] = { 2*LCD_MAX_LEVEL/3, 2*LCD_MAX_LEVEL/3, LCD_MAX_LEVEL/3, LCD_MAX_LEVEL/3, 0, 0 }; #endif +#endif enum { #if LCD_DEPTH > 1 @@ -352,7 +360,7 @@ static void cube_draw(void) point2D[faces[i].corner[3]].y); } - rb->lcd_set_foreground(0); + rb->lcd_set_foreground(LCD_BLACK); break; #endif /* LCD_DEPTH > 1 */ diff --git a/apps/screens.c b/apps/screens.c index a51d83fed3..19afe44baa 100644 --- a/apps/screens.c +++ b/apps/screens.c @@ -855,7 +855,11 @@ void splash(int ticks, /* how long the splash is displayed */ int xx = (LCD_WIDTH-maxw)/2 - 2; /* The new graphics routines handle clipping, so no need to check */ #if LCD_DEPTH > 1 +#ifdef HAVE_LCD_COLOR + lcd_set_background((struct rgb){LCD_MAX_RED-1, LCD_MAX_GREEN-1, LCD_MAX_BLUE-1}); +#else lcd_set_background(LCD_MAX_LEVEL-1); +#endif #endif lcd_set_drawmode(DRMODE_SOLID|DRMODE_INVERSEVID); lcd_fillrect(xx, y-2, maxw+4, LCD_HEIGHT-y*2+4); @@ -903,7 +907,7 @@ void splash(int ticks, /* how long the splash is displayed */ next = strtok_r(NULL, " ", &store); } #if defined(HAVE_LCD_BITMAP) && (LCD_DEPTH > 1) - lcd_set_background(LCD_MAX_LEVEL); + lcd_set_background(LCD_WHITE); #endif lcd_update(); diff --git a/firmware/export/lcd.h b/firmware/export/lcd.h index 30677e492e..cfc73b4a09 100644 --- a/firmware/export/lcd.h +++ b/firmware/export/lcd.h @@ -135,9 +135,12 @@ struct rgb { unsigned char green; unsigned char blue; }; +#define LCD_BLACK ((struct rgb){0, 0, 0}) +#define LCD_WHITE ((struct rgb){LCD_MAX_RED, LCD_MAX_GREEN, LCD_MAX_BLUE}) #else /* monochrome */ #define LCD_MAX_LEVEL ((1 << LCD_DEPTH) - 1) - +#define LCD_BLACK 0 +#define LCD_WHITE LCD_MAX_LEVEL #endif /* Memory copy of display bitmap */