Refactor GUI code, add grid layout by Dave Ball
[qi-bootmenu.git] / gui-grid.c
blobcfb10dc19f7a5ce8a9e83074dbe94ac02110c8f6
1 #define GRID_LOGO_WIDTH 200
2 #define GRID_LOGO_HEIGHT 180
4 static void gui_grid_draw_item(const char *logo, void(*callback)(void*, Evas*, Evas_Object*, void *),
5 void *data, int x, int y) {
7 Evas_Object *elogo = evas_object_image_add(evas);
8 evas_object_image_file_set(elogo, logo, NULL);
9 evas_object_image_fill_set(elogo, 0, 0, GRID_LOGO_WIDTH, GRID_LOGO_HEIGHT);
10 evas_object_move(elogo, x, y);
11 evas_object_resize(elogo, GRID_LOGO_WIDTH, GRID_LOGO_HEIGHT);
12 evas_object_show(elogo);
14 evas_object_event_callback_add(elogo, EVAS_CALLBACK_MOUSE_UP, callback, data);
17 static void gui_grid(Eina_List *systems) {
18 /* Divide the screen into 6ths */
19 Evas_Object *eline;
20 eline = evas_object_line_add(evas);
21 evas_object_line_xy_set(eline, SCREEN_WIDTH/2, 0, SCREEN_WIDTH/2, SCREEN_HEIGHT);
22 evas_object_show(eline);
23 eline = evas_object_line_add(evas);
24 evas_object_line_xy_set(eline, 0, SCREEN_HEIGHT/3, SCREEN_WIDTH, SCREEN_HEIGHT/3);
25 evas_object_show(eline);
26 eline = evas_object_line_add(evas);
27 evas_object_line_xy_set(eline, 0, 2*(SCREEN_HEIGHT/3), SCREEN_WIDTH, 2*(SCREEN_HEIGHT/3) );
28 evas_object_show(eline);
30 Eina_List *l;
31 int i = 0, x, y;
32 BootItem *s;
34 EINA_LIST_FOREACH(systems, l, s) {
35 x = (i%2 == 0) ? 20 : 260;
36 y = 16 + ((SCREEN_HEIGHT/3) * (i/2));
37 gui_grid_draw_item(s->logo, bootitem_clicked, s, x, y);
38 i++;
41 for (i = 0; i < countof(menu); i++) {
42 x = ((5-i)%2 == 0) ? 20 : 260;
43 y = 16 + ((SCREEN_HEIGHT/3) * ((5-i)/2));
44 gui_grid_draw_item(menu[i].logo, menu[i].callback, NULL, x, y);