public inbox for u-boot@lists.denx.de
 help / color / mirror / Atom feed
From: Matthias Fuchs <matthias.fuchs@esd-electronics.com>
To: u-boot@lists.denx.de
Subject: [U-Boot-Users] [PATCH] add splashimage positioning support
Date: Wed, 4 Jul 2007 12:12:41 +0200	[thread overview]
Message-ID: <200707041212.41585.matthias.fuchs@esd-electronics.com> (raw)

This patch adds positioning support the video console's splashimage.
The new feature must be enabled via CONFIG_SPLASH_SCREEN_ALIGN

Please see README for more details.

Signed-off-by: Matthias Fuchs <matthias.fuchs@esd-electronics.com>

---
commit a2d4f0317552af68f86e8981aaef6c324bfbc157
tree 7229d0a193964b252f60ad1eff4c7af4ab71d94a
parent 98c440bee623ecdd5322852732b883e696fb2140
author Matthias Fuchs <matthias.fuchs@esd-electronics.com> Wed, 04 Jul 2007 12:09:27 +0200
committer Matthias Fuchs <matthias.fuchs@esd-electronics.com> Wed, 04 Jul 2007 12:09:27 +0200

 README                |   15 ++++++++
 drivers/cfb_console.c |   92 ++++++++++++++++++++++++++++++++++++++++++++-----
 2 files changed, 98 insertions(+), 9 deletions(-)

diff --git a/README b/README
index bb5b46e..205b370 100644
--- a/README
+++ b/README
@@ -1047,6 +1047,21 @@ The following options need to be configu
 		allows for a "silent" boot where a splash screen is
 		loaded very quickly after power-on.
 
+		When CONFIG_SPLASH_SCREEN_ALIGN is additionally defined,
+		it is possible to align a small splashimage on a huge
+		display. This option extends the splashimage variable 
+		syntax with an x and y position suffix. Beside absolute 
+		positioning the characters 'l' (left), 'r' (right), 
+		't' (top), 'b' (bottom) and 'c' (center) are supported:
+
+			splashimage=<address>[,<xpos>[,<pos>]]
+
+		Example:
+			splashimage=fff00000,c,c
+
+		This aligns our bitmap at address 0xfff00000 
+		vertically and horizontally.
+
 - Gzip compressed BMP image support: CONFIG_VIDEO_BMP_GZIP
 
 		If this option is set, additionally to standard BMP
diff --git a/drivers/cfb_console.c b/drivers/cfb_console.c
index 9727aeb..9753b07 100644
--- a/drivers/cfb_console.c
+++ b/drivers/cfb_console.c
@@ -183,6 +183,15 @@ CONFIG_VIDEO_HW_CURSOR:	     - Uses the
 #if (CONFIG_COMMANDS & CFG_CMD_BMP) || defined(CONFIG_SPLASH_SCREEN)
 #include <watchdog.h>
 #include <bmp_layout.h>
+
+#ifdef CONFIG_SPLASH_SCREEN_ALIGN
+#define BMP_ALIGN_CENTER        -1
+#define BMP_ALIGN_RIGHT         -2
+#define BMP_ALIGN_BOTTOM        -3
+#define BMP_ALIGN_LEFT          0
+#define BMP_ALIGN_TOP           0
+#endif
+
 #endif /* (CONFIG_COMMANDS & CFG_CMD_BMP) || CONFIG_SPLASH_SCREEN */
 
 /*****************************************************************************/
@@ -755,6 +764,8 @@ void video_puts (const char *s)
 int video_display_bitmap (ulong bmp_image, int x, int y)
 {
 	ushort xcount, ycount;
+	int xc = x;
+	int yc = y;
 	uchar *fb;
 	bmp_image_t *bmp = (bmp_image_t *) bmp_image;
 	uchar *bmap;
@@ -825,15 +836,35 @@ int video_display_bitmap (ulong bmp_imag
 
 	padded_line = (((width * bpp + 7) / 8) + 3) & ~0x3;
 
-	if ((x + width) > VIDEO_VISIBLE_COLS)
-		width = VIDEO_VISIBLE_COLS - x;
-	if ((y + height) > VIDEO_VISIBLE_ROWS)
-		height = VIDEO_VISIBLE_ROWS - y;
+#ifdef CONFIG_SPLASH_SCREEN_ALIGN
+	switch(xc) {
+	case BMP_ALIGN_CENTER:
+		xc = (VIDEO_VISIBLE_COLS - width) >> 1;
+		break;
+	case BMP_ALIGN_RIGHT:
+		xc = VIDEO_VISIBLE_COLS - width;
+		break;
+	}
+
+	switch(yc) {
+	case BMP_ALIGN_CENTER:
+		yc = (VIDEO_VISIBLE_ROWS - height) >> 1;
+		break;
+	case BMP_ALIGN_BOTTOM:
+		yc = VIDEO_VISIBLE_ROWS - height;
+		break;
+	}
+#endif
+
+	if ((xc + width) > VIDEO_VISIBLE_COLS)
+		width = VIDEO_VISIBLE_COLS - xc;
+	if ((yc + height) > VIDEO_VISIBLE_ROWS)
+		height = VIDEO_VISIBLE_ROWS - yc;
 
 	bmap = (uchar *) bmp + le32_to_cpu (bmp->header.data_offset);
 	fb = (uchar *) (video_fb_address +
-			((y + height - 1) * VIDEO_COLS * VIDEO_PIXEL_SIZE) +
-			x * VIDEO_PIXEL_SIZE);
+			((yc + height - 1) * VIDEO_COLS * VIDEO_PIXEL_SIZE) +
+			xc * VIDEO_PIXEL_SIZE);
 
 	/* We handle only 8bpp or 24 bpp bitmap */
 	switch (le16_to_cpu (bmp->header.bit_count)) {
@@ -1106,11 +1137,54 @@ static void *video_logo (void)
 #ifdef CONFIG_SPLASH_SCREEN
 	char *s;
 	ulong addr;
-
+	char *c;
+	int x = 0;
+	int y = 0;
 	if ((s = getenv ("splashimage")) != NULL) {
-		addr = simple_strtoul (s, NULL, 16);
+		addr = simple_strtoul (s, &c, 16);
+
+#ifdef CONFIG_SPLASH_SCREEN_ALIGN
+		if ((c != NULL) && (*c == ',')) {
+			c++;
+			switch(*c) {
+			case 'c':
+				x = BMP_ALIGN_CENTER;
+				c++;
+				break;
+			case 'r':
+				x = BMP_ALIGN_RIGHT;
+				c++;
+				break;
+			case 'l':
+				x = BMP_ALIGN_LEFT;
+				c++;
+				break;
+			default:
+				x = (int)simple_strtoul(c, &c, 10);
+			}
+			if ((c != NULL) && (*c == ',')) {
+				c++;
+				switch(*c) {
+				case 'c':
+					y = BMP_ALIGN_CENTER;
+					c++;
+					break;
+				case 'b':
+					y = BMP_ALIGN_BOTTOM;
+					c++;
+					break;
+				case 't':
+					y = BMP_ALIGN_TOP;
+					c++;
+					break;
+				default:
+					y = (int)simple_strtoul(c, NULL, 10);
+				}
+			}
+		}
+#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));
 		}
 	}

                 reply	other threads:[~2007-07-04 10:12 UTC|newest]

Thread overview: [no followups] expand[flat|nested]  mbox.gz  Atom feed

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=200707041212.41585.matthias.fuchs@esd-electronics.com \
    --to=matthias.fuchs@esd-electronics.com \
    --cc=u-boot@lists.denx.de \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox