public inbox for u-boot@lists.denx.de
 help / color / mirror / Atom feed
* [U-Boot] [PATCH RESEND] Added support for splash screen positioning
@ 2009-07-09 14:07 Matthias Weisser
  2009-07-13  9:07 ` Matthias Fuchs
  2009-07-16 11:20 ` Anatolij Gustschin
  0 siblings, 2 replies; 9+ messages in thread
From: Matthias Weisser @ 2009-07-09 14:07 UTC (permalink / raw)
  To: u-boot

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>
---
 README                      |   19 +++++++++++++++++++
 common/lcd.c                |   39 +++++++++++++++++++++++++++++++++++++--
 drivers/video/cfb_console.c |   36 +++++++++++++++++++++++++++++++++++-
 3 files changed, 91 insertions(+), 3 deletions(-)

diff --git a/README b/README
index 561c100..bbc9e06
--- a/README
+++ b/README
@@ -1074,6 +1074,25 @@ The following options need to be configured:
 		allows for a "silent" boot where a splash screen is
 		loaded very quickly after power-on.
 
+		CONFIG_SPLASH_SCREEN_ALIGN
+
+		If this option is set the splash image can be freely positioned
+		on the screen. Environment variable "splashpos=x,y" specifies
+		the position. If a positive number is given it is used as
+		number of pixel from left/top. If a negativ number is given it
+		is used as number of pixel from right/bottom. You can also
+		specify 'm' for centering the image.
+
+		Example:
+		setenv splashpos=m,m
+			=> Image at center of screen
+
+		setenv splashpos=30,20
+			=> Image at x = 20 and y = 30
+
+		setenv splashpos=-10,m
+			=> Image at x = dspWidth - bmpWidth - 9 and y = center
+
 - Gzip compressed BMP image support: CONFIG_VIDEO_BMP_GZIP
 
 		If this option is set, additionally to standard BMP
diff --git a/common/lcd.c b/common/lcd.c
index 74a5c77..b9a698d
--- 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);
 		}
 	}
diff --git a/drivers/video/cfb_console.c b/drivers/video/cfb_console.c
index bcafb27..6adce19
--- a/drivers/video/cfb_console.c
+++ b/drivers/video/cfb_console.c
@@ -193,6 +193,11 @@ CONFIG_VIDEO_HW_CURSOR:	     - Uses the hardware cursor capability of the
 #if defined(CONFIG_CMD_BMP) || defined(CONFIG_SPLASH_SCREEN)
 #include <watchdog.h>
 #include <bmp_layout.h>
+
+#ifdef CONFIG_SPLASH_SCREEN_ALIGN
+#define BMP_ALIGN_CENTER	0x7FFF
+#endif
+
 #endif
 
 /*****************************************************************************/
@@ -877,6 +882,18 @@ int video_display_bitmap (ulong bmp_image, int x, int y)
 
 	padded_line = (((width * bpp + 7) / 8) + 3) & ~0x3;
 
+#ifdef CONFIG_SPLASH_SCREEN_ALIGN
+	if (x == BMP_ALIGN_CENTER)
+		x = max(0, (VIDEO_VISIBLE_COLS - width) / 2);
+	else if (x < 0)
+		x = max(0, VIDEO_VISIBLE_COLS - width + x + 1);
+
+	if (y == BMP_ALIGN_CENTER)
+		y = max(0, (VIDEO_VISIBLE_ROWS - height) / 2);
+	else if (y < 0)
+		y = max(0, VIDEO_VISIBLE_ROWS - height + y + 1);
+#endif /* CONFIG_SPLASH_SCREEN_ALIGN */
+
 	if ((x + width) > VIDEO_VISIBLE_COLS)
 		width = VIDEO_VISIBLE_COLS - x;
 	if ((y + height) > VIDEO_VISIBLE_ROWS)
