All of lore.kernel.org
 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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.