1
0
Fork 0

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: Simon Glass <sjg@chromium.org>
utp
Simon Glass 2016-01-14 18:10:41 -07:00 committed by Anatolij Gustschin
parent 58c733a70f
commit 7b9f7e445e
2 changed files with 25 additions and 1 deletions

View File

@ -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 */

View File

@ -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 */