summaryrefslogtreecommitdiffstats
path: root/firmware/export
diff options
context:
space:
mode:
authorMichael Sevakis <jethead71@rockbox.org>2006-10-14 01:32:58 +0000
committerMichael Sevakis <jethead71@rockbox.org>2006-10-14 01:32:58 +0000
commit6aa12c11f741a4544d780d11fc583a25a5aef171 (patch)
tree0fe4b08bd13817657660c5339247e8ea203f2508 /firmware/export
parent1f3360f0216dbf54bcd50547a759fa6e514c6e76 (diff)
downloadrockbox-6aa12c11f741a4544d780d11fc583a25a5aef171.tar.gz
rockbox-6aa12c11f741a4544d780d11fc583a25a5aef171.tar.bz2
rockbox-6aa12c11f741a4544d780d11fc583a25a5aef171.zip
Added a small interface to screens to translate colors into remote gray levels on the x5. Splash screens paint properly with light gray. Should be adapted to a more general approach in the future. A few trailing whitespace trimmings got into a couple files but that is fine.
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@11218 a1c6a512-1295-4272-9138-f99709370657
Diffstat (limited to 'firmware/export')
-rw-r--r--firmware/export/lcd-remote.h16
-rw-r--r--firmware/export/lcd.h23
2 files changed, 28 insertions, 11 deletions
diff --git a/firmware/export/lcd-remote.h b/firmware/export/lcd-remote.h
index 5f1551e395..13d78ac428 100644
--- a/firmware/export/lcd-remote.h
+++ b/firmware/export/lcd-remote.h
@@ -60,9 +60,18 @@ typedef void lcd_remote_pixelfunc_type(int x, int y);
typedef void lcd_remote_blockfunc_type(fb_remote_data *address, unsigned mask,
unsigned bits);
-#if LCD_REMOTE_DEPTH > 1 /* greyscale */
+#if LCD_REMOTE_DEPTH > 1 /* greyscale - 8 bit max */
+#ifdef HAVE_LCD_COLOR
+extern unsigned lcd_remote_color_to_native(unsigned color);
+#endif
+
#define LCD_REMOTE_MAX_LEVEL ((1 << LCD_REMOTE_DEPTH) - 1)
-#define LCD_REMOTE_BRIGHTNESS(y) (((y) * LCD_REMOTE_MAX_LEVEL + 127) / 255)
+/**
+ * On 2 bit for example (y >> (8-DEPTH)) = (y >> 6) = y/64 gives:
+ * |000-063|064-127|128-191|192-255|
+ * | 0 | 1 | 2 | 3 |
+ */
+#define LCD_REMOTE_BRIGHTNESS(y) ((y) >> (8-LCD_REMOTE_DEPTH))
#define LCD_REMOTE_BLACK LCD_REMOTE_BRIGHTNESS(0)
#define LCD_REMOTE_DARKGRAY LCD_REMOTE_BRIGHTNESS(85)
@@ -70,7 +79,6 @@ typedef void lcd_remote_blockfunc_type(fb_remote_data *address, unsigned mask,
#define LCD_REMOTE_WHITE LCD_REMOTE_BRIGHTNESS(255)
#define LCD_REMOTE_DEFAULT_FG LCD_REMOTE_BLACK
#define LCD_REMOTE_DEFAULT_BG LCD_REMOTE_WHITE
-
#endif
/* Memory copy of display bitmap */
@@ -91,7 +99,7 @@ extern void lcd_remote_clear_display(void);
extern void lcd_remote_puts(int x, int y, const unsigned char *str);
extern void lcd_remote_puts_style(int x, int y, const unsigned char *str,
int style);
-extern void lcd_remote_puts_offset(int x, int y, const unsigned char *str,
+extern void lcd_remote_puts_offset(int x, int y, const unsigned char *str,
int offset);
extern void lcd_remote_puts_style_offset(int x, int y, const unsigned char *str,
int style, int offset);
diff --git a/firmware/export/lcd.h b/firmware/export/lcd.h
index 7fe76a5366..4949f51cdb 100644
--- a/firmware/export/lcd.h
+++ b/firmware/export/lcd.h
@@ -151,6 +151,15 @@ typedef void lcd_fastpixelfunc_type(fb_data *address);
#ifdef HAVE_LCD_BITMAP
+#if defined(HAVE_LCD_COLOR) && LCD_REMOTE_DEPTH > 1
+/* Just return color for screens use */
+static inline unsigned lcd_color_to_native(unsigned color)
+ { return color; }
+#define SCREEN_COLOR_TO_NATIVE(screen, color) (screen)->color_to_native(color)
+#else
+#define SCREEN_COLOR_TO_NATIVE(screen, color) (color)
+#endif
+
#ifdef HAVE_LCD_COLOR
#if LCD_DEPTH == 16
#define LCD_MAX_RED 31
@@ -169,12 +178,12 @@ typedef void lcd_fastpixelfunc_type(fb_data *address);
|((_RGBPACK((r), (g), (b)) & 0x00ff) << 8))
#define RGB_UNPACK_RED(x) _RGB_UNPACK_RED(swap16(x))
#define RGB_UNPACK_GREEN(x) _RGB_UNPACK_GREEN(swap16(x))
-#define RGB_UNPACK_BLUE(x) _RGB_UNPACK_BLUE(swap16(x))
+#define RGB_UNPACK_BLUE(x) _RGB_UNPACK_BLUE(swap16(x))
#else
#define LCD_RGBPACK(r, g, b) _RGBPACK((r), (g), (b))
#define RGB_UNPACK_RED(x) _RGB_UNPACK_RED(x)
#define RGB_UNPACK_GREEN(x) _RGB_UNPACK_GREEN(x)
-#define RGB_UNPACK_BLUE(x) _RGB_UNPACK_BLUE(x)
+#define RGB_UNPACK_BLUE(x) _RGB_UNPACK_BLUE(x)
#endif
#elif LCD_DEPTH == 18
#define LCD_MAX_RED 63
@@ -185,7 +194,7 @@ typedef void lcd_fastpixelfunc_type(fb_data *address);
| (((b) * (63*257) + (127*257)) >> 16))
#else
/* other colour depths */
-#endif
+#endif
#define LCD_BLACK LCD_RGBPACK(0, 0, 0)
#define LCD_DARKGRAY LCD_RGBPACK(85, 85, 85)
@@ -220,7 +229,7 @@ extern fb_data lcd_framebuffer[LCD_HEIGHT/4][LCD_WIDTH];
extern fb_data lcd_framebuffer[LCD_HEIGHT][LCD_WIDTH];
#elif LCD_DEPTH == 18
extern fb_data lcd_framebuffer[LCD_HEIGHT][LCD_WIDTH];
-#endif
+#endif
#ifndef LCD_FBWIDTH
#define LCD_FBWIDTH LCD_WIDTH
@@ -273,12 +282,12 @@ extern void lcd_setfont(int font);
extern int lcd_getstringsize(const unsigned char *str, int *w, int *h);
extern void lcd_puts_offset(int x, int y, const unsigned char *str, int offset);
-extern void lcd_puts_style_offset(int x, int y, const unsigned char *str,
+extern void lcd_puts_style_offset(int x, int y, const unsigned char *str,
int style, int offset);
extern void lcd_puts_scroll_offset(int x, int y, const unsigned char *string,
int offset);
extern void lcd_puts_scroll_style_offset(int x, int y, const unsigned char *string,
- int style, int offset);
+ int style, int offset);
/* low level drawing function pointer arrays */
extern lcd_pixelfunc_type* const lcd_pixelfuncs[8];
@@ -333,7 +342,7 @@ extern void lcd_bitmap_transparent(const fb_data *src, int x, int y,
#endif /* HAVE_LCD_BITMAP */
/* internal usage, but in multiple drivers */
-#ifdef HAVE_LCD_BITMAP
+#ifdef HAVE_LCD_BITMAP
#define SCROLL_SPACING 3
struct scrollinfo {