diff options
author | Jens Arnold <amiconn@rockbox.org> | 2005-11-16 21:09:23 +0000 |
---|---|---|
committer | Jens Arnold <amiconn@rockbox.org> | 2005-11-16 21:09:23 +0000 |
commit | 5b2cba17aa95ececfdb6a498540de4dfa215e920 (patch) | |
tree | 3574eab7dc84f588268b72f6db56744fcc4d0e64 /firmware/export | |
parent | 15046f99b3840c07bdd9d52e7014c6e775267c55 (diff) | |
download | rockbox-5b2cba17aa95ececfdb6a498540de4dfa215e920.tar.gz rockbox-5b2cba17aa95ececfdb6a498540de4dfa215e920.zip |
Changed the LCD_COLOR pixel value format to packed RGB (unsigned int). Now all LCDs with depth > 1 use the same datatype. Added macros for easy pixel value definition.
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@7912 a1c6a512-1295-4272-9138-f99709370657
Diffstat (limited to 'firmware/export')
-rw-r--r-- | firmware/export/lcd.h | 71 |
1 files changed, 37 insertions, 34 deletions
diff --git a/firmware/export/lcd.h b/firmware/export/lcd.h index 2d04cec054..48244fe2a8 100644 --- a/firmware/export/lcd.h +++ b/firmware/export/lcd.h | |||
@@ -140,29 +140,39 @@ typedef void lcd_blockfunc_type(unsigned char *address, unsigned mask, unsigned | |||
140 | 140 | ||
141 | #ifdef HAVE_LCD_COLOR | 141 | #ifdef HAVE_LCD_COLOR |
142 | #if LCD_DEPTH == 16 | 142 | #if LCD_DEPTH == 16 |
143 | #define LCD_MAX_RED ((1 << 5) - 1) | 143 | #define LCD_MAX_RED 31 |
144 | #define LCD_MAX_GREEN ((1 << 6) - 1) | 144 | #define LCD_MAX_GREEN 63 |
145 | #define LCD_MAX_BLUE ((1 << 5) - 1) | 145 | #define LCD_MAX_BLUE 31 |
146 | #define _RGBPACK(r, g, b) ( ((((r) * 31 + 127) / 255) << 11) \ | ||
147 | |((((g) * 63 + 127) / 255) << 5) \ | ||
148 | | (((b) * 31 + 127) / 255)) | ||
149 | #if (CONFIG_LCD == LCD_IPODCOLOR) || (CONFIG_LCD == LCD_IPODNANO) | ||
150 | #define LCD_RGBPACK(r, g, b) ( ((_RGBPACK((r), (g), (b)) & 0xff00) >> 8) \ | ||
151 | |((_RGBPACK((r), (g), (b)) & 0x00ff) << 8)) | ||
146 | #else | 152 | #else |
147 | #define LCD_MAX_RED ((1 << (LCD_DEPTH/3)) - 1) | 153 | #define LCD_RGBPACK(r, g, b) _RGBPACK((r), (g), (b)) |
148 | #define LCD_MAX_GREEN ((1 << (LCD_DEPTH/3)) - 1) | ||
149 | #define LCD_MAX_BLUE ((1 << (LCD_DEPTH/3)) - 1) | ||
150 | #endif | 154 | #endif |
151 | struct rgb { | 155 | #else |
152 | unsigned char red; | 156 | /* other colour depths */ |
153 | unsigned char green; | 157 | #endif |
154 | unsigned char blue; | 158 | |
155 | }; | 159 | #define LCD_BLACK LCD_RGBPACK(0, 0, 0) |
156 | #define LCD_BLACK ((struct rgb){0, 0, 0}) | 160 | #define LCD_DARKGRAY LCD_RGBPACK(85, 85, 85) |
157 | #define LCD_DARKGRAY ((struct rgb){LCD_MAX_RED/3, LCD_MAX_GREEN/3, LCD_MAX_BLUE/3}) | 161 | #define LCD_LIGHTGRAY LCD_RGBPACK(170, 170, 170) |
158 | #define LCD_LIGHTGRAY ((struct rgb){2*LCD_MAX_RED/3, 2*LCD_MAX_GREEN/3, 2*LCD_MAX_BLUE/3}) | 162 | #define LCD_WHITE LCD_RGBPACK(255, 255, 255) |
159 | #define LCD_WHITE ((struct rgb){LCD_MAX_RED, LCD_MAX_GREEN, LCD_MAX_BLUE}) | 163 | #define LCD_DEFAULT_FG LCD_BLACK |
160 | #else /* monochrome */ | 164 | #define LCD_DEFAULT_BG LCD_RGBPACK(182, 198, 229) /* rockbox blue */ |
165 | |||
166 | #elif LCD_DEPTH > 1 /* greyscale */ | ||
161 | #define LCD_MAX_LEVEL ((1 << LCD_DEPTH) - 1) | 167 | #define LCD_MAX_LEVEL ((1 << LCD_DEPTH) - 1) |
162 | #define LCD_BLACK 0 | 168 | #define LCD_BRIGHTNESS(y) (((y) * LCD_MAX_LEVEL + 127) / 255) |
163 | #define LCD_DARKGRAY (LCD_MAX_LEVEL/3) | 169 | |
164 | #define LCD_LIGHTGRAY (2*LCD_MAX_LEVEL/3) | 170 | #define LCD_BLACK LCD_BRIGHTNESS(0) |
165 | #define LCD_WHITE LCD_MAX_LEVEL | 171 | #define LCD_DARKGRAY LCD_BRIGHTNESS(85) |
172 | #define LCD_LIGHTGRAY LCD_BRIGHTNESS(170) | ||
173 | #define LCD_WHITE LCD_BRIGHTNESS(255) | ||
174 | #define LCD_DEFAULT_FG LCD_BLACK | ||
175 | #define LCD_DEFAULT_BG LCD_WHITE | ||
166 | #endif | 176 | #endif |
167 | 177 | ||
168 | /* Memory copy of display bitmap */ | 178 | /* Memory copy of display bitmap */ |
@@ -207,20 +217,13 @@ extern void lcd_bidir_scroll(int threshold); | |||
207 | extern void lcd_scroll_step(int pixels); | 217 | extern void lcd_scroll_step(int pixels); |
208 | 218 | ||
209 | #if LCD_DEPTH > 1 | 219 | #if LCD_DEPTH > 1 |
210 | #ifdef HAVE_LCD_COLOR | 220 | extern void lcd_set_foreground(unsigned foreground); |
211 | extern void lcd_set_foreground(struct rgb color); | 221 | extern unsigned lcd_get_foreground(void); |
212 | extern struct rgb lcd_get_foreground(void); | 222 | extern void lcd_set_background(unsigned background); |
213 | extern void lcd_set_background(struct rgb color); | 223 | extern unsigned lcd_get_background(void); |
214 | extern struct rgb lcd_get_background(void); | 224 | extern void lcd_set_drawinfo(int mode, unsigned foreground, |
215 | extern void lcd_set_drawinfo(int mode, struct rgb fg_color, | 225 | unsigned background); |
216 | struct rgb bg_color); | 226 | |
217 | #else /* monochrome */ | ||
218 | extern void lcd_set_foreground(int brightness); | ||
219 | extern int lcd_get_foreground(void); | ||
220 | extern void lcd_set_background(int brightness); | ||
221 | extern int lcd_get_background(void); | ||
222 | extern void lcd_set_drawinfo(int mode, int fg_brightness, int bg_brightness); | ||
223 | #endif | ||
224 | extern void lcd_mono_bitmap_part(const unsigned char *src, int src_x, int src_y, | 227 | extern void lcd_mono_bitmap_part(const unsigned char *src, int src_x, int src_y, |
225 | int stride, int x, int y, int width, int height); | 228 | int stride, int x, int y, int width, int height); |
226 | extern void lcd_mono_bitmap(const unsigned char *src, int x, int y, int width, | 229 | extern void lcd_mono_bitmap(const unsigned char *src, int x, int y, int width, |