Rather than estimating, measure the text accurately, using the new
vidconsole feature. This allows accurate placement of objects.

Signed-off-by: Simon Glass <s...@chromium.org>
---

 boot/scene.c | 30 ++++++++++++++++++++++--------
 1 file changed, 22 insertions(+), 8 deletions(-)

diff --git a/boot/scene.c b/boot/scene.c
index dd1472d4f9aa..981a18b3ba1c 100644
--- a/boot/scene.c
+++ b/boot/scene.c
@@ -257,16 +257,30 @@ int scene_obj_get_hw(struct scene *scn, uint id, int 
*widthp)
        case SCENEOBJT_TEXT: {
                struct scene_obj_txt *txt = (struct scene_obj_txt *)obj;
                struct expo *exp = scn->expo;
+               struct vidconsole_bbox bbox;
+               const char *str;
+               int len, ret;
 
+               str = expo_get_str(exp, txt->str_id);
+               if (!str)
+                       return log_msg_ret("str", -ENOENT);
+               len = strlen(str);
+
+               /* if there is no console, make it up */
+               if (!exp->cons) {
+                       if (widthp)
+                               *widthp = 8 * len;
+                       return 16;
+               }
+
+               ret = vidconsole_measure(scn->expo->cons, txt->font_name,
+                                        txt->font_size, str, &bbox);
+               if (ret)
+                       return log_msg_ret("mea", ret);
                if (widthp)
-                       *widthp = 16; /* fake value for now */
-               if (txt->font_size)
-                       return txt->font_size;
-               if (exp->display)
-                       return video_default_font_height(exp->display);
-
-               /* use a sensible default */
-               return 16;
+                       *widthp = bbox.x1;
+
+               return bbox.y1;
        }
        }
 
-- 
2.41.0.rc0.172.g3f132b7071-goog

Reply via email to