From 0358d9b382057ad45ba86882b55bc4cec630e726 Mon Sep 17 00:00:00 2001 From: Jens Arnold Date: Tue, 10 Feb 2009 01:23:18 +0000 Subject: 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 --- uisimulator/sdl/lcd-bitmap.c | 24 +++++++++++++++++++----- uisimulator/sdl/lcd-sdl.c | 3 +++ 2 files changed, 22 insertions(+), 5 deletions(-) (limited to 'uisimulator/sdl') diff --git a/uisimulator/sdl/lcd-bitmap.c b/uisimulator/sdl/lcd-bitmap.c index b4e6dcd4c0..8caac784ef 100644 --- a/uisimulator/sdl/lcd-bitmap.c +++ b/uisimulator/sdl/lcd-bitmap.c @@ -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); diff --git a/uisimulator/sdl/lcd-sdl.c b/uisimulator/sdl/lcd-sdl.c index 373e07ffc0..aa74c14cd9 100644 --- a/uisimulator/sdl/lcd-sdl.c +++ b/uisimulator/sdl/lcd-sdl.c @@ -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); -- cgit v1.2.3