At present we assume that each object is a simple box and that it fills
the whole box.

This is quite limiting for text objects, which we may want to centre
within the box. We need a position within the box where drawing starts.

Rename the scene_dim struct to indicate that it is a bounding box.

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

 boot/scene.c          | 36 +++++++++++-----------
 boot/scene_menu.c     | 12 ++++----
 boot/scene_textline.c | 22 ++++++-------
 include/expo.h        |  8 ++---
 test/boot/expo.c      | 72 +++++++++++++++++++++----------------------
 5 files changed, 75 insertions(+), 75 deletions(-)

diff --git a/boot/scene.c b/boot/scene.c
index fb82ffe768c..fbc6f783257 100644
--- a/boot/scene.c
+++ b/boot/scene.c
@@ -211,8 +211,8 @@ int scene_obj_set_pos(struct scene *scn, uint id, int x, 
int y)
        obj = scene_obj_find(scn, id, SCENEOBJT_NONE);
        if (!obj)
                return log_msg_ret("find", -ENOENT);
-       obj->dim.x = x;
-       obj->dim.y = y;
+       obj->bbox.x = x;
+       obj->bbox.y = y;
 
        return 0;
 }
@@ -224,8 +224,8 @@ int scene_obj_set_size(struct scene *scn, uint id, int w, 
int h)
        obj = scene_obj_find(scn, id, SCENEOBJT_NONE);
        if (!obj)
                return log_msg_ret("find", -ENOENT);
-       obj->dim.w = w;
-       obj->dim.h = h;
+       obj->bbox.w = w;
+       obj->bbox.h = h;
 
        return 0;
 }
@@ -369,8 +369,8 @@ static int scene_obj_render(struct scene_obj *obj, bool 
text_mode)
        struct udevice *cons = text_mode ? NULL : exp->cons;
        int x, y, ret;
 
-       x = obj->dim.x;
-       y = obj->dim.y;
+       x = obj->bbox.x;
+       y = obj->bbox.y;
 
        switch (obj->type) {
        case SCENEOBJT_NONE:
@@ -420,8 +420,8 @@ static int scene_obj_render(struct scene_obj *obj, bool 
text_mode)
                        if (obj->flags & SCENEOF_POINT) {
                                vidconsole_push_colour(cons, fore, back, &old);
                                video_fill_part(dev, x - theme->menu_inset, y,
-                                               x + obj->dim.w,
-                                               y + obj->dim.h,
+                                               x + obj->bbox.w,
+                                               y + obj->bbox.h,
                                                vid_priv->colour_bg);
                        }
                        vidconsole_set_cursor_pos(cons, x, y);
@@ -766,8 +766,8 @@ int scene_calc_dims(struct scene *scn, bool do_menus)
                                ret = scene_obj_get_hw(scn, obj->id, &width);
                                if (ret < 0)
                                        return log_msg_ret("get", ret);
-                               obj->dim.w = width;
-                               obj->dim.h = ret;
+                               obj->bbox.w = width;
+                               obj->bbox.h = ret;
                        }
                        break;
                }
@@ -916,15 +916,15 @@ int scene_bbox_union(struct scene *scn, uint id, int 
inset,
        if (!obj)
                return log_msg_ret("obj", -ENOENT);
        if (bbox->valid) {
-               bbox->x0 = min(bbox->x0, obj->dim.x - inset);
-               bbox->y0 = min(bbox->y0, obj->dim.y);
-               bbox->x1 = max(bbox->x1, obj->dim.x + obj->dim.w + inset);
-               bbox->y1 = max(bbox->y1, obj->dim.y + obj->dim.h);
+               bbox->x0 = min(bbox->x0, obj->bbox.x - inset);
+               bbox->y0 = min(bbox->y0, obj->bbox.y);
+               bbox->x1 = max(bbox->x1, obj->bbox.x + obj->bbox.w + inset);
+               bbox->y1 = max(bbox->y1, obj->bbox.y + obj->bbox.h);
        } else {
-               bbox->x0 = obj->dim.x - inset;
-               bbox->y0 = obj->dim.y;
-               bbox->x1 = obj->dim.x + obj->dim.w + inset;
-               bbox->y1 = obj->dim.y + obj->dim.h;
+               bbox->x0 = obj->bbox.x - inset;
+               bbox->y0 = obj->bbox.y;
+               bbox->x1 = obj->bbox.x + obj->bbox.w + inset;
+               bbox->y1 = obj->bbox.y + obj->bbox.h;
                bbox->valid = true;
        }
 
diff --git a/boot/scene_menu.c b/boot/scene_menu.c
index df14a6c0409..f0a060a6356 100644
--- a/boot/scene_menu.c
+++ b/boot/scene_menu.c
@@ -102,7 +102,7 @@ static int update_pointers(struct scene_obj_menu *menu, 
uint id, bool point)
                label = scene_obj_find(scn, item->label_id, SCENEOBJT_NONE);
 
                ret = scene_obj_set_pos(scn, menu->pointer_id,
-                                       menu->obj.dim.x + 200, label->dim.y);
+                                       menu->obj.bbox.x + 200, label->bbox.y);
                if (ret < 0)
                        return log_msg_ret("ptr", ret);
        }
@@ -179,8 +179,8 @@ int scene_menu_calc_dims(struct scene_obj_menu *menu)
        }
 
        if (bbox.valid) {
-               menu->obj.dim.w = bbox.x1 - bbox.x0;
-               menu->obj.dim.h = bbox.y1 - bbox.y0;
+               menu->obj.bbox.w = bbox.x1 - bbox.x0;
+               menu->obj.bbox.h = bbox.y1 - bbox.y0;
        }
 
        return 0;
@@ -198,12 +198,12 @@ int scene_menu_arrange(struct scene *scn, struct 
expo_arrange_info *arr,
        int x, y;
        int ret;
 
-       x = menu->obj.dim.x;
-       y = menu->obj.dim.y;
+       x = menu->obj.bbox.x;
+       y = menu->obj.bbox.y;
        if (menu->title_id) {
                int width;
 
-               ret = scene_obj_set_pos(scn, menu->title_id, menu->obj.dim.x, 
y);
+               ret = scene_obj_set_pos(scn, menu->title_id, menu->obj.bbox.x, 
y);
                if (ret < 0)
                        return log_msg_ret("tit", ret);
 
diff --git a/boot/scene_textline.c b/boot/scene_textline.c
index 6adef7cc173..4467bc4abcf 100644
--- a/boot/scene_textline.c
+++ b/boot/scene_textline.c
@@ -77,11 +77,11 @@ int scene_textline_calc_dims(struct scene_obj_textline 
*tline)
                return log_msg_ret("nom", ret);
 
        if (bbox.valid) {
-               tline->obj.dim.w = bbox.x1 - bbox.x0;
-               tline->obj.dim.h = bbox.y1 - bbox.y0;
+               tline->obj.bbox.w = bbox.x1 - bbox.x0;
+               tline->obj.bbox.h = bbox.y1 - bbox.y0;
 
-               scene_obj_set_size(scn, tline->edit_id, tline->obj.dim.w,
-                                  tline->obj.dim.h);
+               scene_obj_set_size(scn, tline->edit_id, tline->obj.bbox.w,
+                                  tline->obj.bbox.h);
        }
 
        return 0;
@@ -95,16 +95,16 @@ int scene_textline_arrange(struct scene *scn, struct 
expo_arrange_info *arr,
        int x, y;
        int ret;
 
-       x = tline->obj.dim.x;
-       y = tline->obj.dim.y;
+       x = tline->obj.bbox.x;
+       y = tline->obj.bbox.y;
        if (tline->label_id) {
-               ret = scene_obj_set_pos(scn, tline->label_id, tline->obj.dim.x,
+               ret = scene_obj_set_pos(scn, tline->label_id, tline->obj.bbox.x,
                                        y);
                if (ret < 0)
                        return log_msg_ret("tit", ret);
 
                ret = scene_obj_set_pos(scn, tline->edit_id,
-                                       tline->obj.dim.x + 200, y);
+                                       tline->obj.bbox.x + 200, y);
                if (ret < 0)
                        return log_msg_ret("tit", ret);
 
@@ -198,8 +198,8 @@ int scene_textline_render_deps(struct scene *scn,
                if (ret)
                        return log_msg_ret("sav", ret);
 
-               vidconsole_set_cursor_visible(cons, true, txt->obj.dim.x,
-                                             txt->obj.dim.y, scn->cls.num);
+               vidconsole_set_cursor_visible(cons, true, txt->obj.bbox.x,
+                                             txt->obj.bbox.y, scn->cls.num);
        }
 
        return 0;
@@ -220,7 +220,7 @@ int scene_textline_open(struct scene *scn, struct 
scene_obj_textline *tline)
        if (!txt)
                return log_msg_ret("cur", -ENOENT);
 
-       vidconsole_set_cursor_pos(cons, txt->obj.dim.x, txt->obj.dim.y);
+       vidconsole_set_cursor_pos(cons, txt->obj.bbox.x, txt->obj.bbox.y);
        vidconsole_entry_start(cons);
        cli_cread_init(&scn->cls, abuf_data(&tline->buf), tline->max_chars);
        scn->cls.insert = true;
diff --git a/include/expo.h b/include/expo.h
index a2b093c521d..42e934e3ff2 100644
--- a/include/expo.h
+++ b/include/expo.h
@@ -192,14 +192,14 @@ enum scene_obj_t {
 };
 
 /**
- * struct scene_dim - Dimensions of an object
+ * struct scene_obj_bbox - Dimensions of an object
  *
  * @x: x position, in pixels from left side
  * @y: y position, in pixels from top
  * @w: width, in pixels
  * @h: height, in pixels
  */
-struct scene_dim {
+struct scene_obj_bbox {
        int x;
        int y;
        int w;
@@ -232,7 +232,7 @@ enum {
  * @name: Name of the object (allocated)
  * @id: ID number of the object
  * @type: Type of this object
- * @dim: Dimensions for this object
+ * @bbox: Dimensions for this object
  * @flags: Flags for this object
  * @bit_length: Number of bits used for this object in CMOS RAM
  * @start_bit: Start bit to use for this object in CMOS RAM
@@ -243,7 +243,7 @@ struct scene_obj {
        char *name;
        uint id;
        enum scene_obj_t type;
-       struct scene_dim dim;
+       struct scene_obj_bbox bbox;
        u8 flags;
        u8 bit_length;
        u16 start_bit;
diff --git a/test/boot/expo.c b/test/boot/expo.c
index b32a4596e85..77b956bdf06 100644
--- a/test/boot/expo.c
+++ b/test/boot/expo.c
@@ -270,8 +270,8 @@ static int expo_object_attr(struct unit_test_state *uts)
        ut_assert(id > 0);
 
        ut_assertok(scene_obj_set_pos(scn, OBJ_LOGO, 123, 456));
-       ut_asserteq(123, img->obj.dim.x);
-       ut_asserteq(456, img->obj.dim.y);
+       ut_asserteq(123, img->obj.bbox.x);
+       ut_asserteq(456, img->obj.bbox.y);
 
        ut_asserteq(-ENOENT, scene_obj_set_pos(scn, OBJ_TEXT2, 0, 0));
 
@@ -360,8 +360,8 @@ static int expo_object_menu(struct unit_test_state *uts)
        ut_asserteq(0, menu->pointer_id);
 
        ut_assertok(scene_obj_set_pos(scn, OBJ_MENU, 50, 400));
-       ut_asserteq(50, menu->obj.dim.x);
-       ut_asserteq(400, menu->obj.dim.y);
+       ut_asserteq(50, menu->obj.bbox.x);
+       ut_asserteq(400, menu->obj.bbox.y);
 
        id = scene_txt_str(scn, "title", OBJ_MENU_TITLE, STR_MENU_TITLE,
                           "Main Menu", &tit);
@@ -407,24 +407,24 @@ static int expo_object_menu(struct unit_test_state *uts)
        ut_asserteq(id, menu->cur_item_id);
 
        /* the title should be at the top */
-       ut_asserteq(menu->obj.dim.x, tit->obj.dim.x);
-       ut_asserteq(menu->obj.dim.y, tit->obj.dim.y);
+       ut_asserteq(menu->obj.bbox.x, tit->obj.bbox.x);
+       ut_asserteq(menu->obj.bbox.y, tit->obj.bbox.y);
 
        /* the first item should be next */
-       ut_asserteq(menu->obj.dim.x, name1->obj.dim.x);
-       ut_asserteq(menu->obj.dim.y + 32, name1->obj.dim.y);
+       ut_asserteq(menu->obj.bbox.x, name1->obj.bbox.x);
+       ut_asserteq(menu->obj.bbox.y + 32, name1->obj.bbox.y);
 
-       ut_asserteq(menu->obj.dim.x + 230, key1->obj.dim.x);
-       ut_asserteq(menu->obj.dim.y + 32, key1->obj.dim.y);
+       ut_asserteq(menu->obj.bbox.x + 230, key1->obj.bbox.x);
+       ut_asserteq(menu->obj.bbox.y + 32, key1->obj.bbox.y);
 
-       ut_asserteq(menu->obj.dim.x + 200, ptr->obj.dim.x);
-       ut_asserteq(menu->obj.dim.y + 32, ptr->obj.dim.y);
+       ut_asserteq(menu->obj.bbox.x + 200, ptr->obj.bbox.x);
+       ut_asserteq(menu->obj.bbox.y + 32, ptr->obj.bbox.y);
 
-       ut_asserteq(menu->obj.dim.x + 280, desc1->obj.dim.x);
-       ut_asserteq(menu->obj.dim.y + 32, desc1->obj.dim.y);
+       ut_asserteq(menu->obj.bbox.x + 280, desc1->obj.bbox.x);
+       ut_asserteq(menu->obj.bbox.y + 32, desc1->obj.bbox.y);
 
-       ut_asserteq(-4, prev1->obj.dim.x);
-       ut_asserteq(menu->obj.dim.y + 32, prev1->obj.dim.y);
+       ut_asserteq(-4, prev1->obj.bbox.x);
+       ut_asserteq(menu->obj.bbox.y + 32, prev1->obj.bbox.y);
        ut_asserteq(true, prev1->obj.flags & SCENEOF_HIDE);
 
        /* check iterating through scene items */
@@ -548,41 +548,41 @@ static int expo_render_image(struct unit_test_state *uts)
        /* check dimensions of text */
        obj = scene_obj_find(scn, OBJ_TEXT, SCENEOBJT_NONE);
        ut_assertnonnull(obj);
-       ut_asserteq(400, obj->dim.x);
-       ut_asserteq(100, obj->dim.y);
-       ut_asserteq(126, obj->dim.w);
-       ut_asserteq(40, obj->dim.h);
+       ut_asserteq(400, obj->bbox.x);
+       ut_asserteq(100, obj->bbox.y);
+       ut_asserteq(126, obj->bbox.w);
+       ut_asserteq(40, obj->bbox.h);
 
        /* check dimensions of image */
        obj = scene_obj_find(scn, OBJ_LOGO, SCENEOBJT_NONE);
        ut_assertnonnull(obj);
-       ut_asserteq(50, obj->dim.x);
-       ut_asserteq(20, obj->dim.y);
-       ut_asserteq(160, obj->dim.w);
-       ut_asserteq(160, obj->dim.h);
+       ut_asserteq(50, obj->bbox.x);
+       ut_asserteq(20, obj->bbox.y);
+       ut_asserteq(160, obj->bbox.w);
+       ut_asserteq(160, obj->bbox.h);
 
        /* check dimensions of menu labels - both should be the same width */
        obj = scene_obj_find(scn, ITEM1_LABEL, SCENEOBJT_NONE);
        ut_assertnonnull(obj);
-       ut_asserteq(50, obj->dim.x);
-       ut_asserteq(436, obj->dim.y);
-       ut_asserteq(29, obj->dim.w);
-       ut_asserteq(18, obj->dim.h);
+       ut_asserteq(50, obj->bbox.x);
+       ut_asserteq(436, obj->bbox.y);
+       ut_asserteq(29, obj->bbox.w);
+       ut_asserteq(18, obj->bbox.h);
 
        obj = scene_obj_find(scn, ITEM2_LABEL, SCENEOBJT_NONE);
        ut_assertnonnull(obj);
-       ut_asserteq(50, obj->dim.x);
-       ut_asserteq(454, obj->dim.y);
-       ut_asserteq(29, obj->dim.w);
-       ut_asserteq(18, obj->dim.h);
+       ut_asserteq(50, obj->bbox.x);
+       ut_asserteq(454, obj->bbox.y);
+       ut_asserteq(29, obj->bbox.w);
+       ut_asserteq(18, obj->bbox.h);
 
        /* check dimensions of menu */
        obj = scene_obj_find(scn, OBJ_MENU, SCENEOBJT_NONE);
        ut_assertnonnull(obj);
-       ut_asserteq(50, obj->dim.x);
-       ut_asserteq(400, obj->dim.y);
-       ut_asserteq(160, obj->dim.w);
-       ut_asserteq(160, obj->dim.h);
+       ut_asserteq(50, obj->bbox.x);
+       ut_asserteq(400, obj->bbox.y);
+       ut_asserteq(160, obj->bbox.w);
+       ut_asserteq(160, obj->bbox.h);
 
        /* render it */
        expo_set_scene_id(exp, SCENE1);
-- 
2.43.0

Reply via email to