static void _drag_stop_cb(void *data, Evas_Object *scroller, void *event_info) { Evas_Coord x, y, w, h; int previous_x; _D("Invoked"); elm_scroller_region_get(scroller, &x, &y, &w, &h); previous_x = (int) evas_object_data_get(scroller, "previous_x"); if (x == previous_x) { _D("[33mHold scroller (previous) %d (current) %d[0m", previous_x, x); } /* page_scroller_focus & index_bring_in in _drag_stop_cb & _anim_stop_cb */ do { if (x % w) return; int cur_idx = page_scroller_get_current_page_no(scroller); int idx = 0; if (w) idx = x / w; if (cur_idx == idx) return; page_scroller_bring_in(scroller, idx); page_scroller_focus(scroller); } while (0); }
static void _drag_start_cb(void *data, Evas_Object *scroller, void *event_info) { int previous_x; _D("Invoked"); elm_scroller_region_get(scroller, &previous_x, NULL, NULL, NULL); evas_object_data_set(scroller, "previous_x", (void *) previous_x); evas_object_data_set(scroller, "drag_start", (void *) 1); }
static void _anim_stop_cb(void *data, Evas_Object *scroller, void *event_info) { _D("stop the scroller(%p) animation", scroller); /* page_scroller_focus & index_bring_in in _drag_stop_cb & _anim_stop_cb */ do { Evas_Coord x, y, w, h; elm_scroller_region_get(scroller, &x, &y, &w, &h); if (x % w) return; int cur_idx = page_scroller_get_current_page_no(scroller); int idx = 0; if (w) idx = x / w; if (cur_idx == idx) return; page_scroller_bring_in(scroller, idx); page_scroller_focus(scroller); } while (0); }
const Eflxx::Rect Scroller::getRegion () const { Evas_Coord x, y, w, h; elm_scroller_region_get (o, &x, &y, &w, &h); return Eflxx::Rect (x, y, w, h); }