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:
parent
abc3edcb95
commit
0358d9b382
5 changed files with 31 additions and 5 deletions
|
|
@ -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 */
|
||||
|
|
|
|||
|
|
@ -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 */
|
||||
|
|
|
|||
|
|
@ -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 */
|
||||
|
|
|
|||
|
|
@ -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 */
|
||||
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue