interface_scrollable: Optimize calculations and remove redundant 56/115456/1
authorWonki Kim <wonki_.kim@samsung.com>
Mon, 20 Feb 2017 04:26:21 +0000 (13:26 +0900)
committerWonki Kim <wonki_.kim@samsung.com>
Mon, 20 Feb 2017 04:26:21 +0000 (13:26 +0900)
Summary:
There are some redundant code blocks, unnessacery recursive logics
for interface_scrollable.

This commit removes redundant code blocks and serializes unnessacery
recursive logics

Test Plan:
 1. Run efl application
 2. Check that app works properly.
 2. Check how many pan_changed_cb calls are reduced.

Reviewers: cedric, jpeg, woohyun, herdsman

Subscribers: jsuya, eagleeye, z-wony

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

Change-Id: I1470d8aa942fce1342ef5a20201a1ad9b69e1281
Signed-off-by: Wonki Kim <wonki_.kim@samsung.com>
src/lib/elm_interface_scrollable.c
src/lib/elm_interface_scrollable.h

index 9f4a4e34b64e1d14ae6f20b84bb523491145577f..ee5aa357079013fbd4e0b65ad77706cec8963c06 100644 (file)
@@ -885,17 +885,12 @@ _elm_scroll_scroll_bar_size_adjust(Elm_Scrollable_Smart_Interface_Data *sid)
 //
 //This function adjusts the size of the bar.
 static void
-_elm_scroll_scroll_bar_size_adjust(Elm_Scrollable_Smart_Interface_Data *sid)
+_elm_scroll_scroll_bar_size_adjust_internal(Elm_Scrollable_Smart_Interface_Data *sid)
 {
    if (!sid->pan_obj || !sid->edje_obj) return;
 
-   if (sid->size_adjust_recurse_abort) return;
-   if (sid->size_adjust_recurse > 20)
-     {
-        sid->size_adjust_recurse_abort = EINA_TRUE;
-        return;
-     }
-   sid->size_adjust_recurse++;
+   sid->adjust_job.bar_size_adjust = NULL;
+
    if ((sid->content) || (sid->extern_pan))
      {
         Evas_Coord w, h, vw = 0, vh = 0;
@@ -948,19 +943,26 @@ _elm_scroll_scroll_bar_size_adjust(Elm_Scrollable_Smart_Interface_Data *sid)
           (sid->edje_obj, "elm.dragable.hbar", 1.0, 1.0);
      }
    _elm_scroll_scroll_bar_visibility_adjust(sid);
-   sid->size_adjust_recurse--;
-   if (sid->size_adjust_recurse <= 0)
-     {
-        sid->size_adjust_recurse = 0;
-        sid->size_adjust_recurse_abort = EINA_FALSE;
-     }
 }
+
+static void
+_elm_scroll_scroll_bar_size_adjust(Elm_Scrollable_Smart_Interface_Data *sid)
+{
+   if (!sid->pan_obj || !sid->edje_obj) return;
+
+   if (!sid->adjust_job.bar_size_adjust)
+     sid->adjust_job.bar_size_adjust
+       = ecore_job_add(_elm_scroll_scroll_bar_size_adjust_internal, sid);
+}
+
 //This function adjusts the position of the bar.
 static void
-_elm_scroll_scroll_bar_pos_adjust(Elm_Scrollable_Smart_Interface_Data *sid)
+_elm_scroll_scroll_bar_pos_adjust_internal(Elm_Scrollable_Smart_Interface_Data *sid)
 {
    if (!sid->pan_obj || !sid->edje_obj) return;
 
+   sid->adjust_job.bar_pos_adjust = NULL;
+
    if ((sid->content) || (sid->extern_pan))
      {
         Evas_Coord x, y, w, h, mx = 0, my = 0, vw = 0, vh = 0,
@@ -1024,6 +1026,18 @@ _elm_scroll_scroll_bar_pos_adjust(Elm_Scrollable_Smart_Interface_Data *sid)
           edje_object_signal_emit(sid->edje_obj, "elm,action,scroll", "elm");
      }
 }
+
+static void
+_elm_scroll_scroll_bar_pos_adjust(Elm_Scrollable_Smart_Interface_Data *sid)
+{
+   if (!sid->pan_obj || !sid->edje_obj) return;
+
+   if (!sid->adjust_job.bar_pos_adjust)
+     sid->adjust_job.bar_pos_adjust
+       = ecore_job_add(_elm_scroll_scroll_bar_pos_adjust_internal, sid);
+}
+
+
 //
 
 //TIZEN_ONLY(20150909) : Use the specific bar_chagnged_bar_pos_adjust func only for gengrid.
@@ -4503,20 +4517,6 @@ _elm_scroll_pan_resized_cb(void *data,
 {
    Evas_Coord w = 0, h = 0;
    Elm_Scrollable_Smart_Interface_Data *sid = data;
-   //TIZEN_ONLY(20151013): Check the validity of pan value
-   Evas_Coord pan_x = 0, pan_y = 0, minx = 0, miny = 0, mx = 0, my = 0;
-
-   eo_do(sid->pan_obj, elm_obj_pan_pos_get(&pan_x, &pan_y));
-   eo_do(sid->pan_obj, elm_obj_pan_pos_min_get(&minx, &miny));
-   eo_do(sid->pan_obj, elm_obj_pan_pos_max_get(&mx, &my));
-   if (pan_x < minx) pan_x = minx;
-   else if (pan_x > mx + minx) pan_x = mx + minx;
-
-   if (pan_y < miny) pan_y = miny;
-   else if (pan_y > my + miny) pan_y = my + miny;
-
-   eo_do(sid->pan_obj, elm_obj_pan_pos_set(pan_x, pan_y));
-   //
 
    if (sid->cb_func.content_viewport_resize)
      {
@@ -5283,6 +5283,10 @@ _elm_interface_scrollable_evas_object_smart_del(Eo *obj, Elm_Scrollable_Smart_In
    ecore_animator_del(sid->down.bounce_y_animator);
    ecore_animator_del(sid->scrollto.x.animator);
    ecore_animator_del(sid->scrollto.y.animator);
+
+   ELM_SAFE_FREE(sid->adjust_job.bar_size_adjust, ecore_job_del);
+   ELM_SAFE_FREE(sid->adjust_job.bar_pos_adjust, ecore_job_del);
+   ELM_SAFE_FREE(sid->adjust_job.page_adjust, ecore_job_del);
 }
 
 EOLIAN static void
index bf1f0ce1646db6475e81e29043ac930c1cdad851..ab2543600de97cc61044b7dfb743d35e9f7a8669 100644 (file)
@@ -256,6 +256,13 @@ struct _Elm_Scrollable_Smart_Interface_Data
    Eina_Bool  go_down : 1;
    Eina_Bool  loop_h : 1;
    Eina_Bool  loop_v : 1;
+
+   struct
+   {
+      Ecore_Job *bar_size_adjust;
+      Ecore_Job *bar_pos_adjust;
+      Ecore_Job *page_adjust;
+   } adjust_job;
 };
 
 #define ELM_SCROLLABLE_CHECK(obj, ...)                                       \