]> git.dujemihanovic.xyz Git - u-boot.git/commitdiff
video: Allow temporary colour changes
authorSimon Glass <sjg@chromium.org>
Thu, 1 Jun 2023 16:22:45 +0000 (10:22 -0600)
committerTom Rini <trini@konsulko.com>
Fri, 14 Jul 2023 16:54:51 +0000 (12:54 -0400)
It is sometimes necessary to highlight some text in a different colour.
Add an easy way to do this and then restore the original console colours.

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

index a21fde0e1d46e859fb578fdea18ed6024fef5c96..3f89537c47b76bcca66b7db71e0a9cdecd0dc636 100644 (file)
@@ -596,6 +596,26 @@ int vidconsole_select_font(struct udevice *dev, const char *name, uint size)
        return ops->select_font(dev, name, size);
 }
 
+void vidconsole_push_colour(struct udevice *dev, enum colour_idx fg,
+                           enum colour_idx bg, struct vidconsole_colour *old)
+{
+       struct video_priv *vid_priv = dev_get_uclass_priv(dev->parent);
+
+       old->colour_fg = vid_priv->colour_fg;
+       old->colour_bg = vid_priv->colour_bg;
+
+       vid_priv->colour_fg = video_index_to_colour(vid_priv, fg);
+       vid_priv->colour_bg = video_index_to_colour(vid_priv, bg);
+}
+
+void vidconsole_pop_colour(struct udevice *dev, struct vidconsole_colour *old)
+{
+       struct video_priv *vid_priv = dev_get_uclass_priv(dev->parent);
+
+       vid_priv->colour_fg = old->colour_fg;
+       vid_priv->colour_bg = old->colour_bg;
+}
+
 /* Set up the number of rows and colours (rotated drivers override this) */
 static int vidconsole_pre_probe(struct udevice *dev)
 {
index 3db9a7e1fb950f8b79f2760a908d86d9abe01307..81d4c4d874dff40db999ccdb7180945cec2e75cc 100644 (file)
@@ -71,6 +71,17 @@ struct vidfont_info {
        const char *name;
 };
 
+/**
+ * struct vidconsole_colour - Holds colour information
+ *
+ * @colour_fg: Foreground colour (pixel value)
+ * @colour_bg: Background colour (pixel value)
+ */
+struct vidconsole_colour {
+       u32 colour_fg;
+       u32 colour_bg;
+};
+
 /**
  * struct vidconsole_ops - Video console operations
  *
@@ -204,6 +215,25 @@ int vidconsole_get_font(struct udevice *dev, int seq,
  */
 int vidconsole_select_font(struct udevice *dev, const char *name, uint size);
 
+/**
+ * vidconsole_push_colour() - Temporarily change the font colour
+ *
+ * @dev:       Device to adjust
+ * @fg:                Foreground colour to select
+ * @bg:                Background colour to select
+ * @old:       Place to store the current colour, so it can be restored
+ */
+void vidconsole_push_colour(struct udevice *dev, enum colour_idx fg,
+                           enum colour_idx bg, struct vidconsole_colour *old);
+
+/**
+ * vidconsole_pop_colour() - Restore the original colour
+ *
+ * @dev:       Device to adjust
+ * @old:       Old colour to be restored
+ */
+void vidconsole_pop_colour(struct udevice *dev, struct vidconsole_colour *old);
+
 /**
  * vidconsole_putc_xy() - write a single character to a position
  *