}
}
+static Evas_Event_Flags
+_on_flick_end_cb(void *data, void *event_info)
+{
+ Eext_Rotary_Selector_Data *rsd = (Eext_Rotary_Selector_Data *)data;
+ if (!rsd) return EINA_FALSE;
+ Evas_Coord x_diff, y_diff;
+
+ if (rsd->previous_page_animator || rsd->next_page_animator)
+ return EVAS_EVENT_FLAG_ON_HOLD;
+
+ Elm_Gesture_Line_Info *p = (Elm_Gesture_Line_Info *) event_info;
+
+ int first_index = rsd->current_page*_ROTARY_SELECTOR_PAGE_ITEM_MAX;
+ int last_index = 0;
+ int previous_item_index = rsd->selected_index;
+ if (rsd->current_page == 0)
+ {
+ last_index = _ROTARY_SELECTOR_PAGE_ITEM_MAX - 1;
+ }
+ else
+ {
+ last_index = (rsd->current_page + 1) * _ROTARY_SELECTOR_PAGE_ITEM_MAX - 1;
+ }
+ if (last_index > rsd->item_count - 1)
+ {
+ last_index = rsd->item_count - 1;
+ }
+
+ x_diff = p->momentum.x2 - p->momentum.x1;
+ y_diff = p->momentum.y2 - p->momentum.y1;
+
+ if (abs(x_diff) < abs(y_diff)) return EVAS_EVENT_FLAG_ON_HOLD;
+
+ if (p->momentum.x2 > p->momentum.x1) //right swipe
+ {
+ if (rsd->current_page > 0)
+ {
+ rsd->selected_index = first_index - 1;
+ _item_selected_signal_send(rsd, previous_item_index, rsd->selected_index);
+ _page_animation_run(rsd, EINA_FALSE);
+ _selector_update(rsd, EINA_TRUE, EINA_TRUE, EINA_TRUE);
+ evas_object_smart_callback_call(rsd->rotary_selector, "item,selected", (void*)_item_get(rsd, rsd->selected_index));
+ }
+ }
+ else
+ {
+ if (rsd->current_page < ((rsd->item_count - 1) / _ROTARY_SELECTOR_PAGE_ITEM_MAX))
+ {
+ rsd->selected_index = last_index + 1;
+ _item_selected_signal_send(rsd, previous_item_index, rsd->selected_index);
+ _page_animation_run(rsd, EINA_TRUE);
+ _selector_update(rsd, EINA_TRUE, EINA_TRUE, EINA_TRUE);
+ evas_object_smart_callback_call(rsd->rotary_selector, "item,selected", (void*)_item_get(rsd, rsd->selected_index));
+ }
+ }
+ return EVAS_EVENT_FLAG_ON_HOLD;
+}
+
// ----------------------------------------- public API implementation --------------------------------------//
EAPI Evas_Object *
eext_rotary_selector_add(Evas_Object *parent)
evas_object_data_set(rotary_selector, EEXT_ROTARY_SELECTOR_DATA_KEY, rsd);
+ rsd->gesture_layer = elm_gesture_layer_add(rotary_selector);
+ elm_gesture_layer_attach(rsd->gesture_layer, rotary_selector);
+ elm_gesture_layer_cb_set(rsd->gesture_layer, ELM_GESTURE_N_FLICKS,
+ ELM_GESTURE_STATE_END, _on_flick_end_cb, rsd);
+
edje_object_signal_callback_add(elm_layout_edje_get(rsd->rotary_selector), "eext,clicked", "", _selector_clicked_signal, rsd);
edje_object_signal_callback_add(elm_layout_edje_get(rsd->rotary_selector), "elm,anim,finished", "elm", _selector_animation_finished_cb, rsd);