efl_ui_scrollable: implement efl_ui_scrollable_content_pos_get method.
authorHosang Kim <hosang12.kim@samsung.com>
Wed, 28 Nov 2018 05:32:39 +0000 (14:32 +0900)
committerHermet Park <hermetpark@gmail.com>
Wed, 5 Dec 2018 05:49:51 +0000 (14:49 +0900)
Summary:
Applications want to know current position on scroller.
Also, it is necessary when calculate position of focusable object.

Reviewers: herdsman, akanad, YOhoho, bu5hm4n

Reviewed By: bu5hm4n

Subscribers: bu5hm4n, cedric, #reviewers, #committers

Tags: #efl

Differential Revision: https://phab.enlightenment.org/D7251

src/bin/elementary/test_ui_scroller.c
src/lib/elementary/efl_ui_image_zoomable.c
src/lib/elementary/efl_ui_list.c
src/lib/elementary/efl_ui_list.eo
src/lib/elementary/efl_ui_list_view.c
src/lib/elementary/efl_ui_list_view.eo
src/lib/elementary/efl_ui_scroller.c
src/lib/elementary/efl_ui_scroller.eo
src/lib/elementary/efl_ui_widget.c

index 3edc686..a1f8cbd 100644 (file)
@@ -13,13 +13,15 @@ _bt_clicked(void *data EINA_UNUSED, const Efl_Event *ev)
 static void
 _scroll_start_cb(void *data EINA_UNUSED, const Efl_Event *ev)
 {
-   printf("scroll start: %p\n", ev->object);
+   Eina_Position2D pos = efl_ui_scrollable_content_pos_get(ev->object);
+   printf("scroll start: %p x: %d y: %d\n", ev->object, pos.x, pos.y);
 }
 
 static void
 _scroll_stop_cb(void *data EINA_UNUSED, const Efl_Event *ev)
 {
-   printf("scroll stop: %p\n", ev->object);
+   Eina_Position2D pos = efl_ui_scrollable_content_pos_get(ev->object);
+   printf("scroll stop: %p x: %d y: %d\n", ev->object, pos.x, pos.y);
 }
 
 void