@@ -1188,9 +1205,26 @@ static void *video_logo (void)
 	ulong addr;
 
 	if ((s = getenv ("splashimage")) != NULL) {
+		int x = 0, y = 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 */
 
-		if (video_display_bitmap (addr, 0, 0) == 0) {
+		if (video_display_bitmap (addr, x, y) == 0) {
 			return ((void *) (video_fb_address));
 		}
 	}
-- 
1.5.6.3

^ permalink raw reply related	[flat|nested] 9+ messages in thread
* [U-Boot] [PATCH RESEND] Added support for splash screen positioning
@ 2009-07-01 15:01 Matthias Weisser
  2009-07-04 23:49 ` Wolfgang Denk
  2009-07-06  9:23 ` Matthias Fuchs
  0 siblings, 2 replies; 9+ messages in thread
From: Matthias Weisser @ 2009-07-01 15:01 UTC (permalink / raw)
  To: u-boot

This patch adds support splash image positioning by
optinally adding x and y coordinates to the splashimage
environment variable.

Signed-off-by: Matthias Weisser <matthias.weisser@graf-syteco.de>
---
 README                      |    8 ++++++--
 common/lcd.c                |   11 +++++++++--
 drivers/video/cfb_console.c |    9 ++++++++-
 3 files changed, 23 insertions(+), 5 deletions(-)
 mode change 100644 => 100755 README
 mode change 100644 => 100755 common/lcd.c
 mode change 100644 => 100755 drivers/video/cfb_console.c

diff --git a/README b/README
old mode 100644
new mode 100755
index 561c100..dd47a83
--- a/README
+++ b/README
@@ -1069,8 +1069,12 @@ The following options need to be configured:
 		a variable "splashimage". If found, the usual display
 		of logo, copyright and system information on the LCD
 		is suppressed and the BMP image at the address
-		specified in "splashimage" is loaded instead. The
-		console is redirected to the "nulldev", too. This
+		specified in "splashimage" is loaded instead.
+		The logo can be positioned on any position by
+		(optionally) adding the x and y coordinates after the
+		address in the environment variable "splashimage"
+		sperated by a space. "splashimage=0x10060000 160 120"
+		The console is redirected to the "nulldev", too. This
 		allows for a "silent" boot where a splash screen is
 		loaded very quickly after power-on.
 
diff --git a/common/lcd.c b/common/lcd.c
old mode 100644
new mode 100755
index 74a5c77..160f08a
--- a/common/lcd.c
+++ b/common/lcd.c
@@ -809,9 +809,16 @@ 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);
+		if ((s = strchr (s, ' ')) != NULL) {
+				x = simple_strtoul (s + 1, NULL, 0);
+			if ((s = strchr (s + 1, ' ')) != NULL)
+				y = simple_strtoul (s + 1, NULL, 0);
+		}
+
 #ifdef CONFIG_VIDEO_BMP_GZIP
 		bmp_image_t *bmp = (bmp_image_t *)addr;
 		unsigned long len;
@@ -822,7 +829,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);
 		}
 	}
diff --git a/drivers/video/cfb_console.c b/drivers/video/cfb_console.c
old mode 100644
new mode 100755
index bcafb27..528349a
--- a/drivers/video/cfb_console.c
+++ b/drivers/video/cfb_console.c
@@ -1188,9 +1188,16 @@ static void *video_logo (void)
 	ulong addr;
 
 	if ((s = getenv ("splashimage")) != NULL) {
+		int x = 0, y = 0;
+
 		addr = simple_strtoul (s, NULL, 16);
+		if ((s = strchr (s, ' ')) != NULL) {
+			x = simple_strtoul (s + 1, NULL, 0);
+			if ((s = strchr (s + 1, ' ')) != NULL)
+				y = simple_strtoul (s + 1, NULL, 0);
+		}
 
-		if (video_display_bitmap (addr, 0, 0) == 0) {
+		if (video_display_bitmap (addr, x, y) == 0) {
 			return ((void *) (video_fb_address));
 		}
 	}
-- 
1.5.6.3

^ permalink raw reply related	[flat|nested] 9+ messages in thread

end of thread, other threads:[~2009-07-16 11:20 UTC | newest]

Thread overview: 9+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2009-07-09 14:07 [U-Boot] [PATCH RESEND] Added support for splash screen positioning Matthias Weisser
2009-07-13  9:07 ` Matthias Fuchs
2009-07-16 11:20 ` Anatolij Gustschin
  -- strict thread matches above, loose matches on Subject: below --
2009-07-01 15:01 Matthias Weisser
2009-07-04 23:49 ` Wolfgang Denk
2009-07-06  9:23 ` Matthias Fuchs
2009-07-06 11:10   ` Wolfgang Denk
2009-07-09  9:45   ` Matthias Weisser
2009-07-09 10:18     ` Matthias Fuchs

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox