[C# scroller]: supports Efl.Ui.Scroller compatibility 01/203701/4
authorTaehyub Kim <taehyub.kim@samsung.com>
Tue, 12 Feb 2019 04:29:29 +0000 (13:29 +0900)
committerTaehyub Kim <taehyub.kim@samsung.com>
Thu, 18 Apr 2019 02:15:49 +0000 (11:15 +0900)
Change-Id: Iff78b48af34d6788a868b9d86301a00f7f61bd9f

src/wearable/circle/efl_extension_circle_object_scroller.c

index 010bdbae3bb1cdc047e825960c236ae2a9bafc22..dee99fc5d1310e93052e5ca69c18a560e5a57c58 100644 (file)
@@ -183,8 +183,31 @@ _eext_circle_object_scroller_scrollbar_update(Eext_Circle_Object *obj,
 
    EEXT_CIRCLE_OBJECT_SCROLLER_DATA_GET(obj, data) return;
 
-   elm_scroller_child_size_get(scroller, &content_w, &content_h);
-   elm_scroller_region_get(scroller, &position_x, &position_y, &viewport_w, &viewport_h);
+   Eina_Size2D size;
+   Eina_Rect rect;
+   Eina_Position2D pos;
+
+   //C# FIXME: Optimize the code
+   if (!strcmp(efl_class_name_get(obj->widget_object), "Scroller"))
+     {
+       size = efl_ui_scrollable_content_size_get(obj->widget_object);
+       rect = efl_ui_scrollable_viewport_geometry_get(obj->widget_object);
+       pos = efl_ui_scrollable_content_pos_get(obj->widget_object);
+
+       content_w = size.w;
+       content_h = size.h;
+
+       viewport_w = rect.w;
+       viewport_h = rect.h;
+
+       position_x = pos.x;
+       position_y = pos.y;
+     }
+   else
+     {
+        elm_scroller_child_size_get(scroller, &content_w, &content_h);
+        elm_scroller_region_get(scroller, &position_x, &position_y, &viewport_w, &viewport_h);
+     }
 
    item = _eext_circle_object_item_get(obj, VERTICAL_BAR_NAME);
    bg_item = _eext_circle_object_item_get(obj, VERTICAL_BAR_BG_NAME);
@@ -337,6 +360,22 @@ _eext_circle_object_scroller_scrollbar_update(Eext_Circle_Object *obj,
      }
 }
 
+//C# FIXME: Optimize the code
+static void
+_scroll_cb(void *data EINA_UNUSED, const Efl_Event *ev)
+{
+   Eext_Circle_Object *circle_obj = (Eext_Circle_Object *)data;
+
+   EEXT_CIRCLE_OBJECT_SCROLLER_DATA_GET(circle_obj, widget_data) return;
+
+   if ((widget_data->policy_v == ELM_SCROLLER_POLICY_OFF) &&
+       (widget_data->policy_h == ELM_SCROLLER_POLICY_OFF))
+     return;
+
+   _eext_circle_object_scroller_scrollbar_update(circle_obj,
+                                                 0.3);
+}
+
 static void
 _eext_circle_object_scroller_scroll_cb(void *data,
                                                  Evas_Object *obj,
@@ -426,7 +465,19 @@ _eext_circle_object_scroller_rotary_changed_cb(void *data,
    scroll_locked_x = elm_object_scroll_lock_x_get(scroller);
    scroll_locked_y = elm_object_scroll_lock_y_get(scroller);
 
-   if ((h_pagesize > 0) || (v_pagesize > 0))
+   //C# FIXME: Apply center alignment
+   if (!strcmp(efl_class_name_get(scroller), "Scroller"))
+     {
+        Eina_Position2D pos = efl_ui_scrollable_content_pos_get(scroller);
+        Eina_Rect rect = efl_ui_scrollable_viewport_geometry_get(scroller);
+        if (widget_data->policy_v == ELM_SCROLLER_POLICY_AUTO)
+          rect.y = pos.y + (d * widget_data->step_y);
+        else
+          rect.x = pos.x + (d * widget_data->step_x);
+
+        efl_ui_scrollable_scroll(scroller, rect, EINA_TRUE);
+     }
+   else if ((h_pagesize > 0) || (v_pagesize > 0))
      {
         int h_current_page, v_current_page;
 
@@ -671,9 +722,19 @@ _eext_circle_object_scroller_init(Eext_Circle_Object *obj, Evas_Object *scroller
    _eext_circle_object_item_round_cap_enable_set(item, EINA_TRUE);
    _eext_circle_object_item_append(obj, item);
 
-   elm_scroller_policy_set(scroller, ELM_SCROLLER_POLICY_OFF, ELM_SCROLLER_POLICY_OFF);
+   if (!strcmp(efl_class_name_get(obj->widget_object), "Scroller"))
+     {
+        efl_ui_scrollbar_bar_mode_set(obj->widget_object, EFL_UI_SCROLLBAR_MODE_OFF, EFL_UI_SCROLLBAR_MODE_OFF);
+        efl_event_callback_add(scroller, EFL_UI_EVENT_SCROLL, _scroll_cb, obj);
+     }
+   else
+     {
+        elm_scroller_policy_set(scroller, ELM_SCROLLER_POLICY_OFF, ELM_SCROLLER_POLICY_OFF);
+        evas_object_smart_callback_add(scroller, "scroll", _eext_circle_object_scroller_scroll_cb, obj);
+     }
+
    evas_object_event_callback_add(scroller, EVAS_CALLBACK_SHOW, _eext_circle_object_scroller_show_cb, obj);
-   evas_object_smart_callback_add(scroller, "scroll", _eext_circle_object_scroller_scroll_cb, obj);
+
    evas_object_smart_callback_add(scroller, "content,resize", _eext_circle_object_scroller_content_resize_cb, obj);
 
    eext_rotary_object_event_callback_add(scroller, _eext_circle_object_scroller_rotary_changed_cb, obj);