rotatory_selector: Start drag on first press 09/203909/1
authorSubodhKumar <s7158.kumar@samsung.com>
Mon, 18 Jun 2018 08:34:59 +0000 (14:04 +0530)
committerTaehyub Kim <taehyub.kim@samsung.com>
Thu, 18 Apr 2019 05:45:57 +0000 (14:45 +0900)
Change-Id: I206403bce3069145f89579fac13debb6e93ebf40
Signed-off-by: SubodhKumar <s7158.kumar@samsung.com>
src/wearable/efl_extension_rotary_selector.c

index d18b60cf1df2dbe1ff4029d56f82a71735f33852..b99ed43dd85f42d451c965c9c2a3bf3afba82deb 100644 (file)
@@ -48,7 +48,8 @@
 #define _ROTARY_SELECTOR_ROTARY_EVENT_RESET_TIME 500
 #define _ROTARY_SELECTOR_ROTARY_EVENT_TIME_ACCELERATION_THRESHOLD 60
 
-
+#define _ROTARY_SELECTOR_DRAG_ITEM_WIDTH 80
+#define _ROTARY_SELECTOR_DRAG_ITEM_HEIGHT 80
 #define _ROTARY_SELECTOR_DEBUG_ENABLED 0
 
 // ====================================== util ==================================== //
@@ -765,9 +766,9 @@ _image_create_icon(Eext_Rotary_Selector_Data *data)
 
    icon = elm_button_add(rsd->rotary_selector);
    elm_object_style_set(icon, "rotary_selector_item");
-   evas_object_resize(icon, rsd->item_width, rsd->item_height);
-   int xoff = rsd->item_width / 2;
-   int yoff = rsd->item_height / 2;
+   evas_object_resize(icon, _ROTARY_SELECTOR_DRAG_ITEM_WIDTH, _ROTARY_SELECTOR_DRAG_ITEM_HEIGHT);
+   int xoff = _ROTARY_SELECTOR_DRAG_ITEM_WIDTH / 2;
+   int yoff = _ROTARY_SELECTOR_DRAG_ITEM_HEIGHT / 2;
    evas_object_move(icon, rsd->drag_pos_x - xoff, rsd->drag_pos_y - yoff);
    evas_object_show(icon);
    _eext_rotary_selector_color_class_parent_set(icon, rsd->rotary_selector);
@@ -875,6 +876,8 @@ _event_area_mouse_down_cb(void *data, Evas *e, Evas_Object *obj, void *event_inf
    Evas_Event_Mouse_Down *ev = event_info;
    Eext_Rotary_Selector_Data *rsd = (Eext_Rotary_Selector_Data *)data;
 
+   rsd->drag_pos_x = -1;
+   rsd->drag_pos_y = -1;
    if (rsd->previous_page_animator || rsd->next_page_animator || rsd->end_effect_animator)
      {
         INF("animator is running!!");
@@ -933,6 +936,8 @@ _event_area_mouse_down_cb(void *data, Evas *e, Evas_Object *obj, void *event_inf
              else
                {
                   rsd->pressed_item_index = new_index;
+                  rsd->drag_pos_x = ev->canvas.x;
+                  rsd->drag_pos_y = ev->canvas.y;
                   if (rsd->editing)
                     {
                        int add_idx;
@@ -955,8 +960,6 @@ _event_area_mouse_down_cb(void *data, Evas *e, Evas_Object *obj, void *event_inf
                        add_idx = eina_list_count(rsd->item_list) - 1;
                        if (!rsd->add_enabled || (new_index != add_idx))
                          {
-                            rsd->drag_pos_x = ev->canvas.x;
-                            rsd->drag_pos_y = ev->canvas.y;
                             rsd->drag_item_index = new_index;
                             rsd->drop_item_index = new_index;
                             rsd->longpress_timer = ecore_timer_add(rsd->longpress_timeout,
@@ -987,10 +990,25 @@ _event_area_mouse_move_cb(void *data, Evas *e, Evas_Object *obj, void *event_inf
      {
         return;
      }
+   if (rsd->longpress_timer)
+     {
+        //check move distance to cancel timer
+        Evas_Coord x, y;
+        double dist;
+
+        x = ev->cur.canvas.x;
+        y = ev->cur.canvas.y;
+        dist = sqrt(pow(x - rsd->drag_pos_x, 2) + pow(y - rsd->drag_pos_y, 2));
+        if (dist > elm_config_finger_size_get())
+          {
+             ecore_timer_del(rsd->longpress_timer);
+             rsd->longpress_timer = NULL;
+          }
+     }
    if (rsd->drag_item)
      {
-        int xoff = rsd->item_width / 2;
-        int yoff = rsd->item_height / 2;
+        int xoff = _ROTARY_SELECTOR_DRAG_ITEM_WIDTH / 2;
+        int yoff = _ROTARY_SELECTOR_DRAG_ITEM_HEIGHT / 2;
         rsd->drag_pos_x = ev->cur.canvas.x;
         rsd->drag_pos_y = ev->cur.canvas.y;
         evas_object_move(rsd->drag_obj, ev->cur.canvas.x - xoff, ev->cur.canvas.y - yoff);
@@ -1810,14 +1828,26 @@ _editing_timer_cb(void *data)
    rsd->editing = EINA_TRUE;
    rsd->entering_edit_mode = EINA_TRUE;
 
-   _items_invalidate(rsd);
-   _rotary_selector_item_delete_icon_show(rsd);
 
    EINA_LIST_FOREACH(rsd->item_list, l, item)
      {
         elm_object_signal_emit(item->base.obj, "elm,action,button,unselected", "");
      }
 
+   if (rsd->drag_pos_x == -1 && rsd->drag_pos_y == -1)
+     _rotary_selector_item_delete_icon_show(rsd);
+   else
+     {
+        int add_idx;
+
+        add_idx = eina_list_count(rsd->item_list) - 1;
+        if (!rsd->add_enabled || (rsd->pressed_item_index != add_idx))
+          {
+             rsd->drag_item_index = rsd->pressed_item_index;
+             _item_longpress_cb(rsd);
+          }
+     }
+   _items_invalidate(rsd);
    bg = elm_object_part_content_get(rsd->rotary_selector, "selector,bg_image");
    elm_object_signal_emit(bg, "elm,selector,bg,hide", "elm");
    rsd->selector_bg_hidden = EINA_TRUE;