summaryrefslogtreecommitdiff
path: root/common
diff options
context:
space:
mode:
authorMatthias Weisser <matthias.weisser@graf-syteco.de>2009-07-09 16:07:30 +0200
committerAnatolij Gustschin <agust@denx.de>2009-07-17 15:23:41 +0200
commit1ca298ced07327749b54321815f76fcddb2f9479 (patch)
tree2c4f09b253438944bc5d431788654cf1f4042673 /common
parent9d173e0233493113c9b1aa81bd2208d0057ab9db (diff)
Added support for splash screen positioning
This patch adds support splash image positioning by adding an additional variable "splashpos" to the environment. Please see README for details. Signed-off-by: Matthias Weisser <matthias.weisser@graf-syteco.de> Acked-by: Matthias Fuchs <matthias.fuchs@esd.eu> Signed-off-by: Anatolij Gustschin <agust@denx.de>
Diffstat (limited to 'common')
-rw-r--r--common/lcd.c39
1 files changed, 37 insertions, 2 deletions
diff --git a/common/lcd.c b/common/lcd.c
index 74a5c77693f..b9a698d5c40 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);
}
}