index 44d18d9..c20ff54 100644 (file)
@@ -1860,6 +1860,7 @@ _efl_ui_image_zoomable_efl_canvas_group_group_add(Eo *obj, Efl_Ui_Image_Zoomable
    elm_widget_can_focus_set(obj, EINA_TRUE);
 
    priv->smanager = efl_add(EFL_UI_SCROLL_MANAGER_CLASS, obj);
+   efl_composite_attach(obj, priv->smanager);
 
    efl_ui_mirrored_set(priv->smanager, efl_ui_mirrored_get(obj));
    efl_ui_scrollable_bounce_enabled_set(priv->smanager, bounce, bounce);
index 0184234..045346c 100644 (file)
@@ -433,6 +433,7 @@ _efl_ui_list_efl_object_finalize(Eo *obj,
 
    pd->smanager = efl_add(EFL_UI_SCROLL_MANAGER_CLASS, obj);
    efl_ui_mirrored_set(pd->smanager, efl_ui_mirrored_get(obj));
+   efl_composite_attach(obj, pd->smanager);
 
    pd->pan = efl_add(EFL_UI_PAN_CLASS, obj);
 
@@ -914,68 +915,6 @@ _efl_ui_list_efl_pack_pack_padding_get(const Eo *obj EINA_UNUSED,
  */
 
 /* Scroll APIs */
-EOLIAN static Eina_Size2D
-_efl_ui_list_efl_ui_scrollable_interactive_content_size_get(const Eo *obj EINA_UNUSED,
-                                                            Efl_Ui_List_Data *pd)
-{
-   return efl_ui_scrollable_content_size_get(pd->smanager);
-}
-
-EOLIAN static Eina_Rect
-_efl_ui_list_efl_ui_scrollable_interactive_viewport_geometry_get(const Eo *obj EINA_UNUSED,
-                                                                 Efl_Ui_List_Data *pd)
-{
-   return efl_ui_scrollable_viewport_geometry_get(pd->smanager);
-}
-
-EOLIAN static void
-_efl_ui_list_efl_ui_scrollable_interactive_bounce_enabled_set(Eo *obj EINA_UNUSED,
-                                                              Efl_Ui_List_Data *pd,
-                                                              Eina_Bool horiz,
-                                                              Eina_Bool vert)
-{
-   efl_ui_scrollable_bounce_enabled_set(pd->smanager, horiz, vert);
-}
-
-EOLIAN static void
-_efl_ui_list_efl_ui_scrollable_interactive_bounce_enabled_get(const Eo *obj EINA_UNUSED,
-                                                              Efl_Ui_List_Data *pd,
-                                                              Eina_Bool *horiz,
-                                                              Eina_Bool *vert)
-{
-   efl_ui_scrollable_bounce_enabled_get(pd->smanager, horiz, vert);
-}
-
-EOLIAN static Eina_Bool
-_efl_ui_list_efl_ui_scrollable_interactive_scroll_hold_get(const Eo *obj EINA_UNUSED,
-                                                           Efl_Ui_List_Data *pd)
-{
-   return efl_ui_scrollable_scroll_hold_get(pd->smanager);
-}
-
-EOLIAN static void
-_efl_ui_list_efl_ui_scrollable_interactive_scroll_hold_set(Eo *obj EINA_UNUSED,
-                                                           Efl_Ui_List_Data *pd,
-                                                           Eina_Bool hold)
-{
-   efl_ui_scrollable_scroll_hold_set(pd->smanager, hold);
-}
-
-EOLIAN static Eina_Bool
-_efl_ui_list_efl_ui_scrollable_interactive_scroll_freeze_get(const Eo *obj EINA_UNUSED,
-                                                             Efl_Ui_List_Data *pd)
-{
-   return efl_ui_scrollable_scroll_freeze_get(pd->smanager);
-}
-
-EOLIAN static void
-_efl_ui_list_efl_ui_scrollable_interactive_scroll_freeze_set(Eo *obj EINA_UNUSED,
-                                                             Efl_Ui_List_Data *pd,
-                                                             Eina_Bool freeze)
-{
-   efl_ui_scrollable_scroll_freeze_set(pd->smanager, freeze);
-}
-
 EOLIAN static void
 _efl_ui_list_efl_ui_scrollable_interactive_match_content_set(Eo *obj EINA_UNUSED,
                                                              Efl_Ui_List_Data *pd,
@@ -991,33 +930,6 @@ _efl_ui_list_efl_ui_scrollable_interactive_match_content_set(Eo *obj EINA_UNUSED
 }
 
 EOLIAN static void
-_efl_ui_list_efl_ui_scrollbar_bar_mode_set(Eo *obj EINA_UNUSED,
-                                           Efl_Ui_List_Data *pd,
-                                           Efl_Ui_Scrollbar_Mode hmode,
-                                           Efl_Ui_Scrollbar_Mode vmode)
-{
-   efl_ui_scrollbar_bar_mode_set(pd->smanager, hmode, vmode);
-}
-
-EOLIAN static void
-_efl_ui_list_efl_ui_scrollbar_bar_mode_get(const Eo *obj EINA_UNUSED,
-                                           Efl_Ui_List_Data *pd,
-                                           Efl_Ui_Scrollbar_Mode *hmode,
-                                           Efl_Ui_Scrollbar_Mode *vmode)
-{
-   efl_ui_scrollbar_bar_mode_get(pd->smanager, hmode, vmode);
-}
-
-EOLIAN static void
-_efl_ui_list_efl_ui_scrollable_interactive_scroll(Eo *obj EINA_UNUSED,
-                                                  Efl_Ui_List_Data *pd,
-                                                  Eina_Rect rc,
-                                                  Eina_Bool animation)
-{
-   efl_ui_scrollable_scroll(pd->smanager, rc, animation);
-}
-
-EOLIAN static void
 _efl_ui_list_efl_ui_multi_selectable_select_mode_set(Eo *obj EINA_UNUSED,
                                                      Efl_Ui_List_Data *pd,
                                                      Efl_Ui_Select_Mode mode)
index f6fb19c..00e60d6 100644 (file)
@@ -78,14 +78,7 @@ class Efl.Ui.List (Efl.Ui.Layout,
       //Efl.Pack.pack_align { get; set; }
 
       //Efl.Ui.Scrollable
-      Efl.Ui.Scrollable_Interactive.scroll;
-      Efl.Ui.Scrollable_Interactive.content_size{ get; }
-      Efl.Ui.Scrollable_Interactive.viewport_geometry{ get; }
-      Efl.Ui.Scrollable_Interactive.bounce_enabled { set; get; }
-      Efl.Ui.Scrollable_Interactive.scroll_freeze { get; set; }
-      Efl.Ui.Scrollable_Interactive.scroll_hold { get; set; }
       Efl.Ui.Scrollable_Interactive.match_content { set; }
-      Efl.Ui.Scrollbar.bar_mode { get; set; }
 
       //Efl.Ui.Multi_Selectable
       Efl.Ui.Multi_Selectable.select_mode {get; set;}
index c6bca8b..69ee9b6 100644 (file)
@@ -111,33 +111,6 @@ _efl_ui_list_view_pan_efl_object_destructor(Eo *obj, Efl_Ui_List_View_Pan_Data *
 
 #include "efl_ui_list_view_pan.eo.c"
 
-EOLIAN static void
-_efl_ui_list_view_efl_ui_scrollable_interactive_content_pos_set(Eo *obj EINA_UNUSED, Efl_Ui_List_View_Data *psd, Eina_Position2D pos)
-{
-   efl_ui_scrollable_content_pos_set(psd->scrl_mgr, pos);
-}
-
-EOLIAN static Eina_Position2D
-_efl_ui_list_view_efl_ui_scrollable_interactive_content_pos_get(const Eo *obj EINA_UNUSED, Efl_Ui_List_View_Data *psd)
-{
-   Eina_Position2D pos = efl_ui_scrollable_content_pos_get(psd->scrl_mgr);
-   return pos;
-}
-
-EOLIAN static Eina_Size2D
-_efl_ui_list_view_efl_ui_scrollable_interactive_content_size_get(const Eo *obj EINA_UNUSED, Efl_Ui_List_View_Data *psd)
-{
-   Eina_Size2D size = efl_ui_scrollable_content_size_get(psd->scrl_mgr);
-   return size;
-}
-
-EOLIAN static Eina_Rect
-_efl_ui_list_view_efl_ui_scrollable_interactive_viewport_geometry_get(const Eo *obj EINA_UNUSED, Efl_Ui_List_View_Data *psd)
-{
-   Eina_Rect gmt = efl_ui_scrollable_viewport_geometry_get(psd->scrl_mgr);
-   return gmt;
-}
-
 static Eina_Bool
 _efl_model_properties_has(Efl_Model *model, Eina_Stringshare *propfind)
 {
@@ -610,6 +583,7 @@ _efl_ui_list_view_efl_canvas_group_group_add(Eo *obj, Efl_Ui_List_View_Data *pd)
 
    pd->scrl_mgr = efl_add(EFL_UI_SCROLL_MANAGER_CLASS, obj,
                             efl_ui_mirrored_set(efl_added, efl_ui_mirrored_get(obj)));
+   efl_composite_attach(obj, pd->scrl_mgr);
    pd->pan_obj = efl_add(MY_PAN_CLASS, obj);
    pan_data = efl_data_scope_get(pd->pan_obj, MY_PAN_CLASS);
    pan_data->wobj = obj;
index aec3a58..971a018 100644 (file)
@@ -83,9 +83,6 @@ class Efl.Ui.List_View (Efl.Ui.Layout, Efl.Ui.Scrollable_Interactive, Efl.Ui.Scr
       Efl.Ui.Focus.Composition.prepare;
       Efl.Ui.View.model { get; set; }
 
-      Efl.Ui.Scrollable_Interactive.viewport_geometry { get; }
-      Efl.Ui.Scrollable_Interactive.content_pos { get; set; }
-      Efl.Ui.Scrollable_Interactive.content_size { get; }
 //      Efl.Ui.Scrollable_Interactive.scroll;
       Efl.Layout.Signal.signal_callback_add;
       Efl.Layout.Signal.signal_callback_del;
index 8ad0466..0c750ef 100644 (file)
@@ -406,6 +406,7 @@ _efl_ui_scroller_efl_object_finalize(Eo *obj,
 
    sd->smanager = efl_add(EFL_UI_SCROLL_MANAGER_CLASS, obj);
    efl_ui_mirrored_set(sd->smanager, efl_ui_mirrored_get(obj));
+   efl_composite_attach(obj, sd->smanager);
 
    sd->pan_obj = efl_add(EFL_UI_PAN_CLASS, obj);
 
@@ -527,68 +528,6 @@ _efl_ui_scroller_efl_ui_widget_theme_apply(Eo *obj, Efl_Ui_Scroller_Data *sd)
    return int_ret;
 }
 
-EOLIAN static Eina_Size2D
-_efl_ui_scroller_efl_ui_scrollable_interactive_content_size_get(const Eo *obj EINA_UNUSED,
-                                                            Efl_Ui_Scroller_Data *sd)
-{
-   return efl_ui_scrollable_content_size_get(sd->smanager);
-}
-
-EOLIAN static Eina_Rect
-_efl_ui_scroller_efl_ui_scrollable_interactive_viewport_geometry_get(const Eo *obj EINA_UNUSED,
-                                                                 Efl_Ui_Scroller_Data *sd)
-{
-   return efl_ui_scrollable_viewport_geometry_get(sd->smanager);
-}
-
-EOLIAN static void
-_efl_ui_scroller_efl_ui_scrollable_interactive_bounce_enabled_set(Eo *obj EINA_UNUSED,
-                                                              Efl_Ui_Scroller_Data *sd,
-                                                              Eina_Bool horiz,
-                                                              Eina_Bool vert)
-{
-   efl_ui_scrollable_bounce_enabled_set(sd->smanager, horiz, vert);
-}
-
-EOLIAN static void
-_efl_ui_scroller_efl_ui_scrollable_interactive_bounce_enabled_get(const Eo *obj EINA_UNUSED,
-                                                                  Efl_Ui_Scroller_Data *sd,
-                                                                  Eina_Bool *horiz,
-                                                                  Eina_Bool *vert)
-{
-   efl_ui_scrollable_bounce_enabled_get(sd->smanager, horiz, vert);
-}
-
-EOLIAN static Eina_Bool
-_efl_ui_scroller_efl_ui_scrollable_interactive_scroll_hold_get(const Eo *obj EINA_UNUSED,
-                                                               Efl_Ui_Scroller_Data *sd)
-{
-   return efl_ui_scrollable_scroll_hold_get(sd->smanager);
-}
-
-EOLIAN static void
-_efl_ui_scroller_efl_ui_scrollable_interactive_scroll_hold_set(Eo *obj EINA_UNUSED,
-                                                               Efl_Ui_Scroller_Data *sd,
-                                                               Eina_Bool hold)
-{
-   efl_ui_scrollable_scroll_hold_set(sd->smanager, hold);
-}
-
-EOLIAN static Eina_Bool
-_efl_ui_scroller_efl_ui_scrollable_interactive_scroll_freeze_get(const Eo *obj EINA_UNUSED,
-                                                                 Efl_Ui_Scroller_Data *sd)
-{
-   return efl_ui_scrollable_scroll_freeze_get(sd->smanager);
-}
-
-EOLIAN static void
-_efl_ui_scroller_efl_ui_scrollable_interactive_scroll_freeze_set(Eo *obj EINA_UNUSED,
-                                                                 Efl_Ui_Scroller_Data *sd,
-                                                                 Eina_Bool freeze)
-{
-   efl_ui_scrollable_scroll_freeze_set(sd->smanager, freeze);
-}
-
 EOLIAN static void
 _efl_ui_scroller_efl_ui_scrollable_interactive_match_content_set(Eo *obj EINA_UNUSED,
                                                                  Efl_Ui_Scroller_Data *sd,
@@ -603,33 +542,6 @@ _efl_ui_scroller_efl_ui_scrollable_interactive_match_content_set(Eo *obj EINA_UN
    elm_layout_sizing_eval(obj);
 }
 
-EOLIAN static void
-_efl_ui_scroller_efl_ui_scrollbar_bar_mode_set(Eo *obj EINA_UNUSED,
-                                           Efl_Ui_Scroller_Data *sd,
-                                           Efl_Ui_Scrollbar_Mode hmode,
-                                           Efl_Ui_Scrollbar_Mode vmode)
-{
-   efl_ui_scrollbar_bar_mode_set(sd->smanager, hmode, vmode);
-}
-
-EOLIAN static void
-_efl_ui_scroller_efl_ui_scrollbar_bar_mode_get(const Eo *obj EINA_UNUSED,
-                                           Efl_Ui_Scroller_Data *sd,
-                                           Efl_Ui_Scrollbar_Mode *hmode,
-                                           Efl_Ui_Scrollbar_Mode *vmode)
-{
-   efl_ui_scrollbar_bar_mode_get(sd->smanager, hmode, vmode);
-}
-
-EOLIAN static void
-_efl_ui_scroller_efl_ui_scrollable_interactive_scroll(Eo *obj EINA_UNUSED,
-                                                      Efl_Ui_Scroller_Data *sd,
-                                                      Eina_Rect rc,
-                                                      Eina_Bool animation)
-{
-   efl_ui_scrollable_scroll(sd->smanager, rc, animation);
-}
-
 /* Internal EO APIs and hidden overrides */
 
 #define EFL_UI_SCROLLER_EXTRA_OPS \
index 8444294..c037fe7 100644 (file)
@@ -10,13 +10,6 @@ class Efl.Ui.Scroller (Efl.Ui.Layout,
       Efl.Object.destructor;
       Efl.Content.content { set; }
       Efl.Ui.Widget.theme_apply;
-      Efl.Ui.Scrollable_Interactive.content_size{ get; }
-      Efl.Ui.Scrollable_Interactive.viewport_geometry{ get; }
-      Efl.Ui.Scrollable_Interactive.bounce_enabled { set; get; }
-      Efl.Ui.Scrollable_Interactive.scroll_freeze { get; set; }
-      Efl.Ui.Scrollable_Interactive.scroll_hold { get; set; }
       Efl.Ui.Scrollable_Interactive.match_content { set; }
-      Efl.Ui.Scrollbar.bar_mode { get; set; }
-      Efl.Ui.Scrollable_Interactive.scroll;
    }
 }
index f2d6d13..84b066d 100644 (file)
@@ -3826,9 +3826,19 @@ _efl_ui_widget_show_region_set(Eo *obj, Elm_Widget_Smart_Data *sd, Eina_Rect sr,
 
         if (_elm_scrollable_is(obj))
           {
-             elm_interface_scrollable_content_pos_get(obj, &nx, &ny);
-             sr.x -= nx;
-             sr.y -= ny;
+             if (elm_widget_is_legacy(obj))
+               {
+                  elm_interface_scrollable_content_pos_get(obj, &nx, &ny);
+                  sr.x -= nx;
+                  sr.y -= ny;
+               }
+             else
+               {
+                  Eina_Position2D pos;
+                  pos = efl_ui_scrollable_content_pos_get(obj);
+                  sr.x -= pos.x;
+                  sr.y -= pos.y;
+               }
           }
      }