[PATCH 15/19] expo: Allow the menu pointer to be wider
Simon Glass
sjg at chromium.org
Mon May 5 17:42:53 CEST 2025
Rather than hard-coding the distance between the labels and the key,
measure the width of the pointer to determine the space needed.
Tweak a few tests according. It isn't possible to get the same result
when the font-size differs.
Signed-off-by: Simon Glass <sjg at chromium.org>
---
boot/scene_menu.c | 17 ++++++++++++++---
test/boot/expo.c | 4 ++--
2 files changed, 16 insertions(+), 5 deletions(-)
diff --git a/boot/scene_menu.c b/boot/scene_menu.c
index 094489e2a40..b33e0a7d3b4 100644
--- a/boot/scene_menu.c
+++ b/boot/scene_menu.c
@@ -222,7 +222,7 @@ int scene_menu_arrange(struct scene *scn, struct expo_arrange_info *arr,
struct scene_obj_menu *menu)
{
const bool open = menu->obj.flags & SCENEOF_OPEN;
- struct scene_obj_dims dims[SCENEBB_count];
+ struct scene_obj_dims dims[SCENEBB_count], pointer_dims;
struct expo *exp = scn->expo;
const bool stack = exp->popup;
const struct expo_theme *theme = &exp->theme;
@@ -231,6 +231,7 @@ int scene_menu_arrange(struct scene *scn, struct expo_arrange_info *arr,
int startx, x, y;
int ret;
+ memset(&pointer_dims, '\0', sizeof(pointer_dims));
menu->obj.dims.x = 0;
menu->obj.dims.y = 0;
@@ -256,6 +257,16 @@ int scene_menu_arrange(struct scene *scn, struct expo_arrange_info *arr,
y += ret * 2;
}
+ if (menu->pointer_id) {
+ const struct scene_obj *obj;
+
+ obj = scene_obj_find(scn, menu->pointer_id, SCENEOBJT_NONE);
+ if (!obj)
+ return log_msg_ret("obj", -ENOENT);
+
+ pointer_dims = obj->dims;
+ }
+
/*
* Currently everything is hard-coded to particular columns so this
* won't work on small displays and looks strange if the font size is
@@ -295,9 +306,9 @@ int scene_menu_arrange(struct scene *scn, struct expo_arrange_info *arr,
x += 200;
/* space for the pointer */
- if (menu->pointer_id) {
+ if (pointer_dims.x) {
menu->pointer_xofs = x - startx;
- x += 30;
+ x += 12 + pointer_dims.x + 9;
}
if (item->key_id) {
diff --git a/test/boot/expo.c b/test/boot/expo.c
index 0289350df9c..b05e57b4f5a 100644
--- a/test/boot/expo.c
+++ b/test/boot/expo.c
@@ -424,10 +424,10 @@ static int expo_object_menu(struct unit_test_state *uts)
ut_asserteq(menu->obj.bbox.x0 + 200, ptr->obj.bbox.x0);
ut_asserteq(menu->obj.bbox.y0 + 32, ptr->obj.bbox.y0);
- ut_asserteq(menu->obj.bbox.x0 + 230, key1->obj.bbox.x0);
+ ut_asserteq(menu->obj.bbox.x0 + 229, key1->obj.bbox.x0);
ut_asserteq(menu->obj.bbox.y0 + 32, key1->obj.bbox.y0);
- ut_asserteq(menu->obj.bbox.x0 + 280, desc1->obj.bbox.x0);
+ ut_asserteq(menu->obj.bbox.x0 + 279, desc1->obj.bbox.x0);
ut_asserteq(menu->obj.bbox.y0 + 32, desc1->obj.bbox.y0);
ut_asserteq(-4, prev1->obj.bbox.x0);
--
2.43.0
More information about the U-Boot
mailing list