7 static double start = 0.0;
9 static double t_start = 0.0;
10 static double t_loop = 0.0;
11 static int f_start = 0;
12 static int f_loop = 0;
13 static char data_dir[4096];
15 typedef struct _Menu_Item Menu_Item;
25 static Evas_Object *o_bg = NULL;
26 static Evas_Object *o_wallpaper = NULL;
27 static Evas_Object *o_title = NULL;
28 static Evas_Object *o_byline = NULL;
29 static Evas_Object *o_menu_logo = NULL;
30 static Evas_Object *o_menu_icon = NULL;
31 static Evas_Object *o_menu_icon_sel = NULL;
32 static Evas_Object *o_menu_icon_sel2 = NULL;
33 static Evas_Object *o_menu_text_sel = NULL;
34 static Evas_Object *o_menu_title = NULL;
35 static Eina_List *menu = NULL;
36 static int menu_sel = 0;
37 static int menu_active = 0;
38 static double menu_anim = 0.0;
39 static double menu_anim_sel = 0.0;
41 static double p_fps = 0.0;
43 static void (*key_func) (char *key) = NULL;
44 static void (*loop_func) (double t, int f) = NULL;
46 static int run_all = 0;
47 static int run_test = 0;
48 static int list_test = 0;
49 static int exit_after_test = 0;
51 static double weights[] =
181 20.000, // test 106 MASK 15
199 0.0, // no final test - add a 0 at the end anyway to pad
211 EINA_LIST_FREE(menu, mi)
220 extern const char *profile;
221 extern int win_w, win_h;
222 extern const char *engine;
224 extern int fullscreen;
236 evas_object_hide(o_menu_logo);
237 evas_object_hide(o_menu_title);
238 evas_object_hide(o_menu_icon);
239 evas_object_hide(o_menu_icon_sel);
240 evas_object_hide(o_menu_icon_sel2);
241 evas_object_hide(o_menu_text_sel);
242 evas_object_hide(o_title);
243 evas_object_hide(o_byline);
244 for (l = menu; l; l = l->next)
249 if ((mi->func == about_start) ||
250 (mi->func == _ui_exit) ||
251 (mi->func == _ui_all))
253 if (mi->func) mi->func();
254 evas_object_hide(o_title);
255 evas_object_hide(o_byline);
262 /* This give time to delete the objects of the previous test and make
263 the result of next test more accurate. Draw back, some time is not
268 wfps += (p_fps * weights[t_count]);
272 (i < (1 + t_count)) &&
284 tim = localtime(&now);
285 if (tim) strftime(datestr, sizeof(datestr), "%Y-%m-%d %H:%M:%S", tim);
286 else snprintf(datestr, sizeof(datestr), "unknown");
287 // printf("%5.2f , EVAS SPEED\n", fps / t_count);
288 printf("%5.2f , EVAS SPEED (WEIGHTED), "
291 "ev , %i.%i.%i.%i , "
298 wfps / (t_count * avgw),
302 evas_version->major, evas_version->minor, evas_version->micro, evas_version->revision,
323 evas_object_hide(o_menu_logo);
324 evas_object_hide(o_menu_title);
325 evas_object_hide(o_menu_icon);
326 evas_object_hide(o_menu_icon_sel);
327 evas_object_hide(o_menu_icon_sel2);
328 evas_object_hide(o_menu_text_sel);
329 evas_object_hide(o_title);
330 evas_object_hide(o_byline);
331 mi = eina_list_nth(menu, n);
334 if ((mi->func == about_start) ||
335 (mi->func == _ui_exit) ||
336 (mi->func == _ui_all))
338 if (mi->func) mi->func();
339 evas_object_hide(o_title);
340 evas_object_hide(o_byline);
347 /* This give time to delete the objects of the previous test and make
348 the result of next test more accurate. Draw back, some time is not
353 wfps += (p_fps * weights[n]);
357 for (i = 1; i < ((sizeof(weights) / sizeof(double)) - 1); i++)
362 // printf("%5.2f , EVAS SPEED\n", fps / t_count);
363 printf("%5.2f , EVAS SPEED (WEIGHTED)\n", wfps / (t_count * avgw));
372 void (*func) (void) = NULL;
374 evas_object_hide(o_menu_logo);
375 evas_object_hide(o_menu_title);
376 evas_object_hide(o_menu_icon);
377 evas_object_hide(o_menu_icon_sel);
378 evas_object_hide(o_menu_icon_sel2);
379 evas_object_hide(o_menu_text_sel);
380 evas_object_hide(o_title);
381 evas_object_hide(o_byline);
382 for (i = 0, l = menu; l; l = l->next, i++)
387 evas_object_hide(mi->o_icon);
393 evas_object_hide(o_title);
394 evas_object_hide(o_byline);
398 _ui_key(void *data __UNUSED__, Evas *e __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info)
400 Evas_Event_Key_Down *ev;
405 key_func(ev->keyname);
408 if ((!strcmp(ev->keyname, "Escape")) ||
409 (!strcmp(ev->keyname, "q")) ||
410 (!strcmp(ev->keyname, "Q")))
416 if (!strcmp(ev->keyname, "Left")) menu_sel++;
417 if (!strcmp(ev->keyname, "Right")) menu_sel--;
418 if (menu_sel < 0) menu_sel = 0;
419 else if ((unsigned int)menu_sel >= eina_list_count(menu)) menu_sel = eina_list_count(menu) - 1;
420 menu_anim_sel = menu_sel;
421 if (!strcmp(ev->keyname, "Return")) _ui_select();
425 static Evas_Coord down_x, down_y;
426 static int down_menu_sel = 0;
429 _ui_mouse_down(void *data __UNUSED__, Evas *e __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info)
431 Evas_Event_Mouse_Down *ev;
434 if (ev->button != 1) return;
437 down_x = ev->canvas.x;
438 down_y = ev->canvas.y;
439 down_menu_sel = menu_sel;
444 _ui_mouse_up(void *data __UNUSED__, Evas *e __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info)
446 Evas_Event_Mouse_Up *ev;
449 if (ev->button != 1) return;
454 dx = ev->canvas.x - down_x;
455 dy = ev->canvas.y - down_y;
456 if ((((dx * dx) + (dy * dy)) < (20 * 20)) &&
457 (menu_sel == down_menu_sel))
462 evas_event_feed_key_down(evas, "Escape", "Escape", NULL, NULL, 0, NULL);
463 evas_event_feed_key_up(evas, "Escape", "Escape", NULL, NULL, 0, NULL);
468 _ui_mouse_move(void *data __UNUSED__, Evas *e __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info)
470 Evas_Event_Mouse_Move *ev;
473 if (ev->buttons != 1) return;
476 menu_sel = down_menu_sel + ((ev->cur.canvas.x - down_x) / 25);
478 if (menu_sel < 0) menu_sel = 0;
479 else if ((unsigned int)menu_sel >= eina_list_count(menu))
480 menu_sel = eina_list_count(menu) - 1;
481 menu_anim_sel = menu_sel;
486 _ui_menu_item_add(char *icon, char *text, void (*func) (void))
490 mi = malloc(sizeof(Menu_Item));
491 mi->o_icon = evas_object_image_add(evas);
492 evas_object_image_file_set(mi->o_icon, build_path(icon), NULL);
493 evas_object_resize(mi->o_icon, 32, 32);
494 evas_object_image_fill_set(mi->o_icon, 0, 0, 32, 32);
495 mi->icon = strdup(icon);
496 mi->text = strdup(text);
498 menu = eina_list_append(menu, mi);
499 evas_object_raise(o_menu_icon_sel2);
506 Evas_Coord x, y, w, h;
509 o = evas_object_rectangle_add(evas);
510 evas_object_move(o, 0, 0);
511 evas_object_resize(o, win_w, win_h);
512 evas_object_color_set(o, 0, 0, 0, 0);
513 evas_object_layer_set(o, 1000);
514 evas_object_event_callback_add(o, EVAS_CALLBACK_KEY_DOWN, _ui_key, NULL);
515 evas_object_event_callback_add(o, EVAS_CALLBACK_MOUSE_DOWN, _ui_mouse_down, NULL);
516 evas_object_event_callback_add(o, EVAS_CALLBACK_MOUSE_UP, _ui_mouse_up, NULL);
517 evas_object_event_callback_add(o, EVAS_CALLBACK_MOUSE_MOVE, _ui_mouse_move, NULL);
518 evas_object_focus_set(o, 1);
522 o = evas_object_rectangle_add(evas);
523 evas_object_move(o, 0, 0);
524 evas_object_resize(o, win_w, win_h);
525 evas_object_color_set(o, 255, 255, 255, 255);
526 evas_object_layer_set(o, -99);
530 o = evas_object_text_add(evas);
531 evas_object_text_font_set(o, "Vera-Bold", 10);
532 evas_object_text_text_set(o, "EXPEDITE");
533 evas_object_layer_set(o, 100);
534 evas_object_color_set(o, 0, 0, 0, 100);
535 evas_object_pass_events_set(o, 1);
536 evas_object_geometry_get(o, NULL, NULL, &w, &h);
539 evas_object_move(o, x, y);
543 o = evas_object_text_add(evas);
544 evas_object_text_font_set(o, "Vera", 9);
545 evas_object_text_text_set(o, "LEFT/RIGHT - select, ENTER - select, ESCAPE - exit.");
546 evas_object_layer_set(o, 100);
547 evas_object_color_set(o, 0, 0, 0, 60);
548 evas_object_pass_events_set(o, 1);
549 evas_object_geometry_get(o, NULL, NULL, &w, NULL);
552 evas_object_move(o, x, y);
556 o = evas_object_image_add(evas);
557 evas_object_move(o, (win_w - 120) / 2, ((win_h - 160) / 2));
558 evas_object_image_file_set(o, build_path("e-logo.png"), NULL);
559 evas_object_image_fill_set(o, 0, 0, 120, 160);
560 evas_object_resize(o, 120, 160);
561 evas_object_layer_set(o, -98);
562 evas_object_color_set(o, 255, 255, 255, 255);
566 o = evas_object_image_add(evas);
567 evas_object_move(o, win_w - 128, - 128);
568 evas_object_image_fill_set(o, 0, 0, 256, 256);
569 evas_object_resize(o, 256, 256);
573 o = evas_object_image_add(evas);
574 evas_object_move(o, 0, 0);
575 evas_object_image_file_set(o, build_path("icon_sel.png"), NULL);
576 evas_object_resize(o, 48, 48);
577 evas_object_image_fill_set(o, 0, 0, 48, 48);
580 o = evas_object_image_add(evas);
581 evas_object_move(o, 0, 0);
582 evas_object_image_file_set(o, build_path("text_sel.png"), NULL);
583 evas_object_resize(o, 96, 32);
584 evas_object_image_fill_set(o, 0, 0, 96, 32);
585 evas_object_image_border_set(o, 7, 7, 7, 7);
588 o = evas_object_text_add(evas);
589 evas_object_text_font_set(o, "Vera", 10);
590 evas_object_text_text_set(o, "");
591 evas_object_color_set(o, 0, 0, 0, 100);
592 evas_object_pass_events_set(o, 1);
593 evas_object_geometry_get(o, NULL, NULL, &w, &h);
596 evas_object_move(o, x, y);
599 _ui_menu_item_add("e.png", "About", about_start);
600 _ui_menu_item_add("e.png", "All Tests", _ui_all);
604 _ui_menu_item_add("exit.png", "Exit", _ui_exit);
607 /* make sure disk io isn't going to turn up unexpectedly */
612 /* warm up the cpu with some spinning */
619 if (t - t0 > 2) break;
627 else if (run_test > 0)
631 else if (list_test > 0)
636 for (l = menu, i = -1; l; l = l->next, i++)
642 printf("%3i - %s (Weight %0.2lf)\n", i, mi->text, weights[i]);
656 ui_args(int argc, char **argv)
660 for (i = 1; i < argc; i++)
662 if (!strcmp(argv[i], "-a"))
667 else if ((!strcmp(argv[i], "-t")) && (i < (argc - 1)))
669 run_test = atoi(argv[i + 1]) + 1;
671 if (run_test < 2) run_test = 2;
673 else if (!strcmp(argv[i], "-l"))
685 static int first = 1;
686 static double pt = 0.0;
689 evas_object_resize(o_bg, win_w, win_h);
690 evas_object_resize(o_wallpaper, win_w, win_h);
696 if ((t - t_loop) >= 1.0)
698 // ui_fps((double)f_loop / (t - t_loop));
702 loop_func(t - t_start, f_start);
723 static double tr = 0.0;
730 menu_anim = (menu_anim * 0.995) + (menu_anim_sel * 0.005);
734 for (i = 0, l = menu; l; l = l->next, i++)
738 Evas_Coord x, y, w, h, tw, th;
745 evas_object_geometry_get(o_menu_logo, NULL, NULL, &w, &h);
746 len = ((w * 3) + 10) / 4;
747 evas_object_geometry_get(o, NULL, NULL, &w, &h);
749 + (sin((menu_anim - (double)i) * 0.33) * len)
752 + (cos((menu_anim - (double)i) * 0.33) * len)
754 evas_object_move(o, x, y);
755 a = menu_anim - (double)i;
758 evas_object_color_set(o, a, a, a, a);
763 a = menu_anim - (double)i;
768 evas_object_move(o, x - ((48 - w) / 2), y - ((48 - h) / 2));
769 evas_object_color_set(o, a, a, a, a);
772 evas_object_color_set(o, a, a, a, a);
773 evas_object_text_text_set(o, mi->text);
774 evas_object_geometry_get(o, NULL, NULL, &tw, &th);
775 x = (win_w - tw) / 2;
776 y = (win_h / 2) + len + 48;
777 evas_object_move(o, x, y);
784 y = y + ((th - h) / 2);
785 evas_object_move(o, x, y);
786 evas_object_resize(o, w, h);
787 evas_object_image_fill_set(o, 0, 0, w, h);
788 evas_object_color_set(o, a, a, a, a);
791 snprintf(buf, 4096, "%s%s", data_dir, mi->icon);
792 evas_object_image_file_set(o, buf, NULL);
793 evas_object_color_set(o, a / 2, a / 2, a / 2, a / 2);
796 evas_object_move(o_menu_logo, (win_w - 120) / 2, ((win_h - 160) / 2));
797 evas_object_show(o_menu_logo);
798 evas_object_show(o_menu_title);
799 evas_object_show(o_menu_icon);
800 evas_object_show(o_menu_icon_sel);
801 evas_object_show(o_menu_icon_sel2);
802 evas_object_show(o_menu_text_sel);
812 evas_object_show(o_title);
813 evas_object_show(o_byline);
814 evas_object_text_text_set
815 (o_byline, "LEFT/RIGHT - select, ENTER - select, ESCAPE - exit.");
822 ui_func_set(void (*kfunc) (char *key), void (*lfunc) (double t, int f))
826 t_loop = t_start = get_time();
827 f_loop = f_start = 0;
838 snprintf(buf, sizeof(buf), "ESCAPE - exit, FPS: %4.3f", fps);
839 evas_object_text_text_set(o_byline, buf);