[PATCH 12/19] expo: Check dimensions before arranging a scene
Simon Glass
sjg at chromium.org
Mon May 5 17:42:50 CEST 2025
It is possible that positions, styling or even text have changed since
the scene was initially arranged, so recalculate the dimensions of all
objects before arranging the scene.
Signed-off-by: Simon Glass <sjg at chromium.org>
---
boot/scene.c | 39 +++++++++++++++++++++++++++++++--------
test/boot/expo.c | 1 -
2 files changed, 31 insertions(+), 9 deletions(-)
diff --git a/boot/scene.c b/boot/scene.c
index 9c1eae3d52b..0d8599f955c 100644
--- a/boot/scene.c
+++ b/boot/scene.c
@@ -737,6 +737,31 @@ int scene_calc_arrange(struct scene *scn, struct expo_arrange_info *arr)
return 0;
}
+/**
+ * scene_set_default_bbox() - Set a default for each object's size
+ *
+ * If there is not already a size, use the dims property to set one
+ */
+static int scene_set_default_bbox(struct scene *scn)
+{
+ struct scene_obj *obj;
+
+ list_for_each_entry(obj, &scn->obj_head, sibling) {
+ switch (obj->type) {
+ case SCENEOBJT_IMAGE:
+ case SCENEOBJT_TEXT:
+ if (!(obj->flags & SCENEOF_SIZE_VALID)) {
+ scene_obj_set_size(scn, obj->id, obj->dims.x,
+ obj->dims.y);
+ }
+ default:
+ break;
+ }
+ }
+
+ return 0;
+}
+
int scene_arrange(struct scene *scn)
{
struct expo_arrange_info arr;
@@ -753,6 +778,12 @@ int scene_arrange(struct scene *scn)
ysize = priv->ysize;
}
+ ret = scene_calc_dims(scn);
+ if (ret)
+ return log_msg_ret("scd", ret);
+ ret = scene_set_default_bbox(scn);
+ if (ret)
+ return log_msg_ret("sce", ret);
ret = scene_calc_arrange(scn, &arr);
if (ret < 0)
return log_msg_ret("arr", ret);
@@ -1032,14 +1063,6 @@ int scene_calc_dims(struct scene *scn)
return log_msg_ret("get", ret);
obj->dims.x = width;
obj->dims.y = ret;
- if (!(obj->flags & SCENEOF_SIZE_VALID)) {
- obj->bbox.x1 = obj->bbox.x0 +
- width;
- obj->bbox.y1 = obj->bbox.y0 +
- ret;
- obj->flags |=
- SCENEOF_SIZE_VALID;
- }
}
break;
}
diff --git a/test/boot/expo.c b/test/boot/expo.c
index bf18199caab..0289350df9c 100644
--- a/test/boot/expo.c
+++ b/test/boot/expo.c
@@ -588,7 +588,6 @@ static int expo_render_image(struct unit_test_state *uts)
/* render without a scene */
ut_asserteq(-ECHILD, expo_render(exp));
- ut_assertok(expo_calc_dims(exp));
ut_assertok(scene_arrange(scn));
/* check dimensions of text */
--
2.43.0
More information about the U-Boot
mailing list