* [U-Boot-Users] [PATCH] add splashimage positioning support
@ 2007-07-04 10:12 Matthias Fuchs
0 siblings, 0 replies; only message in thread
From: Matthias Fuchs @ 2007-07-04 10:12 UTC (permalink / raw)
To: u-boot
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));
}
}
^ permalink raw reply related [flat|nested] only message in thread
only message in thread, other threads:[~2007-07-04 10:12 UTC | newest]
Thread overview: (only message) (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2007-07-04 10:12 [U-Boot-Users] [PATCH] add splashimage positioning support Matthias Fuchs
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.