[Genlist] Back to top feature Contribution.
authorGodly T.Alias <godly.talias@samsung.com>
Thu, 26 Mar 2020 09:45:23 +0000 (15:15 +0530)
committerJongmin Lee <jm105.lee@samsung.com>
Fri, 3 Apr 2020 00:05:06 +0000 (09:05 +0900)
Change-Id: I4d49fc184e984ff063a6c8b7e661b2d1a3170d0d
Signed-off-by: Suresh Kumar <suresh.ku1@samsung.com>
inc/wearable/circle/efl_extension_circle_private.h
src/wearable/circle/efl_extension_circle_object_genlist.c
src/wearable/circle/efl_extension_circle_object_scroller.c

index cbdb8ed5b490b5ff706325a751922d554fbca779..9de0f57f6a28850acf4d8cd9007f9ff33ac6b26b 100644 (file)
@@ -256,6 +256,9 @@ struct _Eext_Circle_Object_Genlist_Data {
    Ecore_Timer *bar_first_show_timer;
    Ecore_Timer *change_flag_timer;
    Ecore_Timer *bar_hide_timer;
+   //TIZEN_ONLY(25Feb2020): Back To Top Bring In VI
+   Ecore_Timer *backtotop_timer;
+   //
    Elm_Scroller_Policy policy_h, policy_v;
 
    Eext_Circle_Color color;
@@ -348,6 +351,9 @@ struct _Eext_Circle_Object_Gengrid_Data {
 typedef struct _Eext_Circle_Object_Scroller_Data Eext_Circle_Object_Scroller_Data;
 struct _Eext_Circle_Object_Scroller_Data {
    Ecore_Timer *bar_hide_timer;
+   //TIZEN_ONLY(25Feb2020): Back To Top Bring In VI
+   Ecore_Timer *backtotop_timer;
+   //
    Elm_Scroller_Policy policy_v, policy_h;
 
    Evas_Object *handler_layout;
index fb312693da59df9142d1de93b41c19dae880eb5e..d1e660f30459704e97c7bdadae0c29a1d9b296ce 100644 (file)
 #define SCROLL_BAR_BG_COLOR_DISABLED_G 45
 #define SCROLL_BAR_BG_COLOR_DISABLED_B 45
 #define SCROLL_BAR_BG_COLOR_DISABLED_A 63
+//TIZEN_ONLY(24Feb2020): Back To Top Bring In VI
+#define BACKTOTOP_BRINGIN_VI_THRESHOLD 720
+#define BACKTOTOP_BRINGIN_VI_DURATION 0.2
+//
 
 static const char SIGNAL_LOADED[] = "loaded";
 static const char SIGNAL_SCROLL[] = "scroll";
@@ -82,6 +86,10 @@ static const char SIG_GENLIST_PAUSE[] = "genlist,pause";
 //ONEUI1.5(03JUN2019): Update circle genlist on theme change
 static const char SIG_THEME_CHANGED[] = "theme,changed";
 //
+//TIZEN_ONLY(24Feb2020): Back To Top Bring In VI
+static const char SIGNAL_BACKTOTOP_BRINGIN_VI_HIDE[] = "elm,back_to_top,clipper,hide";
+static const char SIGNAL_BACKTOTOP_BRINGIN_VI_SHOW[] = "elm,back_to_top,clipper,show";
+//
 
 Elm_Scrollable_Smart_Interface_Data* __elm_scrollable_smart_interface_data_get(Eo *obj);
 extern void elm_pan_pos_adjust(Eo *obj, Evas_Coord *x, Evas_Coord *y);
@@ -784,25 +792,56 @@ _eext_circle_object_genlist_line_color_set(Eext_Circle_Object *circle_obj)
 }
 
 //TIZEN_ONLY(24Jan2020): Back To Top Feature
-static void
- _eext_circle_object_genlist_first_item_show_cb(void *data,  Evas_Object *widget_obj EINA_UNUSED,
-                                                const char *emission EINA_UNUSED, const char *source EINA_UNUSED)
- {
-    Eext_Circle_Object *circle_obj = data;
-    EEXT_CIRCLE_OBJECT_GENLIST_DATA_GET(circle_obj, widget_data) return;
-    EEXT_CIRCLE_OBJECT_GENLIST_SCROLL_IFACE_DATA_GET(circle_obj->widget_object, sid);
+static Eina_Bool
+_eext_circle_object_genlist_backtotop_show_anim_cb(void *data)
+{
+   Evas_Coord ry, rw, rh;
+   Eext_Circle_Object *circle_obj = data;
+   EEXT_CIRCLE_OBJECT_GENLIST_DATA_GET(circle_obj, widget_data) return ECORE_CALLBACK_DONE;
+   EEXT_CIRCLE_OBJECT_GENLIST_SCROLL_IFACE_DATA_GET(circle_obj->widget_object, sid);
+   elm_scroller_region_get(circle_obj->widget_object, NULL, &ry, &rw, &rh);
 
-    if (sid->backtotop_cb)
-      {
-         sid->backtotop_cb(data, circle_obj->widget_object, NULL);
-         return;
-      }
+   if (ry > BACKTOTOP_BRINGIN_VI_THRESHOLD)
+     elm_scroller_region_show(circle_obj->widget_object, 0, BACKTOTOP_BRINGIN_VI_THRESHOLD, rw, rh);
+
+   elm_object_signal_emit(circle_obj->widget_object, SIGNAL_BACKTOTOP_BRINGIN_VI_SHOW, "elm");
+   if (sid->backtotop_cb)
+     {
+        sid->backtotop_cb(data, circle_obj->widget_object, NULL);
+        widget_data->backtotop_timer = NULL;
+        return ECORE_CALLBACK_DONE;
+     }
+
+   Elm_Object_Item *first_it = elm_genlist_first_item_get(circle_obj->widget_object);
+   if (!first_it)
+     {
+        widget_data->backtotop_timer = NULL;
+        return ECORE_CALLBACK_DONE;
+     }
 
-    Elm_Object_Item *first_it = elm_genlist_first_item_get(circle_obj->widget_object);
-    if (!first_it) return;
+   elm_genlist_item_bring_in(first_it, ELM_GENLIST_ITEM_SCROLLTO_TOP);
+   widget_data->backtotop_timer = NULL;
+   return ECORE_CALLBACK_DONE;
+}
 
-    elm_genlist_item_bring_in(first_it, ELM_GENLIST_ITEM_SCROLLTO_TOP);
- }
+static void
+_eext_circle_object_genlist_backtotop_show_cb(void *data,  Evas_Object *widget_obj EINA_UNUSED,
+                                                const char *emission EINA_UNUSED, const char *source EINA_UNUSED)
+{
+   Evas_Coord ch;
+   Eext_Circle_Object *circle_obj = data;
+   EEXT_CIRCLE_OBJECT_GENLIST_DATA_GET(circle_obj, widget_data) return;
+   elm_scroller_child_size_get(circle_obj->widget_object, NULL, &ch);
+
+   if (ch > BACKTOTOP_BRINGIN_VI_THRESHOLD)
+     {
+        elm_object_signal_emit(circle_obj->widget_object, SIGNAL_BACKTOTOP_BRINGIN_VI_HIDE, "elm");
+        if (!widget_data->backtotop_timer)
+          widget_data->backtotop_timer = ecore_timer_add(BACKTOTOP_BRINGIN_VI_DURATION,
+                                                         _eext_circle_object_genlist_backtotop_show_anim_cb, data);
+     }
+   else _eext_circle_object_genlist_backtotop_show_anim_cb(data);
+}
 //
 static void
 _eext_circle_object_genlist_change_color_signal_cb(void *data,
@@ -1010,6 +1049,9 @@ _eext_circle_object_genlist_scrollbar_showing(Eext_Circle_Object *circle_obj,
    EEXT_CIRCLE_OBJECT_GENLIST_DATA_GET(circle_obj, widget_data) return;
 
    if (widget_data->bar_size_y <= 0) return;
+   //TIZEN_ONLY(25Feb2020): Back To Top Bring in VI
+   if (widget_data->backtotop_timer) return;
+   //
    widget_data->scrollbar_shown = EINA_TRUE;
 
    if (widget_data->handler)
@@ -1775,7 +1817,7 @@ _eext_circle_object_genlist_del_cb(Eext_Circle_Object *circle_obj)
                                                        widget_data->bezel_scrollbar_color_class,
                                                        _eext_circle_object_genlist_change_color_signal_cb);
    //TIZEN_ONLY(24Jan2020): Back To Top Feature
-   edje_object_signal_callback_del(elm_layout_edje_get(circle_obj->widget_object),"elm,state,back_to_top", "elm", _eext_circle_object_genlist_first_item_show_cb);
+   edje_object_signal_callback_del(elm_layout_edje_get(circle_obj->widget_object),"elm,state,back_to_top", "elm", _eext_circle_object_genlist_backtotop_show_cb);
    //
    if (widget_data->bezel_scrollbar_color_class) eina_stringshare_del(widget_data->bezel_scrollbar_color_class);
    //
@@ -1805,6 +1847,13 @@ _eext_circle_object_genlist_del_cb(Eext_Circle_Object *circle_obj)
         ecore_timer_del(widget_data->change_flag_timer);
         widget_data->change_flag_timer = NULL;
      }
+   //TIZEN_ONLY(25Feb2020): Back To Top Bring In VI
+   if (widget_data->backtotop_timer)
+     {
+        ecore_timer_del(widget_data->backtotop_timer);
+        widget_data->backtotop_timer = NULL;
+     }
+   //
 
    _eext_circle_object_genlist_items_index_clear_internal(circle_obj);
 
@@ -1943,7 +1992,7 @@ _eext_circle_object_genlist_init(Eext_Circle_Object *circle_obj,
                                                        _eext_circle_object_genlist_change_color_signal_cb,
                                                        circle_obj);
    //TIZEN_ONLY(24Jan2020): Back To Top Feature
-   edje_object_signal_callback_add(elm_layout_edje_get(circle_obj->widget_object), "elm,state,back_to_top", "elm", _eext_circle_object_genlist_first_item_show_cb, circle_obj);
+   edje_object_signal_callback_add(elm_layout_edje_get(circle_obj->widget_object), "elm,state,back_to_top", "elm", _eext_circle_object_genlist_backtotop_show_cb, circle_obj);
    //
    //
 
index 5f04380b50a0914453e8988936b77fc31baf2ca9..49e2b0a9dac75d55ec5617a1aad0834b9fcbc2ae 100644 (file)
 #define SCROLL_BAR_BG_COLOR_DISABLED_B 45
 #define SCROLL_BAR_BG_COLOR_DISABLED_A 63
 
+//TIZEN_ONLY(24Feb2020): Back To Top Bring In VI
+#define BACKTOTOP_BRINGIN_VI_THRESHOLD 720
+#define BACKTOTOP_BRINGIN_VI_DURATION 0.2
+//
 #define SURFACE_WIDTH 360
 #define SIG_SCROLLER_RESUME "scroller,resume"
 //ONEUI1.5(04JUL2019) : Change dot's color on bezel rotation
@@ -70,6 +74,10 @@ static const char SIGNAL_DEACTIVATED[] = "rotary,deactivated";
 //
 static const char HANDLER_STYLE[] = "prod/handler";
 
+//TIZEN_ONLY(24Feb2020): Back To Top Bring In VI
+static const char SIGNAL_BACKTOTOP_BRINGIN_VI_HIDE[] = "elm,back_to_top,clipper,hide";
+static const char SIGNAL_BACKTOTOP_BRINGIN_VI_SHOW[] = "elm,back_to_top,clipper,show";
+//
 static const int LEFT = 0;
 static const int RIGHT = 1;
 static const int UP = 2;
@@ -715,22 +723,50 @@ _eext_circle_object_scroller_scroll_animatioin_stop_cb(void *data,
 }
 
 //TIZEN_ONLY(24Jan2020): Back To Top Feature
+static Eina_Bool
+_eext_circle_object_scroller_backtotop_show_anim_cb(void *data)
+{
+   Evas_Coord w, h;
+   Evas_Coord ry, rw, rh;
+   Eext_Circle_Object *circle_obj = (Eext_Circle_Object *)data;
+   EEXT_CIRCLE_OBJECT_SCROLLER_DATA_GET(circle_obj, widget_data) return ECORE_CALLBACK_DONE;
+   EEXT_CIRCLE_OBJECT_SCROLLER_SCROLL_IFACE_DATA_GET(circle_obj->widget_object, sid);
+
+   elm_scroller_region_get(circle_obj->widget_object, NULL, &ry, &rw, &rh);
+   if (ry > BACKTOTOP_BRINGIN_VI_THRESHOLD)
+     elm_scroller_region_show(circle_obj->widget_object, 0, BACKTOTOP_BRINGIN_VI_THRESHOLD, rw, rh);
+
+   elm_object_signal_emit(circle_obj->widget_object, SIGNAL_BACKTOTOP_BRINGIN_VI_SHOW, "elm");
+   if (sid->backtotop_cb)
+     {
+        sid->backtotop_cb(data, circle_obj->widget_object, NULL);
+        widget_data->backtotop_timer = NULL;
+        return ECORE_CALLBACK_DONE;
+     }
+
+   elm_scroller_region_get(circle_obj->widget_object, NULL, NULL, &w, &h);
+   elm_scroller_region_bring_in(circle_obj->widget_object, 0, 0, w, h);
+   widget_data->backtotop_timer = NULL;
+   return ECORE_CALLBACK_DONE;
+}
+
 static void
 _eext_circle_object_scroller_top_cb(void *data, Evas_Object *obj EINA_UNUSED,
                                     const char *emission EINA_UNUSED, const char *source EINA_UNUSED)
- {
-    Evas_Coord w = 0, h = 0;
-    Eext_Circle_Object *circle_obj = (Eext_Circle_Object *)data;
-    EEXT_CIRCLE_OBJECT_SCROLLER_SCROLL_IFACE_DATA_GET(circle_obj->widget_object, sid);
-
-    if (sid->backtotop_cb)
-      {
-         sid->backtotop_cb(data, circle_obj->widget_object, NULL);
-         return;
-      }
+{
+   Evas_Coord ch = 0;
+   Eext_Circle_Object *circle_obj = (Eext_Circle_Object *)data;
+   EEXT_CIRCLE_OBJECT_SCROLLER_DATA_GET(circle_obj, widget_data) return;
 
-    elm_scroller_region_get(circle_obj->widget_object, NULL, NULL, &w, &h);
-    elm_scroller_region_bring_in(circle_obj->widget_object, 0, 0, w, h);
+   elm_scroller_child_size_get(circle_obj->widget_object, NULL, &ch);
+   if (ch > BACKTOTOP_BRINGIN_VI_THRESHOLD)
+    {
+       elm_object_signal_emit(circle_obj->widget_object, SIGNAL_BACKTOTOP_BRINGIN_VI_HIDE, "elm");
+       if (!widget_data->backtotop_timer)
+         widget_data->backtotop_timer = ecore_timer_add(BACKTOTOP_BRINGIN_VI_DURATION,
+                                                        _eext_circle_object_scroller_backtotop_show_anim_cb, data);
+    }
+   else _eext_circle_object_scroller_backtotop_show_anim_cb(data);
  }
 //
 
@@ -1359,6 +1395,13 @@ _eext_circle_object_scroller_del_cb(Eext_Circle_Object *obj)
         ecore_timer_del(data->bar_hide_timer);
         data->bar_hide_timer = NULL;
      }
+   //TIZEN_ONLY(25Feb2020): Back To Top Bring In VI
+   if (data->backtotop_timer)
+     {
+        ecore_timer_del(data->backtotop_timer);
+        data->backtotop_timer = NULL;
+     }
+   //
 
    free(obj->widget_data);
    obj->widget_data = NULL;