Eo *obj EINA_UNUSED,
void *event_info EINA_UNUSED);
//
+//TIZEN_ONLY(20200413): flick to open feature
+static Evas_Event_Flags _text_button_flick_end(void *data, void *event_info);
+static Evas_Event_Flags _text_button_flick_move(void *data, void *event_info);
+//
EFL_CALLBACKS_ARRAY_DEFINE(_inc_dec_button_cb,
{ EFL_INPUT_EVENT_CLICKED, _inc_dec_button_clicked_cb},
Elm_Object_Item* item = event_info;
Elm_Spinner_Data* sd = (Elm_Spinner_Data*)data;
- if (!item) return;
+ //TIZEN_ONLY(20200413): flick to open feature
+ if (!item || sd->flick_dir) return;
+ //
if (item == sd->prev_item)
elm_object_item_signal_emit(sd->prev_item, "elm,state,up", "elm");
{
ELM_SPINNER_DATA_GET(data, sd);
- if (event_info)
- {
- sd->aligned_item = (Elm_Object_Item *)event_info;
+ if (!event_info) return;
+
+ sd->aligned_item = (Elm_Object_Item *)event_info;
- _genlist_item_value_apply(data);
+ //TIZEN_ONLY(20200413): flick to open feature
+ Elm_Object_Item* next_item = NULL;
+ if (sd->flick_dir == -1)
+ {
+ if (sd->aligned_item == elm_genlist_first_item_get(sd->genlist))
+ next_item = elm_genlist_last_item_get(sd->genlist);
+ else
+ next_item = elm_genlist_item_prev_get(sd->aligned_item);
}
+ else if (sd->flick_dir == 1)
+ {
+ if (sd->aligned_item == elm_genlist_last_item_get(sd->genlist))
+ next_item = elm_genlist_first_item_get(sd->genlist);
+ else
+ next_item = elm_genlist_item_next_get(sd->aligned_item);
+ }
+ sd->flick_dir = 0;
+ if (next_item) __elm_genlist_item_show_center_adjust(next_item, EINA_TRUE);
+ //
+ _genlist_item_value_apply(data);
}
static void
if (sd->next_item) elm_object_item_signal_emit(sd->next_item, "elm,state,set_default", "elm");
sd->prev_item = NULL;
sd->next_item = NULL;
+ //TIZEN_ONLY(20200413): flick to open feature
+ evas_object_smart_callback_del(sd->genlist, "realized", _genlist_realized_cb);
+ //
}
static void
elm_object_focus_set(obj, EINA_TRUE);
sd->genlist_visible = EINA_TRUE;
- elm_layout_signal_emit(data, "elm,state,button,inactive,anim", "elm");
+ //TIZEN_ONLY(20200413): flick to open feature
+ if (sd->flick_dir)
+ elm_layout_signal_emit(data, "elm,state,button,inactive", "elm");
+ else
+ elm_layout_signal_emit(data, "elm,state,button,inactive,anim", "elm");
+ //
evas_object_hide(sd->text_button);
if (sd->aligned_item)
if (sd->genlist_visible)
{
_genlist_value_apply(obj);
+ //TIZEN_ONLY(20200413): flick to open feature
+ elm_gesture_layer_cb_set(sd->g_layer, ELM_GESTURE_N_FLICKS, ELM_GESTURE_STATE_END, _text_button_flick_end, obj);
+ elm_gesture_layer_cb_set(sd->g_layer, ELM_GESTURE_N_FLICKS, ELM_GESTURE_STATE_MOVE, _text_button_flick_move, obj);
+ //
evas_object_smart_callback_call(obj, SIG_LIST_HIDE, NULL);
}
else
_set_genlist_item_state(sd);
sd->scrolling = EINA_FALSE;
+ //TIZEN_ONLY(20200413): flick to open feature
+ elm_gesture_layer_cb_del(sd->g_layer, ELM_GESTURE_N_FLICKS, ELM_GESTURE_STATE_END, _text_button_flick_end, obj);
+ elm_gesture_layer_cb_del(sd->g_layer, ELM_GESTURE_N_FLICKS, ELM_GESTURE_STATE_MOVE, _text_button_flick_move, obj);
+ //
evas_object_smart_callback_add
(sd->genlist, "aligned,item,detected", _genlist_item_aligned_cb, obj);
evas_object_smart_callback_add
}
//
+//TIZEN_ONLY(20200413): flick to open feature
+static Evas_Event_Flags
+_text_button_flick_move(void *data, void *event_info)
+{
+ Elm_Gesture_Line_Info *p = (Elm_Gesture_Line_Info *)event_info;
+ Evas_Coord x_diff, y_diff;
+ Evas_Object* obj = (Evas_Object*)data;
+ ELM_SPINNER_DATA_GET(obj, sd);
+ if (elm_atspi_bridge_utils_is_screen_reader_enabled())
+ return EVAS_EVENT_FLAG_NONE;
+
+ x_diff = abs(p->momentum.x2 - p->momentum.x1);
+ y_diff = abs(p->momentum.y2 - p->momentum.y1);
+ if (y_diff < x_diff) return EVAS_EVENT_FLAG_NONE;
+ if (y_diff < elm_gesture_layer_line_min_length_get(sd->g_layer))
+ {
+ ERR("INFO: Finger movement is less that line gesture threshold");
+ return EVAS_EVENT_FLAG_NONE;
+ }
+
+ return EVAS_EVENT_FLAG_ON_HOLD;//So that on mouse_up focus cycle does not give focus to text_button in case of flick
+}
+
+static Evas_Event_Flags
+_text_button_flick_end(void *data, void *event_info)
+{
+ Elm_Gesture_Line_Info *p = (Elm_Gesture_Line_Info *) event_info;
+ Evas_Object* obj = (Evas_Object*)data;
+ Evas_Coord x_diff, y_diff;
+ ELM_SPINNER_DATA_GET(obj, sd);
+ if (elm_atspi_bridge_utils_is_screen_reader_enabled()) return EVAS_EVENT_FLAG_NONE;
+
+ x_diff = abs(p->momentum.x2 - p->momentum.x1);
+ y_diff = abs(p->momentum.y2 - p->momentum.y1);
+ if (y_diff < x_diff)
+ {
+ ERR("INFO: Flick happened in horizontal direction");
+ return EVAS_EVENT_FLAG_NONE;
+ }
+
+ if (p->momentum.y2 >= p->momentum.y1)
+ {
+ sd->flick_dir = -1;
+ elm_object_focus_set(obj, EINA_TRUE);
+ _toggle_genlist(obj);
+ ERR("INFO: spinner toggled: %p", obj);
+ return EVAS_EVENT_FLAG_ON_HOLD;
+ }
+ else
+ {
+ sd->flick_dir = 1;
+ elm_object_focus_set(obj, EINA_TRUE);
+ _toggle_genlist(obj);
+ ERR("INFO: spinner toggled: %p", obj);
+ return EVAS_EVENT_FLAG_ON_HOLD;
+ }
+ return EVAS_EVENT_FLAG_NONE;
+}
+//
+
static Eina_Bool
_spin_value(void *data)
{
}
}
+//TIZEN_ONLY(20200413): flick to open feature
+static void
+_on_obj_move(void * data,
+ Evas *e EINA_UNUSED,
+ Evas_Object *obj,
+ void *event_info EINA_UNUSED)
+{
+ Elm_Spinner_Data *sd = data;
+ Evas_Coord x, y;
+ evas_object_geometry_get(obj, &x, &y, NULL, NULL);
+ evas_object_move(sd->g_rect, x, y);
+}
+
+static void
+_on_obj_resize(void * data,
+ Evas *e EINA_UNUSED,
+ Evas_Object *obj,
+ void *event_info EINA_UNUSED)
+{
+ Elm_Spinner_Data *sd = data;
+ Evas_Coord w, h;
+ evas_object_geometry_get(obj, NULL, NULL, &w, &h);
+ evas_object_resize(sd->g_rect, w, h);
+}
+//
+
EOLIAN static void
_elm_spinner_efl_canvas_group_group_add(Eo *obj, Elm_Spinner_Data *priv)
{
elm_layout_content_set(obj, "elm.swallow.text_button", priv->text_button);
elm_widget_sub_object_add(obj, priv->text_button);
+ //TIZEN_ONLY(20200413): flick to open feature
+ if (priv->list_spinner)
+ {
+ priv->g_rect = evas_object_rectangle_add(evas_object_evas_get(obj));
+ evas_object_smart_member_add(priv->g_rect, obj);
+ elm_widget_sub_object_add(obj, priv->g_rect);
+ evas_object_color_set(priv->g_rect, 0, 0, 0, 0);
+ evas_object_show(priv->g_rect);
+ evas_object_repeat_events_set(priv->g_rect, EINA_TRUE);
+ evas_object_raise(priv->g_rect);
+
+ priv->g_layer = elm_gesture_layer_add(obj);
+ elm_gesture_layer_attach(priv->g_layer, priv->g_rect);
+ elm_gesture_layer_cb_set(priv->g_layer, ELM_GESTURE_N_FLICKS, ELM_GESTURE_STATE_END, _text_button_flick_end, obj);
+ elm_gesture_layer_cb_set(priv->g_layer, ELM_GESTURE_N_FLICKS, ELM_GESTURE_STATE_MOVE, _text_button_flick_move, obj);
+ }
+ //
priv->dec_button = elm_button_add(obj);
/* TIZEN_ONLY(20161115): apply UI Mirroring for Tizen 3.0 UX.