diff options
Diffstat (limited to 'common/lcd.c')
| -rw-r--r-- | common/lcd.c | 39 | 
1 files changed, 37 insertions, 2 deletions
| diff --git a/common/lcd.c b/common/lcd.c index 74a5c7769..b9a698d5c 100644 --- a/common/lcd.c +++ b/common/lcd.c @@ -620,6 +620,11 @@ void bitmap_plot (int x, int y)   * Display the BMP file located at address bmp_image.   * Only uncompressed.   */ + +#ifdef CONFIG_SPLASH_SCREEN_ALIGN +#define BMP_ALIGN_CENTER	0x7FFF +#endif +  int lcd_display_bitmap(ulong bmp_image, int x, int y)  {  #if !defined(CONFIG_MCC200) @@ -731,6 +736,19 @@ int lcd_display_bitmap(ulong bmp_image, int x, int y)  #endif  	padded_line = (width&0x3) ? ((width&~0x3)+4) : (width); + +#ifdef CONFIG_SPLASH_SCREEN_ALIGN +	if (x == BMP_ALIGN_CENTER) +		x = max(0, (pwidth - width) / 2); +	else if (x < 0) +		x = max(0, pwidth - width + x + 1); + +	if (y == BMP_ALIGN_CENTER) +		y = max(0, (panel_info.vl_row - height) / 2); +	else if (y < 0) +		y = max(0, panel_info.vl_row - height + y + 1); +#endif /* CONFIG_SPLASH_SCREEN_ALIGN */ +  	if ((x + width)>pwidth)  		width = pwidth - x;  	if ((y + height)>panel_info.vl_row) @@ -809,9 +827,26 @@ static void *lcd_logo (void)  	static int do_splash = 1;  	if (do_splash && (s = getenv("splashimage")) != NULL) { -		addr = simple_strtoul(s, NULL, 16); +		int x = 0, y = 0;  		do_splash = 0; +		addr = simple_strtoul (s, NULL, 16); +#ifdef CONFIG_SPLASH_SCREEN_ALIGN +		if ((s = getenv ("splashpos")) != NULL) { +			if (s[0] == 'm') +				x = BMP_ALIGN_CENTER; +			else +				x = simple_strtol (s, NULL, 0); + +			if ((s = strchr (s + 1, ',')) != NULL) { +				if (s[1] == 'm') +					y = BMP_ALIGN_CENTER; +				else +					y = simple_strtol (s + 1, NULL, 0); +			} +		} +#endif /* CONFIG_SPLASH_SCREEN_ALIGN */ +  #ifdef CONFIG_VIDEO_BMP_GZIP  		bmp_image_t *bmp = (bmp_image_t *)addr;  		unsigned long len; @@ -822,7 +857,7 @@ static void *lcd_logo (void)  		}  #endif -		if (lcd_display_bitmap (addr, 0, 0) == 0) { +		if (lcd_display_bitmap (addr, x, y) == 0) {  			return ((void *)lcd_base);  		}  	} |