Commit 7b9f7e44 authored by Simon Glass's avatar Simon Glass Committed by Anatolij Gustschin

video: Provide a backspace method

With proportional fonts the vidconsole uclass cannot itself erase the
previous character. Provide an optional method so that the driver can
handle this operation.
Signed-off-by: default avatarSimon Glass <sjg@chromium.org>
parent 58c733a7
......@@ -57,9 +57,17 @@ static int vidconsole_entry_start(struct udevice *dev)
}
/* Move backwards one space */
static void vidconsole_back(struct udevice *dev)
static int vidconsole_back(struct udevice *dev)
{
struct vidconsole_priv *priv = dev_get_uclass_priv(dev);
struct vidconsole_ops *ops = vidconsole_get_ops(dev);
int ret;
if (ops->backspace) {
ret = ops->backspace(dev);
if (ret != -ENOSYS)
return ret;
}
priv->xcur_frac -= VID_TO_POS(priv->x_charsize);
if (priv->xcur_frac < priv->xstart_frac) {
......@@ -69,6 +77,8 @@ static void vidconsole_back(struct udevice *dev)
if (priv->ycur < 0)
priv->ycur = 0;
}
return 0;
}
/* Move to a newline, scrolling the display if necessary */
......
......@@ -101,6 +101,20 @@ struct vidconsole_ops {
* positions.
*/
int (*entry_start)(struct udevice *dev);
/**
* backspace() - Handle erasing the last character
*
* With proportional fonts the vidconsole uclass cannot itself erase
* the previous character. This optional method will be called when
* a backspace is needed. The driver should erase the previous
* character and update the cursor position (xcur_frac, ycur) to the
* start of the previous character.
*
* If not implement, default behaviour will work for fixed-width
* characters.
*/
int (*backspace)(struct udevice *dev);
};
/* Get a pointer to the driver operations for a video console device */
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment