expo: Tidy up insets and improve tests
Insets are handled inconsistently at present, since menus use them to offset the label text, whereas textlines don't. This is done because menus need the margin to be visible when opened. However this causes an alignment issue when menus and textlines appear in the same cedit. Remove the offsets from menus and compensate by adjusting the bounding boxes used for highlighting and the opened menu. Line up menu items and textlines vertically and add a style option for textlines to control how much padding is added. Add a test to check the positions of objects in a cedit, since this is more direct than the rendering tests. Add style information so that the impact can be seen. Signed-off-by: Simon Glass <sjg@chromium.org>
This commit is contained in:
@@ -243,6 +243,7 @@ static int cedit_render(struct unit_test_state *uts)
|
||||
struct expo_action evt;
|
||||
struct expo_action act;
|
||||
struct udevice *dev, *con;
|
||||
struct expo_theme *theme;
|
||||
struct stdio_dev *sdev;
|
||||
struct scene *scn;
|
||||
struct expo *exp;
|
||||
@@ -255,6 +256,12 @@ static int cedit_render(struct unit_test_state *uts)
|
||||
ut_assertnonnull(sdev);
|
||||
con = sdev->priv;
|
||||
|
||||
theme = &exp->theme;
|
||||
theme->menuitem_gap_y = 2;
|
||||
theme->menu_inset = 2;
|
||||
/* theme->menu_title_margin_x is 0 so menu labels shouldn't line up */
|
||||
theme->textline_label_margin_x = 10;
|
||||
|
||||
dev = dev_get_parent(con);
|
||||
vid_priv = dev_get_uclass_priv(dev);
|
||||
ut_asserteq(ID_SCENE1, cedit_prepare(exp, dev, &scn));
|
||||
@@ -264,7 +271,7 @@ static int cedit_render(struct unit_test_state *uts)
|
||||
ut_asserteq(ID_AC_OFF, menu->cur_item_id);
|
||||
|
||||
ut_assertok(expo_render(exp));
|
||||
ut_asserteq(4929, video_compress_fb(uts, dev, false));
|
||||
ut_asserteq(4888, video_compress_fb(uts, dev, false));
|
||||
ut_assertok(video_check_copy_fb(uts, dev));
|
||||
|
||||
/* move to the second menu */
|
||||
@@ -272,54 +279,54 @@ static int cedit_render(struct unit_test_state *uts)
|
||||
act.select.id = ID_POWER_LOSS;
|
||||
ut_assertok(cedit_do_action(exp, scn, vid_priv, &act));
|
||||
ut_assertok(expo_render(exp));
|
||||
ut_asserteq(4986, video_compress_fb(uts, dev, false));
|
||||
ut_asserteq(4967, video_compress_fb(uts, dev, false));
|
||||
|
||||
/* open the menu */
|
||||
act.type = EXPOACT_OPEN;
|
||||
act.select.id = ID_POWER_LOSS;
|
||||
ut_assertok(cedit_do_action(exp, scn, vid_priv, &act));
|
||||
ut_assertok(expo_render(exp));
|
||||
ut_asserteq(5393, video_compress_fb(uts, dev, false));
|
||||
ut_asserteq(5397, video_compress_fb(uts, dev, false));
|
||||
|
||||
/* close the menu */
|
||||
act.type = EXPOACT_CLOSE;
|
||||
act.select.id = ID_POWER_LOSS;
|
||||
ut_assertok(cedit_do_action(exp, scn, vid_priv, &act));
|
||||
ut_assertok(expo_render(exp));
|
||||
ut_asserteq(4986, video_compress_fb(uts, dev, false));
|
||||
ut_asserteq(4967, video_compress_fb(uts, dev, false));
|
||||
|
||||
/* open the menu again to check it looks the same */
|
||||
act.type = EXPOACT_OPEN;
|
||||
act.select.id = ID_POWER_LOSS;
|
||||
ut_assertok(cedit_do_action(exp, scn, vid_priv, &act));
|
||||
ut_assertok(expo_render(exp));
|
||||
ut_asserteq(5393, video_compress_fb(uts, dev, false));
|
||||
ut_asserteq(5397, video_compress_fb(uts, dev, false));
|
||||
|
||||
/* close the menu */
|
||||
act.type = EXPOACT_CLOSE;
|
||||
act.select.id = ID_POWER_LOSS;
|
||||
ut_assertok(cedit_do_action(exp, scn, vid_priv, &act));
|
||||
ut_assertok(expo_render(exp));
|
||||
ut_asserteq(4986, video_compress_fb(uts, dev, false));
|
||||
ut_asserteq(4967, video_compress_fb(uts, dev, false));
|
||||
|
||||
act.type = EXPOACT_OPEN;
|
||||
act.select.id = ID_POWER_LOSS;
|
||||
ut_assertok(cedit_do_action(exp, scn, vid_priv, &act));
|
||||
ut_assertok(expo_render(exp));
|
||||
ut_asserteq(5393, video_compress_fb(uts, dev, false));
|
||||
ut_asserteq(5397, video_compress_fb(uts, dev, false));
|
||||
|
||||
act.type = EXPOACT_POINT_ITEM;
|
||||
act.select.id = ID_AC_ON;
|
||||
ut_assertok(cedit_do_action(exp, scn, vid_priv, &act));
|
||||
ut_assertok(expo_render(exp));
|
||||
ut_asserteq(5365, video_compress_fb(uts, dev, false));
|
||||
ut_asserteq(5341, video_compress_fb(uts, dev, false));
|
||||
|
||||
/* select it */
|
||||
act.type = EXPOACT_SELECT;
|
||||
act.select.id = ID_AC_ON;
|
||||
ut_assertok(cedit_do_action(exp, scn, vid_priv, &act));
|
||||
ut_assertok(expo_render(exp));
|
||||
ut_asserteq(4980, video_compress_fb(uts, dev, false));
|
||||
ut_asserteq(4939, video_compress_fb(uts, dev, false));
|
||||
|
||||
ut_asserteq(ID_AC_ON, menu->cur_item_id);
|
||||
|
||||
@@ -328,14 +335,14 @@ static int cedit_render(struct unit_test_state *uts)
|
||||
act.select.id = ID_MACHINE_NAME;
|
||||
ut_assertok(cedit_do_action(exp, scn, vid_priv, &act));
|
||||
ut_assertok(expo_render(exp));
|
||||
ut_asserteq(4862, video_compress_fb(uts, dev, false));
|
||||
ut_asserteq(4850, video_compress_fb(uts, dev, false));
|
||||
|
||||
/* open it */
|
||||
act.type = EXPOACT_OPEN;
|
||||
act.select.id = ID_MACHINE_NAME;
|
||||
ut_assertok(cedit_do_action(exp, scn, vid_priv, &act));
|
||||
ut_assertok(expo_render(exp));
|
||||
ut_asserteq(4851, video_compress_fb(uts, dev, false));
|
||||
ut_asserteq(4883, video_compress_fb(uts, dev, false));
|
||||
|
||||
/*
|
||||
* Send some keypresses. Note that the console must be enabled so that
|
||||
@@ -351,7 +358,7 @@ static int cedit_render(struct unit_test_state *uts)
|
||||
ut_silence_console(uts);
|
||||
ut_assertok(cedit_arange(exp, vid_priv, scn->id));
|
||||
ut_assertok(expo_render(exp));
|
||||
ut_asserteq(4996, video_compress_fb(uts, dev, false));
|
||||
ut_asserteq(5033, video_compress_fb(uts, dev, false));
|
||||
|
||||
expo_destroy(exp);
|
||||
cur_exp = NULL;
|
||||
@@ -394,7 +401,7 @@ static int cedit_render_lineedit(struct unit_test_state *uts)
|
||||
ut_asserteq(20, tline->pos);
|
||||
|
||||
ut_assertok(expo_render(exp));
|
||||
ut_asserteq(5336, video_compress_fb(uts, dev, false));
|
||||
ut_asserteq(5315, video_compress_fb(uts, dev, false));
|
||||
ut_assertok(video_check_copy_fb(uts, dev));
|
||||
|
||||
/* move to the line-edit field */
|
||||
@@ -402,15 +409,14 @@ static int cedit_render_lineedit(struct unit_test_state *uts)
|
||||
act.select.id = ID_MACHINE_NAME;
|
||||
ut_assertok(cedit_do_action(exp, scn, vid_priv, &act));
|
||||
ut_assertok(expo_render(exp));
|
||||
ut_asserteq(5363, video_compress_fb(uts, dev, false));
|
||||
ut_asserteq(5372, video_compress_fb(uts, dev, false));
|
||||
|
||||
/* open it */
|
||||
act.type = EXPOACT_OPEN;
|
||||
act.select.id = ID_MACHINE_NAME;
|
||||
ut_assertok(cedit_do_action(exp, scn, vid_priv, &act));
|
||||
// ut_asserteq(0, tline->pos);
|
||||
ut_assertok(expo_render(exp));
|
||||
ut_asserteq(5283, video_compress_fb(uts, dev, false));
|
||||
ut_asserteq(5259, video_compress_fb(uts, dev, false));
|
||||
|
||||
/* delete some characters */
|
||||
ut_unsilence_console(uts);
|
||||
@@ -421,7 +427,7 @@ static int cedit_render_lineedit(struct unit_test_state *uts)
|
||||
|
||||
ut_assertok(cedit_arange(exp, vid_priv, scn->id));
|
||||
ut_assertok(expo_render(exp));
|
||||
ut_asserteq(5170, video_compress_fb(uts, dev, false));
|
||||
ut_asserteq(5126, video_compress_fb(uts, dev, false));
|
||||
|
||||
expo_destroy(exp);
|
||||
cur_exp = NULL;
|
||||
@@ -429,3 +435,115 @@ static int cedit_render_lineedit(struct unit_test_state *uts)
|
||||
return 0;
|
||||
}
|
||||
BOOTSTD_TEST(cedit_render_lineedit, UTF_DM | UTF_SCAN_FDT);
|
||||
|
||||
/* Check the cedit is arranged correctly */
|
||||
static int cedit_position(struct unit_test_state *uts)
|
||||
{
|
||||
struct scene_obj_textline *tline;
|
||||
struct scene_obj_menu *menu;
|
||||
struct video_priv *vid_priv;
|
||||
extern struct expo *cur_exp;
|
||||
const uint label_width = 96;
|
||||
struct scene_menitem *item;
|
||||
struct udevice *dev, *con;
|
||||
struct expo_theme *theme;
|
||||
struct scene_obj *obj;
|
||||
struct stdio_dev *sdev;
|
||||
struct scene *scn;
|
||||
struct expo *exp;
|
||||
uint x_offset;
|
||||
|
||||
ut_assertok(run_command("cedit load hostfs - cedit.dtb", 0));
|
||||
exp = cur_exp;
|
||||
|
||||
sdev = stdio_get_by_name("vidconsole");
|
||||
ut_assertnonnull(sdev);
|
||||
con = sdev->priv;
|
||||
|
||||
theme = &exp->theme;
|
||||
theme->menuitem_gap_y = 2;
|
||||
theme->menu_inset = 2;
|
||||
theme->textline_label_margin_x = 10;
|
||||
theme->menu_title_margin_x = 10;
|
||||
|
||||
dev = dev_get_parent(con);
|
||||
vid_priv = dev_get_uclass_priv(dev);
|
||||
ut_asserteq(ID_SCENE1, cedit_prepare(exp, dev, &scn));
|
||||
|
||||
// expo_dump(exp);
|
||||
menu = scene_obj_find(scn, ID_CPU_SPEED, SCENEOBJT_MENU);
|
||||
ut_assertnonnull(menu);
|
||||
obj = &menu->obj;
|
||||
ut_asserteq(50, obj->bbox.x0);
|
||||
ut_asserteq(100, obj->bbox.y0);
|
||||
ut_asserteq(50 + 160, obj->bbox.x1);
|
||||
ut_asserteq(18 + 100, obj->bbox.y1);
|
||||
|
||||
obj = scene_obj_find(scn, menu->title_id, SCENEOBJT_TEXT);
|
||||
ut_assertnonnull(obj);
|
||||
ut_asserteq(50, obj->bbox.x0);
|
||||
ut_asserteq(100, obj->bbox.y0);
|
||||
ut_asserteq(50 + 75, obj->bbox.x1);
|
||||
ut_asserteq(18 + 100, obj->bbox.y1);
|
||||
|
||||
item = scene_menuitem_find_seq(menu, 0);
|
||||
ut_assertnonnull(item);
|
||||
|
||||
x_offset = label_width + theme->textline_label_margin_x;
|
||||
obj = scene_obj_find(scn, item->label_id, SCENEOBJT_TEXT);
|
||||
ut_assertnonnull(obj);
|
||||
ut_asserteq(42, obj->dims.x);
|
||||
ut_asserteq(18, obj->dims.y);
|
||||
|
||||
ut_asserteq(0, obj->ofs.xofs);
|
||||
ut_asserteq(0, obj->ofs.yofs);
|
||||
|
||||
ut_asserteq(50 + x_offset, obj->bbox.x0);
|
||||
ut_asserteq(100, obj->bbox.y0);
|
||||
ut_asserteq(50 + x_offset + 54, obj->bbox.x1);
|
||||
ut_asserteq(18 + 100, obj->bbox.y1);
|
||||
|
||||
/* all items should have the same, so check them */
|
||||
item = scene_menuitem_find_seq(menu, 1);
|
||||
ut_assertnonnull(item);
|
||||
ut_asserteq(50 + x_offset + 54, obj->bbox.x1);
|
||||
|
||||
item = scene_menuitem_find_seq(menu, 2);
|
||||
ut_assertnonnull(item);
|
||||
ut_asserteq(50 + x_offset + 54, obj->bbox.x1);
|
||||
|
||||
menu = scene_obj_find(scn, ID_POWER_LOSS, SCENEOBJT_MENU);
|
||||
ut_assertnonnull(menu);
|
||||
ut_asserteq(ID_AC_OFF, menu->cur_item_id);
|
||||
|
||||
obj = &menu->obj;
|
||||
ut_asserteq(50, obj->bbox.x0);
|
||||
ut_asserteq(120, obj->bbox.y0);
|
||||
ut_asserteq(50 + 160, obj->bbox.x1);
|
||||
ut_asserteq(18 + 120, obj->bbox.y1);
|
||||
|
||||
tline = scene_obj_find(scn, ID_MACHINE_NAME, SCENEOBJT_TEXTLINE);
|
||||
ut_assertnonnull(menu);
|
||||
|
||||
obj = &tline->obj;
|
||||
ut_asserteq(381, obj->dims.x);
|
||||
ut_asserteq(18, obj->dims.y);
|
||||
|
||||
ut_asserteq(50, obj->bbox.x0);
|
||||
ut_asserteq(140, obj->bbox.y0);
|
||||
ut_asserteq(50 + 381, obj->bbox.x1);
|
||||
ut_asserteq(140 + 18, obj->bbox.y1);
|
||||
|
||||
obj = scene_obj_find(scn, ID_MACHINE_NAME_EDIT, SCENEOBJT_TEXT);
|
||||
ut_assertnonnull(obj);
|
||||
ut_asserteq(275, obj->dims.x);
|
||||
ut_asserteq(18, obj->dims.y);
|
||||
|
||||
ut_asserteq(50 + x_offset, obj->bbox.x0);
|
||||
ut_asserteq(140, obj->bbox.y0);
|
||||
ut_asserteq(50 + x_offset + obj->dims.x, obj->bbox.x1);
|
||||
ut_asserteq(140 + 18, obj->bbox.y1);
|
||||
|
||||
return 0;
|
||||
}
|
||||
BOOTSTD_TEST(cedit_position, UTF_DM | UTF_SCAN_FDT);
|
||||
|
||||
Reference in New Issue
Block a user