[efl-ext] Go-to-top effect in genlist and scroller
authorYukti Pandey <yukti.pandey@samsung.com>
Thu, 23 Jan 2020 11:47:22 +0000 (17:17 +0530)
committerJaehyun Cho <jae_hyun.cho@samsung.com>
Thu, 13 Feb 2020 10:50:50 +0000 (19:50 +0900)
[Model] Noblesse
[BinType] N/A
[Customer] N/A
[Issue#] FWGOVERSEA-1520
[Request] N/A
[Occurrence Version] N/A
[Problem] N/A
[Cause & Measure] N/A
[Checking Method] N/A
[Team] (UIFW/EFL)
[Developer] YUKTI PANDEY (yukti.pandey@samsung.com)
[Solution company] Samsung
[Change Type] New Feature

Change-Id: If8c472067a661517f3a736c06068af3f950fcdb6
Signed-off-by: Yukti Pandey <yukti.pandey@samsung.com>
Signed-off-by: Godly T.Alias <godly.talias@samsung.com>
inc/wearable/circle/efl_extension_circle_object_scroller.h
src/wearable/circle/efl_extension_circle_object_genlist.c
src/wearable/circle/efl_extension_circle_object_scroller.c

index 7e2a7497441971458a230973726ad6ae16990888..8fce5b2105e021d0a0489daa0d76ceddfab05e00 100644 (file)
@@ -100,6 +100,22 @@ EAPI void eext_circle_object_scroller_policy_get(const Evas_Object *obj,
                                                  Elm_Scroller_Policy *policy_h,
                                                  Elm_Scroller_Policy *policy_v);
 
+
+//TIZEN_ONLY(24Jan2020): Go To Top Feature
+/**
+ * @WEARABLE_ONLY
+ * @brief Enables the scroll to top button in genlist / scroller layout
+ *
+ * @param[in] scroller The scroller / genlist object
+ * @details Application have to take care of padding in bottom to avoid overlap
+ *
+ *
+ * @if WEARABLE @since_tizen 5.5
+ * @endif
+ */
+EAPI void eext_circle_object_scroller_gototop_enable_set(Evas_Object *obj,
+                                                         Eina_Bool enable);
+//
 /**
  * @}
  */
index 57f3a37d55a7c4e202ef44d729b4c811ab0385bf..e3dc061cee7745641b7c70c6a702bac6825d68b2 100644 (file)
@@ -783,6 +783,20 @@ _eext_circle_object_genlist_line_color_set(Eext_Circle_Object *circle_obj)
      }
 }
 
+//TIZEN_ONLY(24Jan2020): Go 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;
+
+    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);
+ }
+//
 static void
 _eext_circle_object_genlist_change_color_signal_cb(void *data,
                                                    Evas_Object *widget_obj,
@@ -1753,6 +1767,9 @@ _eext_circle_object_genlist_del_cb(Eext_Circle_Object *circle_obj)
    edje_object_signal_callback_del(elm_layout_edje_get(circle_obj->widget_object), "color_class,set",
                                                        widget_data->bezel_scrollbar_color_class,
                                                        _eext_circle_object_genlist_change_color_signal_cb);
+   //TIZEN_ONLY(24Jan2020): Go To Top Feature
+   edje_object_signal_callback_del(elm_layout_edje_get(circle_obj->widget_object),"elm,state,go_to_top", "elm", _eext_circle_object_genlist_first_item_show_cb);
+   //
    if (widget_data->bezel_scrollbar_color_class) eina_stringshare_del(widget_data->bezel_scrollbar_color_class);
    //
 
@@ -1918,6 +1935,9 @@ _eext_circle_object_genlist_init(Eext_Circle_Object *circle_obj,
                                                        widget_data->bezel_scrollbar_color_class,
                                                        _eext_circle_object_genlist_change_color_signal_cb,
                                                        circle_obj);
+   //TIZEN_ONLY(24Jan2020): Go To Top Feature
+   edje_object_signal_callback_add(elm_layout_edje_get(circle_obj->widget_object), "elm,state,go_to_top", "elm", _eext_circle_object_genlist_first_item_show_cb, circle_obj);
+   //
    //
 
    eext_rotary_object_event_callback_add(circle_obj->widget_object, _rotary_changed_cb, circle_obj);
index c8190ac9c74b0a1159862871cfb248413f8500d3..899ae0dd1e660db71b34c80bfb0cf84f914acb14 100644 (file)
@@ -714,6 +714,19 @@ _eext_circle_object_scroller_scroll_animatioin_stop_cb(void *data,
      }
 }
 
