5 #include <Ecore_Evas.h>
10 /* drawing related stuff */
11 static Ecore_Evas
*ee
;
14 void poweroff(void *data
, Evas
*evas
, Evas_Object
*obj
, void *event
);
19 void(*callback
)(void*, Evas
*, Evas_Object
*, void *);
23 { "Power Off", POWEROFF_LOGO
, poweroff
},
26 void poweroff(void *data
, Evas
*evas
, Evas_Object
*obj
, void *event
) {
30 static void bootitem_clicked(void *data
, Evas
*evas
, Evas_Object
*obj
, void *event
){
31 boot_kernel((BootItem
*)data
);
32 /* XXX: shouldn't be reached, display an error message? */
35 static bool canvas_init(){
36 if (!ecore_init() || !ecore_evas_init())
39 /* XXX: fixed dimensions */
40 if (getenv("DISPLAY"))
41 ee
= ecore_evas_software_x11_new(NULL
, 0, 0, 0, 480, 640);
43 ee
= ecore_evas_fb_new(NULL
, 0, 480, 640);
48 ecore_evas_title_set(ee
, APPNAME
);
49 ecore_evas_borderless_set(ee
, 0);
52 evas
= ecore_evas_get(ee
);
53 evas_font_path_append(evas
, FONT_PATH
);
58 static int draw_item(const char *text
, const char *logo
, void(*callback
)(void*, Evas
*, Evas_Object
*, void *),
59 void *data
, int x
, int y
) {
61 Evas_Object
*ebox
, *elogo
, *etext
;
63 elogo
= evas_object_image_add(evas
);
64 evas_object_image_file_set(elogo
, logo
, NULL
);
65 evas_object_image_fill_set(elogo
, 0, 0, LOGO_WIDTH
, LOGO_HEIGHT
);
66 evas_object_resize(elogo
, LOGO_WIDTH
, LOGO_HEIGHT
);
67 evas_object_show(elogo
);
69 etext
= evas_object_text_add(evas
);
70 evas_object_text_font_set(etext
, FONT
, FONT_SIZE
);
71 evas_object_text_text_set(etext
, text
);
72 evas_object_show(etext
);
74 ebox
= evas_object_box_add(evas
);
75 evas_object_box_align_set(ebox
, 0, 0.5);
76 evas_object_box_padding_set(ebox
, 10, 10);
77 evas_object_move(ebox
, x
, y
);
78 evas_object_resize(ebox
, 680, 50);
79 evas_object_box_append(ebox
, elogo
);
80 evas_object_box_append(ebox
, etext
);
81 evas_object_event_callback_add(ebox
, EVAS_CALLBACK_MOUSE_UP
, callback
, data
);
83 evas_object_show(ebox
);
88 int gui(int argc
, char **argv
) {
91 eprint("Couldn't init GUI\n");
95 /* search for system images to boot and display them in a list */
96 Eina_List
*l
, *systems
= scan_system();
100 EINA_LIST_FOREACH(systems
, l
, s
) {
101 draw_item(s
->dev
, s
->logo
, bootitem_clicked
, s
, 10, y
);
102 y
+= LOGO_HEIGHT
+ 10;
105 /* add pre defined menu entries */
106 for (i
= 0; i
< countof(menu
); i
++) {
107 draw_item(menu
[i
].text
, menu
[i
].logo
, menu
[i
].callback
, NULL
, 10, y
);
108 y
+= LOGO_HEIGHT
+ 10;
111 ecore_main_loop_begin();