diff options
| author | Pali Rohár <pali.rohar@gmail.com> | 2012-04-28 07:26:44 +0000 | 
|---|---|---|
| committer | Anatolij Gustschin <agust@denx.de> | 2012-06-04 22:43:31 +0200 | 
| commit | 90f60a81daa714b2395d2e9ee3ea25db883ca061 (patch) | |
| tree | 4705e310883863abb4cf80a35af0fd1405916f06 | |
| parent | 04bbe6999048f74af00305cacae14a2d7faf2063 (diff) | |
| download | olio-uboot-2014.01-90f60a81daa714b2395d2e9ee3ea25db883ca061.tar.xz olio-uboot-2014.01-90f60a81daa714b2395d2e9ee3ea25db883ca061.zip | |
cfb_console: Add console_clear_line function
console_clear_line() clears part of specified line or the full line.
Signed-off-by: Pali Rohár <pali.rohar@gmail.com>
Signed-off-by: Anatolij Gustschin <agust@denx.de>
| -rw-r--r-- | drivers/video/cfb_console.c | 49 | 
1 files changed, 36 insertions, 13 deletions
| diff --git a/drivers/video/cfb_console.c b/drivers/video/cfb_console.c index 51ea1671c..6fa61d272 100644 --- a/drivers/video/cfb_console.c +++ b/drivers/video/cfb_console.c @@ -683,6 +683,41 @@ static void memcpyl(int *d, int *s, int c)  }  #endif +static void console_clear_line(int line, int begin, int end) +{ +#ifdef VIDEO_HW_RECTFILL +	video_hw_rectfill(VIDEO_PIXEL_SIZE,		/* bytes per pixel */ +			  VIDEO_FONT_WIDTH * begin,	/* dest pos x */ +			  video_logo_height + +			  VIDEO_FONT_HEIGHT * line,	/* dest pos y */ +			  VIDEO_FONT_WIDTH * (end - begin + 1), /* fr. width */ +			  VIDEO_FONT_HEIGHT,		/* frame height */ +			  bgx				/* fill color */ +		); +#else +	if (begin == 0 && (end + 1) == CONSOLE_COLS) { +		memsetl(CONSOLE_ROW_FIRST + +			CONSOLE_ROW_SIZE * line,	/* offset of row */ +			CONSOLE_ROW_SIZE >> 2,		/* length of row */ +			bgx				/* fill color */ +		); +	} else { +		void *offset; +		int i, size; + +		offset = CONSOLE_ROW_FIRST + +			 CONSOLE_ROW_SIZE * line +	/* offset of row */ +			 VIDEO_FONT_WIDTH * +			 VIDEO_PIXEL_SIZE * begin;	/* offset of col */ +		size = VIDEO_FONT_WIDTH * VIDEO_PIXEL_SIZE * (end - begin + 1); +		size >>= 2; /* length to end for memsetl() */ +		/* fill at col offset of i'th line using bgx as fill color */ +		for (i = 0; i < VIDEO_FONT_HEIGHT; i++) +			memsetl(offset + i * VIDEO_LINE_LEN, size, bgx); +	} +#endif +} +  static void console_scrollup(void)  {  	/* copy up rows ignoring the first one */ @@ -703,20 +738,8 @@ static void console_scrollup(void)  	memcpyl(CONSOLE_ROW_FIRST, CONSOLE_ROW_SECOND,  		CONSOLE_SCROLL_SIZE >> 2);  #endif -  	/* clear the last one */ -#ifdef VIDEO_HW_RECTFILL -	video_hw_rectfill(VIDEO_PIXEL_SIZE,	/* bytes per pixel */ -			  0,			/* dest pos x */ -			  VIDEO_VISIBLE_ROWS -			  - VIDEO_FONT_HEIGHT,	/* dest pos y */ -			  VIDEO_VISIBLE_COLS,	/* frame width */ -			  VIDEO_FONT_HEIGHT,	/* frame height */ -			  CONSOLE_BG_COL	/* fill color */ -		); -#else -	memsetl(CONSOLE_ROW_LAST, CONSOLE_ROW_SIZE >> 2, CONSOLE_BG_COL); -#endif +	console_clear_line(CONSOLE_ROWS - 1, 0, CONSOLE_COLS - 1);  }  static void console_back(void) |