1
0
Fork 0
forked from len0rd/rockbox

Simulate backlight for colour targets. Implements the idea from FS #9884, but uses SDL alpha blending. Display is dimmed to 1/3 for targets with transflective LCD, and set to black for others.

git-svn-id: svn://svn.rockbox.org/rockbox/trunk@19961 a1c6a512-1295-4272-9138-f99709370657
This commit is contained in:
Jens Arnold 2009-02-10 01:23:18 +00:00
parent abc3edcb95
commit 0358d9b382
5 changed files with 31 additions and 5 deletions

View file

@ -49,6 +49,9 @@
#define LCD_DEPTH 16 /* 65536 colours */
#define LCD_PIXELFORMAT RGB565SWAPPED /* rgb565 byte-swapped */
/* LCD stays visible without backlight - simulator hint */
#define HAVE_TRANSFLECTIVE_LCD
#define CONFIG_KEYPAD IPOD_4G_PAD
/* Define this if you do software codec */

View file

@ -49,6 +49,9 @@
#define LCD_DEPTH 16 /* 65536 colours */
#define LCD_PIXELFORMAT RGB565SWAPPED /* rgb565 byte-swapped */
/* LCD stays visible without backlight - simulator hint */
#define HAVE_TRANSFLECTIVE_LCD
#define CONFIG_KEYPAD IPOD_4G_PAD
/* Define this if you do software codec */

View file

@ -49,6 +49,9 @@
#define LCD_DEPTH 16 /* 65536 colours */
#define LCD_PIXELFORMAT RGB565 /* rgb565 */
/* LCD stays visible without backlight - simulator hint */
#define HAVE_TRANSFLECTIVE_LCD
#define CONFIG_KEYPAD IPOD_4G_PAD
/* Define this if you do software codec */

View file

@ -63,7 +63,16 @@ SDL_Color lcd_color2_bright = {RED_CMP(LCD_BRIGHTCOLOR_2),
#else
#define NUM_SHADES 129
#endif
#endif /* LCD_DEPTH <= 8 */
#else /* LCD_DEPTH > 8 */
#ifdef HAVE_TRANSFLECTIVE_LCD
#define BACKLIGHT_OFF_ALPHA 85 /* 1/3 brightness */
#else
#define BACKLIGHT_OFF_ALPHA 0 /* pitch black */
#endif
#endif /* LCD_DEPTH */
#if LCD_DEPTH < 8
unsigned long (*lcd_ex_getpixel)(int, int) = NULL;
@ -135,12 +144,17 @@ void sim_backlight(int value)
&lcd_color2_bright, NUM_SHADES, NUM_SHADES);
#endif
}
#else /* LCD_DEPTH > 8 */
if (value > 0) {
SDL_SetAlpha(lcd_surface, 0, SDL_ALPHA_OPAQUE); /* full on */
} else {
SDL_SetAlpha(lcd_surface, SDL_SRCALPHA, BACKLIGHT_OFF_ALPHA);
}
#endif /* LCD_DEPTH */
sdl_gui_update(lcd_surface, 0, 0, SIM_LCD_WIDTH, SIM_LCD_HEIGHT,
SIM_LCD_WIDTH, SIM_LCD_HEIGHT,
background ? UI_LCD_POSX : 0, background? UI_LCD_POSY : 0);
#else /* LCD_DEPTH > 8 */
(void)value; /* not yet simulated */
#endif /* LCD_DEPTH */
}
#endif /* HAVE_BACKLIGHT */
@ -153,7 +167,7 @@ void sim_lcd_init(void)
SIM_LCD_HEIGHT * display_zoom,
LCD_DEPTH, 0, 0, 0, 0);
#else
lcd_surface = SDL_CreateRGBSurface(SDL_SWSURFACE,
lcd_surface = SDL_CreateRGBSurface(SDL_SWSURFACE,
SIM_LCD_WIDTH * display_zoom,
SIM_LCD_HEIGHT * display_zoom,
8, 0, 0, 0, 0);

View file

@ -90,6 +90,9 @@ void sdl_gui_update(SDL_Surface *surface, int x_start, int y_start, int width,
SDL_Rect dest= {(ui_x + x_start) * display_zoom, (ui_y + y_start) * display_zoom,
xmax * display_zoom, ymax * display_zoom};
if (surface->flags & SDL_SRCALPHA) /* alpha needs a black background */
SDL_FillRect(gui_surface, &dest, 0);
SDL_BlitSurface(surface, &src, gui_surface, &dest);
SDL_Flip(gui_surface);