summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAnatolij Gustschin <agust@denx.de>2009-04-23 12:35:22 +0200
committerAnatolij Gustschin <agust@denx.de>2009-04-28 10:55:13 +0200
commit3dcbe628d66b648e954bc8147d4faff2983206d9 (patch)
treeee25836a059239d4995ac6268066d27cdfe39dc2
parent28afe0160f87ff74574150d703055a965f91422a (diff)
downloadu-boot-imx-3dcbe628d66b648e954bc8147d4faff2983206d9.zip
u-boot-imx-3dcbe628d66b648e954bc8147d4faff2983206d9.tar.gz
u-boot-imx-3dcbe628d66b648e954bc8147d4faff2983206d9.tar.bz2
video: fix bug in cfb_console.c code
Fix bug in drawing long version/info strings: U-Boot version string like "U-Boot 2009.03-05647-g7c51e06 (Apr 23 2009 - 12:40:00) MPC83XX" is long and doesn't wrap around correctly while drawing beside the logo. Such long strings partially overwrite the logo. This patch is an attempt to fix it. Signed-off-by: Anatolij Gustschin <agust@denx.de>
-rw-r--r--drivers/video/cfb_console.c36
1 files changed, 33 insertions, 3 deletions
diff --git a/drivers/video/cfb_console.c b/drivers/video/cfb_console.c
index 779aa4b..5ee2314 100644
--- a/drivers/video/cfb_console.c
+++ b/drivers/video/cfb_console.c
@@ -1181,6 +1181,7 @@ static void *video_logo (void)
{
char info[128];
extern char version_string;
+ int space, len, y_off = 0;
#ifdef CONFIG_SPLASH_SCREEN
char *s;
@@ -1198,7 +1199,19 @@ static void *video_logo (void)
logo_plot (video_fb_address, VIDEO_COLS, 0, 0);
sprintf (info, " %s", &version_string);
- video_drawstring (VIDEO_INFO_X, VIDEO_INFO_Y, (uchar *)info);
+
+ space = (VIDEO_LINE_LEN / 2 - VIDEO_INFO_X) / VIDEO_FONT_WIDTH;
+ len = strlen(info);
+
+ if (len > space) {
+ video_drawchars (VIDEO_INFO_X, VIDEO_INFO_Y,
+ (uchar *)info, space);
+ video_drawchars (VIDEO_INFO_X + VIDEO_FONT_WIDTH,
+ VIDEO_INFO_Y + VIDEO_FONT_HEIGHT,
+ (uchar *)info + space, len - space);
+ y_off = 1;
+ } else
+ video_drawstring (VIDEO_INFO_X, VIDEO_INFO_Y, (uchar *)info);
#ifdef CONFIG_CONSOLE_EXTRA_INFO
{
@@ -1206,10 +1219,27 @@ static void *video_logo (void)
for (i = 1; i < n; i++) {
video_get_info_str (i, info);
- if (*info)
+ if (!*info)
+ continue;
+
+ len = strlen(info);
+ if (len > space) {
+ video_drawchars (VIDEO_INFO_X,
+ VIDEO_INFO_Y +
+ (i + y_off) * VIDEO_FONT_HEIGHT,
+ (uchar *)info, space);
+ y_off++;
+ video_drawchars (VIDEO_INFO_X + VIDEO_FONT_WIDTH,
+ VIDEO_INFO_Y +
+ (i + y_off) * VIDEO_FONT_HEIGHT,
+ (uchar *)info + space,
+ len - space);
+ } else {
video_drawstring (VIDEO_INFO_X,
- VIDEO_INFO_Y + i * VIDEO_FONT_HEIGHT,
+ VIDEO_INFO_Y +
+ (i + y_off) * VIDEO_FONT_HEIGHT,
(uchar *)info);
+ }
}
}
#endif