Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // gcc file.c -o a.out $(pkg-config --cflags --libs elementary)
- //
- // TESTS:
- //
- // time ./a.out 10 500
- // perf record -- ./a.out 10 500
- // valgrind --tool=massif ./a.out 10 500
- #include <Elementary.h>
- typedef struct
- {
- Evas_Object *gl;
- Elm_Object_Item *it1, *it2;
- int state;
- } Bounce;
- static Bounce _bounce;
- static int _count = 0;
- static unsigned long long frames = 0;
- static void
- _bounce_cb_frame(void *data EINA_UNUSED, Evas *e EINA_UNUSED, void *event_info EINA_UNUSED)
- {
- frames++;
- }
- static Eina_Bool
- _bounce_cb(void *data)
- {
- Bounce *bounce = data;
- bounce->state++;
- if (bounce->state & 0x1)
- elm_genlist_item_bring_in(bounce->it2, ELM_GENLIST_ITEM_SCROLLTO_MIDDLE);
- else
- elm_genlist_item_bring_in(bounce->it1, ELM_GENLIST_ITEM_SCROLLTO_MIDDLE);
- static struct timespec t0;
- if (bounce->state == 2)
- {
- evas_event_callback_add(evas_object_evas_get(bounce->gl),
- EVAS_CALLBACK_RENDER_FLUSH_POST,
- _bounce_cb_frame, NULL);
- clock_gettime(CLOCK_PROCESS_CPUTIME_ID, &t0);
- }
- if (bounce->state > _count)
- {
- struct timespec t;
- unsigned long long tll, t0ll, tdll;
- clock_gettime(CLOCK_PROCESS_CPUTIME_ID, &t);
- t0ll = (t0.tv_sec * 1000000000) + t0.tv_nsec;
- tll = (t.tv_sec * 1000000000) + t.tv_nsec;
- tdll = tll - t0ll;
- printf("NS since 2 = %llu , %llu frames = %llu / frame\n",
- tdll, frames, tdll / (unsigned long long)frames);
- elm_exit();
- }
- return EINA_TRUE;
- }
- static void
- _btbounce_cb(void *data, Evas_Object *obj, void *event_info EINA_UNUSED)
- {
- Ecore_Timer *tim = evas_object_data_get(obj, "timer");
- if (!tim)
- {
- _bounce_cb(data);
- evas_object_data_set(obj, "timer", tim);
- }
- }
- static void
- _btdel_cb(void *data, Evas *e EINA_UNUSED, Evas_Object *obj, void *event_info EINA_UNUSED)
- {
- Bounce *bounce = data;
- Ecore_Timer *tim = evas_object_data_get(obj, "timer");
- if (tim)
- {
- ecore_timer_del(tim);
- evas_object_data_del(obj, "timer");
- }
- free(bounce);
- }
- static void
- _win_close_cb(void *data,
- Evas_Object *obj EINA_UNUSED,
- void *info EINA_UNUSED)
- {
- elm_exit();
- }
- static
- Evas_Object *_get(void *data , Evas_Object *obj, const char *part)
- {
- Evas_Object *fr, *bx, *ic, *bt, *ck;
- if (strcmp(part, "elm.swallow.content") != 0) return NULL;
- fr = elm_frame_add(obj);
- elm_layout_text_set(fr, NULL, "A Frame");
- bx = elm_box_add(fr);
- elm_box_horizontal_set(bx, EINA_TRUE);
- ic = elm_icon_add(bx);
- elm_icon_standard_set(ic, "home");
- evas_object_size_hint_min_set(ic, 32, 32);
- evas_object_size_hint_align_set(ic, 0.5, EVAS_HINT_FILL);
- evas_object_show(ic);
- elm_box_pack_end(bx, ic);
- bt = elm_button_add(bx);
- evas_object_size_hint_align_set(bt, EVAS_HINT_FILL, EVAS_HINT_FILL);
- evas_object_size_hint_weight_set(bt, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
- elm_layout_text_set(bt, NULL, "Click Me");
- evas_object_show(bt);
- elm_box_pack_end(bx, bt);
- ck = elm_check_add(bx);
- evas_object_size_hint_align_set(ck, EVAS_HINT_FILL, EVAS_HINT_FILL);
- evas_object_size_hint_weight_set(ck, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
- elm_layout_text_set(ck, NULL, "some checkbox");
- evas_object_show(ck);
- elm_box_pack_end(bx, ck);
- elm_layout_content_set(fr, NULL, bx);
- evas_object_size_hint_min_set(fr, 100, 100);
- return fr;
- }
- static Elm_Object_Item *_first, *_last;
- EAPI_MAIN int
- elm_main(int argc, char**argv)
- {
- Elm_Genlist_Item_Class *itc = elm_genlist_item_class_new();
- itc->item_style = "full";
- itc->func.content_get = _get;
- int max = 300;
- if (argc >= 2)
- _count = atoi(argv[1]);
- if (argc >= 3)
- max = atoi(argv[2]);
- Evas_Object *w = elm_win_util_standard_add("test", "test");
- elm_win_autodel_set(w, EINA_TRUE);
- evas_object_smart_callback_add(w, "delete,request", _win_close_cb, NULL);
- Evas_Object *g = elm_genlist_add(w);
- evas_object_size_hint_weight_set(g, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
- evas_object_size_hint_align_set(g, EVAS_HINT_FILL, EVAS_HINT_FILL);
- elm_win_resize_object_add(w, g);
- evas_object_show(g);
- evas_object_show(w);
- _first = elm_genlist_item_append(g, itc, NULL, NULL, ELM_GENLIST_ITEM_NONE, NULL, NULL);
- for (unsigned int i = 0; i < max; i++)
- elm_genlist_item_append(g, itc, NULL, NULL, ELM_GENLIST_ITEM_NONE, NULL, NULL);
- _last = elm_genlist_item_append(g, itc, NULL, NULL, ELM_GENLIST_ITEM_NONE, NULL, NULL);
- _bounce.gl =g;
- _bounce.it1 =_first;
- _bounce.it2 =_last;
- elm_win_maximized_set(w, 1);
- ecore_timer_add(2.0, _bounce_cb, &_bounce);
- elm_run();
- return 0;
- }
- ELM_MAIN()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement