[PATCH 05/19] expo: Drop the extra parameter to scene_calc_dims()

Simon Glass sjg at chromium.org
Mon May 5 17:42:43 CEST 2025


We always call this with false first, then true. Drop the parameter and
handle this within the function itself.

Signed-off-by: Simon Glass <sjg at chromium.org>
---

 boot/expo.c           |  9 +----
 boot/scene.c          | 93 ++++++++++++++++++++++++-------------------
 boot/scene_internal.h |  3 +-
 3 files changed, 55 insertions(+), 50 deletions(-)

diff --git a/boot/expo.c b/boot/expo.c
index d09cc1861da..64d3febacdb 100644
--- a/boot/expo.c
+++ b/boot/expo.c
@@ -150,14 +150,7 @@ int expo_calc_dims(struct expo *exp)
 		return log_msg_ret("dim", -ENOTSUPP);
 
 	list_for_each_entry(scn, &exp->scene_head, sibling) {
-		/*
-		 * Do the menus last so that all the menus' text objects
-		 * are dimensioned
-		 */
-		ret = scene_calc_dims(scn, false);
-		if (ret)
-			return log_msg_ret("scn", ret);
-		ret = scene_calc_dims(scn, true);
+		ret = scene_calc_dims(scn);
 		if (ret)
 			return log_msg_ret("scn", ret);
 	}
diff --git a/boot/scene.c b/boot/scene.c
index 2ca82236300..2ea8e30ad83 100644
--- a/boot/scene.c
+++ b/boot/scene.c
@@ -1003,56 +1003,69 @@ int scene_obj_calc_bbox(struct scene_obj *obj, struct vidconsole_bbox bbox[])
 	return 0;
 }
 
-int scene_calc_dims(struct scene *scn, bool do_menus)
+int scene_calc_dims(struct scene *scn)
 {
 	struct scene_obj *obj;
-	int ret;
+	int ret, i;
 
-	list_for_each_entry(obj, &scn->obj_head, sibling) {
-		switch (obj->type) {
-		case SCENEOBJT_NONE:
-		case SCENEOBJT_TEXT:
-		case SCENEOBJT_BOX:
-		case SCENEOBJT_TEXTEDIT:
-		case SCENEOBJT_IMAGE: {
-			int width;
-
-			if (!do_menus) {
-				ret = scene_obj_get_hw(scn, obj->id, &width);
-				if (ret < 0)
-					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;
+	/*
+	 * Do the menus last so that all the menus' text objects
+	 * are dimensioned. Many objects are referenced by a menu and the size
+	 * and position is set by the menu
+	 */
+	for (i = 0; i < 2; i++) {
+		bool do_menus = i;
+
+		list_for_each_entry(obj, &scn->obj_head, sibling) {
+			switch (obj->type) {
+			case SCENEOBJT_NONE:
+			case SCENEOBJT_TEXT:
+			case SCENEOBJT_BOX:
+			case SCENEOBJT_TEXTEDIT:
+			case SCENEOBJT_IMAGE: {
+				int width;
+
+				if (!do_menus) {
+					ret = scene_obj_get_hw(scn, obj->id,
+							       &width);
+					if (ret < 0)
+						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;
 			}
-			break;
-		}
-		case SCENEOBJT_MENU: {
-			struct scene_obj_menu *menu;
+			case SCENEOBJT_MENU: {
+				struct scene_obj_menu *menu;
 
-			if (do_menus) {
-				menu = (struct scene_obj_menu *)obj;
+				if (do_menus) {
+					menu = (struct scene_obj_menu *)obj;
 
-				ret = scene_menu_calc_dims(menu);
-				if (ret)
-					return log_msg_ret("men", ret);
+					ret = scene_menu_calc_dims(menu);
+					if (ret)
+						return log_msg_ret("men", ret);
+				}
+				break;
 			}
-			break;
-		}
-		case SCENEOBJT_TEXTLINE: {
-			struct scene_obj_textline *tline;
+			case SCENEOBJT_TEXTLINE: {
+				struct scene_obj_textline *tline;
 
-			tline = (struct scene_obj_textline *)obj;
-			ret = scene_textline_calc_dims(tline);
-			if (ret)
-				return log_msg_ret("men", ret);
+				tline = (struct scene_obj_textline *)obj;
+				ret = scene_textline_calc_dims(tline);
+				if (ret)
+					return log_msg_ret("men", ret);
 
-			break;
-		}
+				break;
+			}
+			}
 		}
 	}
 
diff --git a/boot/scene_internal.h b/boot/scene_internal.h
index 95927472875..04218b4b911 100644
--- a/boot/scene_internal.h
+++ b/boot/scene_internal.h
@@ -117,10 +117,9 @@ int scene_obj_flag_clrset(struct scene *scn, uint id, uint clr, uint set);
  * Updates the width and height of all objects based on their contents
  *
  * @scn: Scene to update
- * @do_menus: true to calculate only menus, false to calculate everything else
  * Returns 0 if OK, -ENOTSUPP if there is no graphical console
  */
-int scene_calc_dims(struct scene *scn, bool do_menus);
+int scene_calc_dims(struct scene *scn);
 
 /**
  * scene_menu_arrange() - Set the position of things in the menu
-- 
2.43.0



More information about the U-Boot mailing list