vidconsole: Avoid kerning against an unrelated character
authorSimon Glass <sjg@chromium.org>
Tue, 1 Apr 2025 17:29:44 +0000 (06:29 +1300)
committerTom Rini <trini@konsulko.com>
Fri, 2 May 2025 19:40:25 +0000 (13:40 -0600)
When the cursor position changes, kerning should not be used for the
next character, since it can make the first displayed character shuffle
left or right a bit.

Clear the kern character when setting the position.

Signed-off-by: Simon Glass <sjg@chromium.org>
drivers/video/console_truetype.c
drivers/video/vidconsole-uclass.c

index 2e3e6f0..6d2c2c2 100644 (file)
@@ -490,10 +490,12 @@ static int console_truetype_backspace(struct udevice *dev)
 
 static int console_truetype_entry_start(struct udevice *dev)
 {
+       struct vidconsole_priv *vc_priv = dev_get_uclass_priv(dev);
        struct console_tt_priv *priv = dev_get_priv(dev);
 
        /* A new input line has start, so clear our history */
        priv->pos_ptr = 0;
+       vc_priv->last_ch = 0;
 
        return 0;
 }
index 6ba62ec..f1b2d61 100644 (file)
@@ -127,6 +127,9 @@ void vidconsole_set_cursor_pos(struct udevice *dev, int x, int y)
        priv->xcur_frac = VID_TO_POS(x);
        priv->xstart_frac = priv->xcur_frac;
        priv->ycur = y;
+
+       /* make sure not to kern against the previous character */
+       priv->last_ch = 0;
        vidconsole_entry_start(dev);
 }