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