diff options
| author | Anatolij Gustschin <agust@denx.de> | 2009-04-23 12:35:22 +0200 | 
|---|---|---|
| committer | Anatolij Gustschin <agust@denx.de> | 2009-04-28 10:55:13 +0200 | 
| commit | 3dcbe628d66b648e954bc8147d4faff2983206d9 (patch) | |
| tree | ee25836a059239d4995ac6268066d27cdfe39dc2 | |
| parent | 28afe0160f87ff74574150d703055a965f91422a (diff) | |
| download | olio-uboot-2014.01-3dcbe628d66b648e954bc8147d4faff2983206d9.tar.xz olio-uboot-2014.01-3dcbe628d66b648e954bc8147d4faff2983206d9.zip | |
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.c | 36 | 
1 files changed, 33 insertions, 3 deletions
| diff --git a/drivers/video/cfb_console.c b/drivers/video/cfb_console.c index 779aa4b53..5ee2314f3 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 |