dm: video: correctly set the cursor position
The terminal escape sequence ESC [ <x> ; <y> H is used to set the cursor position. According to the ECMA 48 standard the upper left corner in the escape sequences is [1, 1]. The video uclass uses [0, 0] as upper left corner. Signed-off-by: Heinrich Schuchardt <xypron.glpk@gmx.de> Reviewed-by: Simon Glass <sjg@chromium.org>
This commit is contained in:
parent
1d6edcbfed
commit
118f020d9a
@ -272,6 +272,14 @@ static void vidconsole_escape_char(struct udevice *dev, char ch)
|
||||
s++; /* ; */
|
||||
s = parsenum(s, &col);
|
||||
|
||||
/*
|
||||
* Video origin is [0, 0], terminal origin is [1, 1].
|
||||
*/
|
||||
if (row)
|
||||
--row;
|
||||
if (col)
|
||||
--col;
|
||||
|
||||
set_cursor_position(priv, row, col);
|
||||
|
||||
break;
|
||||
|
@ -178,12 +178,12 @@ static int dm_test_video_ansi(struct unit_test_state *uts)
|
||||
|
||||
/* test set-cursor: [%d;%df */
|
||||
vidconsole_put_string(con, "abc"ANSI_ESC"[2;2fab"ANSI_ESC"[4;4fcd");
|
||||
ut_asserteq(142, compress_frame_buffer(dev));
|
||||
ut_asserteq(143, compress_frame_buffer(dev));
|
||||
|
||||
/* test colors (30-37 fg color, 40-47 bg color) */
|
||||
vidconsole_put_string(con, ANSI_ESC"[30;41mfoo"); /* black on red */
|
||||
vidconsole_put_string(con, ANSI_ESC"[33;44mbar"); /* yellow on blue */
|
||||
ut_asserteq(265, compress_frame_buffer(dev));
|
||||
ut_asserteq(272, compress_frame_buffer(dev));
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user