expo: Calculate text bounding-box correctly

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>
This commit is contained in:
Simon Glass 2023-06-01 10:22:51 -06:00 committed by Tom Rini
parent ce72c9ec26
commit 50f0203759

View 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);
*widthp = bbox.x1;
/* use a sensible default */
return 16;
return bbox.y1;
}
}