We always call this with false first, then true. Drop the parameter and handle this within the function itself.
Signed-off-by: Simon Glass <s...@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