+//TIZEN_ONLY(24Jan2020): Go To Top Feature
+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;
+
+    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);
+ }
+//
+
 static void
 _update_color_info(Eext_Circle_Object *obj)
 {
@@ -1321,6 +1334,9 @@ _eext_circle_object_scroller_del_cb(Eext_Circle_Object *obj)
    //ONEUI1.5(04July2019): Support different color with bezel
    edje_object_signal_callback_del(elm_layout_edje_get(obj->widget_object), "color_class,set",
                                    data->bezel_scrollbar_color_class, _eext_circle_object_scroller_change_color_signal_cb);
+   //TIZEN_ONLY(24Jan2020): Go To Top Feature
+   edje_object_signal_callback_del(elm_layout_edje_get(obj->widget_object), "elm,state,go_to_top", "elm", _eext_circle_object_scroller_top_cb);
+   //
    if (data->bezel_scrollbar_color_class) eina_stringshare_del(data->bezel_scrollbar_color_class);
    evas_object_event_callback_del(obj->widget_object, EVAS_CALLBACK_MOUSE_MOVE, _mouse_move_cb);
    evas_object_smart_callback_del_full(obj->widget_object, SIGNAL_DEACTIVATED, _eext_circle_object_scroller_deactivated_cb, obj);
@@ -1528,6 +1544,9 @@ _eext_circle_object_scroller_init(Eext_Circle_Object *obj, Evas_Object *scroller
 
    edje_object_signal_callback_add(elm_layout_edje_get(obj->widget_object), "color_class,set", data->scrollbar_color_class, _eext_circle_object_scroller_change_color_signal_cb, obj);
    edje_object_signal_callback_add(elm_layout_edje_get(obj->widget_object), "color_class,set", data->scrollbar_bg_color_class, _eext_circle_object_scroller_change_color_signal_cb, obj);
+   //TIZEN_ONLY(24Jan2020): Go To Top Feature
+   edje_object_signal_callback_add(elm_layout_edje_get(scroller), "elm,state,go_to_top", "elm", _eext_circle_object_scroller_top_cb, obj);
+   //
    //ONEUI1.5(04July2019): Support different color with bezel
    edje_object_signal_callback_add(elm_layout_edje_get(obj->widget_object), "color_class,set", data->bezel_scrollbar_color_class, _eext_circle_object_scroller_change_color_signal_cb, obj);
    evas_object_smart_callback_add(obj->widget_object, SIGNAL_DEACTIVATED, _eext_circle_object_scroller_deactivated_cb, obj);
@@ -1540,6 +1559,43 @@ _eext_circle_object_scroller_init(Eext_Circle_Object *obj, Evas_Object *scroller
    LOGE("scroller(%p), obj->main_obj(%p)", scroller, obj->main_obj);
 }
 
+//TIZEN_ONLY(24Jan2020): Go To Top Feature
+static void
+_update_clipper_cb(void *data,
+                   Evas_Object *obj,
+                   void *event_info EINA_UNUSED)
+{
+   Evas_Object *edje_obj = elm_layout_edje_get(obj);
+   EEXT_CIRCLE_OBJECT_SCROLLER_SCROLL_IFACE_DATA_GET(obj, sid);
+
+   if (sid->gotop_clipper)
+     sid->gotop_clipper = edje_object_part_object_get(edje_obj, "elm.clip.gototop");
+}
+
+EAPI void
+eext_circle_object_scroller_gototop_enable_set(Evas_Object *obj, Eina_Bool enable)
+{
+   if (!obj) return;
+
+   EEXT_CIRCLE_OBJECT_SCROLLER_SCROLL_IFACE_DATA_GET(obj, sid);
+   Evas_Object *edje_obj = elm_layout_edje_get(obj);
+
+   if (enable)
+     {
+        Evas_Object *clipper = edje_object_part_object_get(edje_obj, "elm.clip.gototop");
+        sid->gotop_clipper = clipper;
+        sid->is_gotop_shown = EINA_FALSE;
+        evas_object_smart_callback_add(obj, "theme,changed", _update_clipper_cb, obj);
+     }
+   else
+     {
+        sid->gotop_clipper = NULL;
+        sid->is_gotop_shown = EINA_FALSE;
+        evas_object_smart_callback_del(obj, "theme,changed", _update_clipper_cb);
+     }
+}
+//
+
 EAPI Evas_Object *
 eext_circle_object_scroller_add(Evas_Object *scroller, Eext_Circle_Surface *surface)
 {