mirror of
https://xff.cz/git/u-boot/
synced 2025-09-01 08:42:12 +02:00
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>
This commit is contained in:
committed by
Anatolij Gustschin
parent
58c733a70f
commit
7b9f7e445e
@@ -57,9 +57,17 @@ static int vidconsole_entry_start(struct udevice *dev)
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* Move backwards one space */
|
/* 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_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);
|
priv->xcur_frac -= VID_TO_POS(priv->x_charsize);
|
||||||
if (priv->xcur_frac < priv->xstart_frac) {
|
if (priv->xcur_frac < priv->xstart_frac) {
|
||||||
@@ -69,6 +77,8 @@ static void vidconsole_back(struct udevice *dev)
|
|||||||
if (priv->ycur < 0)
|
if (priv->ycur < 0)
|
||||||
priv->ycur = 0;
|
priv->ycur = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Move to a newline, scrolling the display if necessary */
|
/* Move to a newline, scrolling the display if necessary */
|
||||||
|
@@ -101,6 +101,20 @@ struct vidconsole_ops {
|
|||||||
* positions.
|
* positions.
|
||||||
*/
|
*/
|
||||||
int (*entry_start)(struct udevice *dev);
|
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 */
|
/* Get a pointer to the driver operations for a video console device */
|
||||||
|
Reference in New Issue
Block a user