aboutsummaryrefslogtreecommitdiff
path: root/boot
diff options
context:
space:
mode:
authorSimon Glass2023-10-01 19:13:30 -0600
committerTom Rini2023-10-11 15:43:55 -0400
commit94598d5b0ab1739279a1f864dc88a8ed3140d7c9 (patch)
treea1c43981d37c1be9cb164137f5ca13512d696ff0 /boot
parent8bc69b4b247f45cdfca18e942bf5a5995265479a (diff)
expo: Allow rendering the background of any object
So far only menus have a background. When other object types are rendered, they may have a background too. Make this code more generic so it will be usable by new object types. Signed-off-by: Simon Glass <sjg@chromium.org>
Diffstat (limited to 'boot')
-rw-r--r--boot/scene.c40
-rw-r--r--boot/scene_internal.h7
-rw-r--r--boot/scene_menu.c29
3 files changed, 39 insertions, 37 deletions
diff --git a/boot/scene.c b/boot/scene.c
index e98676b9387..314dd7c6e84 100644
--- a/boot/scene.c
+++ b/boot/scene.c
@@ -315,6 +315,44 @@ int scene_obj_get_hw(struct scene *scn, uint id, int *widthp)
}
/**
+ * scene_render_background() - Render the background for an object
+ *
+ * @obj: Object to render
+ */
+static void scene_render_background(struct scene_obj *obj)
+{
+ struct expo *exp = obj->scene->expo;
+ const struct expo_theme *theme = &exp->theme;
+ struct vidconsole_bbox bbox, label_bbox;
+ struct udevice *dev = exp->display;
+ struct video_priv *vid_priv;
+ struct udevice *cons = exp->cons;
+ struct vidconsole_colour old;
+ enum colour_idx fore, back;
+ uint inset = theme->menu_inset;
+
+ /* draw a background for the object */
+ if (CONFIG_IS_ENABLED(SYS_WHITE_ON_BLACK)) {
+ fore = VID_BLACK;
+ back = VID_WHITE;
+ } else {
+ fore = VID_LIGHT_GRAY;
+ back = VID_BLACK;
+ }
+
+ /* see if this object wants to render a background */
+ if (scene_obj_calc_bbox(obj, &bbox, &label_bbox))
+ return;
+
+ vidconsole_push_colour(cons, fore, back, &old);
+ vid_priv = dev_get_uclass_priv(dev);
+ video_fill_part(dev, label_bbox.x0 - inset, label_bbox.y0 - inset,
+ label_bbox.x1 + inset, label_bbox.y1 + inset,
+ vid_priv->colour_fg);
+ vidconsole_pop_colour(cons, &old);
+}
+
+/**
* scene_obj_render() - Render an object
*
*/
@@ -397,7 +435,7 @@ static int scene_obj_render(struct scene_obj *obj, bool text_mode)
return -ENOTSUPP;
/* draw a background behind the menu items */
- scene_menu_render(menu);
+ scene_render_background(obj);
}
/*
* With a vidconsole, the text and item pointer are rendered as
diff --git a/boot/scene_internal.h b/boot/scene_internal.h
index 326508874e6..1c2bfeadcd3 100644
--- a/boot/scene_internal.h
+++ b/boot/scene_internal.h
@@ -166,13 +166,6 @@ int scene_render(struct scene *scn);
int scene_send_key(struct scene *scn, int key, struct expo_action *event);
/**
- * scene_menu_render() - Render the background behind a menu
- *
- * @menu: Menu to render
- */
-void scene_menu_render(struct scene_obj_menu *menu);
-
-/**
* scene_render_deps() - Render an object and its dependencies
*
* @scn: Scene to render
diff --git a/boot/scene_menu.c b/boot/scene_menu.c
index 95c283af4b0..63994165efb 100644
--- a/boot/scene_menu.c
+++ b/boot/scene_menu.c
@@ -516,35 +516,6 @@ int scene_menu_display(struct scene_obj_menu *menu)
return -ENOTSUPP;
}
-void scene_menu_render(struct scene_obj_menu *menu)
-{
- struct expo *exp = menu->obj.scene->expo;
- const struct expo_theme *theme = &exp->theme;
- struct vidconsole_bbox bbox, label_bbox;
- struct udevice *dev = exp->display;
- struct video_priv *vid_priv;
- struct udevice *cons = exp->cons;
- struct vidconsole_colour old;
- enum colour_idx fore, back;
-
- if (CONFIG_IS_ENABLED(SYS_WHITE_ON_BLACK)) {
- fore = VID_BLACK;
- back = VID_WHITE;
- } else {
- fore = VID_LIGHT_GRAY;
- back = VID_BLACK;
- }
-
- scene_menu_calc_bbox(menu, &bbox, &label_bbox);
- vidconsole_push_colour(cons, fore, back, &old);
- vid_priv = dev_get_uclass_priv(dev);
- video_fill_part(dev, label_bbox.x0 - theme->menu_inset,
- label_bbox.y0 - theme->menu_inset,
- label_bbox.x1, label_bbox.y1 + theme->menu_inset,
- vid_priv->colour_fg);
- vidconsole_pop_colour(cons, &old);
-}
-
int scene_menu_render_deps(struct scene *scn, struct scene_obj_menu *menu)
{
struct scene_menitem *item;