rsd->item_del_timer = ecore_timer_add(_ROTARY_SELECTOR_DEL_ANIMATION_DURATION, _del_item_timer_cb, rsd);
}
+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;
+}
+
static void
_dnd_end(Eext_Rotary_Selector_Data *data)
{
Eext_Rotary_Selector_Data *rsd = data;
rsd->drag_done = EINA_TRUE;
+
+ elm_gesture_layer_cb_set(rsd->gesture_layer, ELM_GESTURE_N_FLICKS,
+ ELM_GESTURE_STATE_END, _on_flick_end_cb, rsd);
+
if (rsd->stand_timer)
{
ecore_timer_del(rsd->stand_timer);
rsd->on_delete_icon = EINA_FALSE;
rsd->drag_done = EINA_FALSE;
+ elm_gesture_layer_cb_del(rsd->gesture_layer, ELM_GESTURE_N_FLICKS,
+ ELM_GESTURE_STATE_END, _on_flick_end_cb, rsd);
+
_image_create_icon(rsd);
rsd->longpress_timer = NULL;
}
}
-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)