]> git.dujemihanovic.xyz Git - u-boot.git/commitdiff
expo: Calculate text bounding-box correctly
authorSimon Glass <sjg@chromium.org>
Thu, 1 Jun 2023 16:22:51 +0000 (10:22 -0600)
committerTom Rini <trini@konsulko.com>
Fri, 14 Jul 2023 16:54:51 +0000 (12:54 -0400)
Rather than estimating, measure the text accurately, using the new
vidconsole feature. This allows accurate placement of objects.

Signed-off-by: Simon Glass <sjg@chromium.org>
boot/scene.c

index dd1472d4f9aad92c144edda213d7933d14fff676..981a18b3ba1c0dac84e876576b3932c4a0dc1fda 100644 (file)
@@ -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;
        }
        }