static void _mouse_up_animation(void *data, const Efl_Event *event) { Efl_Ui_Pager_Data *pd = data; double p = ecore_loop_time_get() - pd->mouse_up_time; if (p >= 1.0) p = 1.0; p = ecore_animator_pos_map(p, ECORE_POS_MAP_ACCELERATE, 0.0, 0.0); if (pd->curr.pos < 0.0) { if (pd->curr.pos > -0.5) pd->curr.pos = pd->curr.pos * (1 - p); else pd->curr.pos = (-1) - (-1 - pd->curr.pos) * (1 - p); } else { if (pd->curr.pos < 0.5) pd->curr.pos = pd->curr.pos * (1 - p); else pd->curr.pos = 1 - (1 - pd->curr.pos) * (1 - p); } if (EINA_DBL_EQ(pd->curr.pos, 1.0)) { efl_page_transition_curr_page_change(pd->transition, 1); pd->curr.page = (pd->curr.page + 1 + pd->cnt) % pd->cnt; pd->curr.pos = 0.0; } else if (EINA_DBL_EQ(pd->curr.pos, -1.0)) { efl_page_transition_curr_page_change(pd->transition, -1); pd->curr.page = (pd->curr.page - 1 + pd->cnt) % pd->cnt; pd->curr.pos = 0.0; } _efl_ui_pager_update(pd); if (EINA_DBL_EQ(p, 1.0)) efl_event_callback_del(event->object, EFL_CANVAS_OBJECT_EVENT_ANIMATOR_TICK, _mouse_up_animation, pd); }
static void _page_set_animation(void *data, const Efl_Event *event) { Efl_Ui_Pager_Data *pd = data; double p = ecore_loop_time_get() - pd->change.start_time; double d, temp_pos; int temp_page; if (p >= 1.0) p = 1.0; p = ecore_animator_pos_map(p, ECORE_POS_MAP_ACCELERATE, 0.0, 0.0); d = pd->change.src + pd->change.delta * p; temp_page = d; temp_pos = d - temp_page; if ((temp_page < pd->curr.page) && (fabs(pd->curr.page - d) < 1.0)) { temp_page += 1; temp_pos -= 1.0; } if (pd->curr.page != temp_page) { if (pd->change.delta < 0) efl_page_transition_curr_page_change(pd->transition, -1); else efl_page_transition_curr_page_change(pd->transition, 1); temp_pos = 0.0; } pd->curr.page = temp_page; pd->curr.pos = temp_pos; ERR("page %d pos %lf", pd->curr.page, pd->curr.pos); _efl_ui_pager_update(pd); if (EINA_DBL_EQ(p, 1.0)) efl_event_callback_del(event->object, EFL_CANVAS_OBJECT_EVENT_ANIMATOR_TICK, _page_set_animation, pd); }
static Eina_Bool cone_do_drop(void *data, double pos) { view_sys *p_sys = data; cone_animation *anim = p_sys->p_anim; int x,y,w,h; double frame = pos; frame = ecore_animator_pos_map(pos, ECORE_POS_MAP_BOUNCE, 2, 4); evas_object_geometry_get(anim->obj, &x, &y, &w, &h); double posy = frame * (anim->anim_end_y - anim->anim_begin_y); evas_object_move(anim->obj, x, anim->anim_begin_y + posy); if (y > anim->container_height) { anim->anim_begin_y = -h; anim->anim_end_y = anim->initial_y; ecore_animator_timeline_add(1, cone_do_drop, p_sys); return EINA_FALSE; } return EINA_TRUE; }