From: Jae Hwan Kim <jae.hwan.kim@samsung.com>
authorraster <raster@7cbeb6ba-43b4-40fd-8cce-4c39aea84d33>
Mon, 31 Jan 2011 10:00:49 +0000 (10:00 +0000)
committerraster <raster@7cbeb6ba-43b4-40fd-8cce-4c39aea84d33>
Mon, 31 Jan 2011 10:00:49 +0000 (10:00 +0000)
Subject: [E-devel] [Patch] els_scroller -
elm_smart_scroller_child_region_show

I have some issue in scroller.
Sometimes the scroller move to wrong region when the child get first
focus.
It use "scroller -> layout -> button".
So I checked the code and found a suspected thing in
elm_smart_scroller_child_region_show.
Please refer following pictures.

In the pictures, the rect which be written "x, y, w, h" is the area
which be made with the parameters of
"elm_smart_scroller_child_region_show".
The rect which be written "Pan" is the pan area of the scroller.

If the situation is 1) or 2) and the function is called, the result
have to be 7).
In case of 3) or 4), it have to be 8).
In case of 5) or 6), it have to remain as it is.
Is it right??

But if the situation is 6) and the function is called, the result will
be 7) in current code.
I think it is wrong.
I attached patch code. please find it below the pictures.

1)
    ---------------
    |                    |
    |   x, y, w, h   |
    |                    |
    ---------------
---------------------
|                             |
|                             |
|                             |
|            Pan           |
|                             |
|                             |
|                             |
---------------------

2)
    ---------------
    |                    |
    |   x, y, w, h   |
---------------------
|   |                    |   |
|   ---------------   |
|                             |
|            Pan           |
|                             |
|                             |
|                             |
---------------------

3)
---------------------
|                             |
|                             |
|                             |
|            Pan           |
|                             |
|   ---------------   |
|   |                   |    |
---------------------
    |   x, y, w, h   |
    |                    |
    ---------------

4)
---------------------
|                             |
|                             |
|                             |
|            Pan           |
|                             |
|                             |
|                             |
---------------------
    ---------------
    |                    |
    |   x, y, w, h   |
    |                    |
    ---------------

5)
---------------------
|                             |
|   ---------------   |
|   |                    |   |
|   |   x, y, w, h   |   |
|   |                    |   |
|   ---------------   |
|            Pan           |
---------------------

6)
    ---------------
    |                    |
---------------------     <---Pan
|   |                   |    |
|   |   x, y, w, h  |    |
|   |                   |    |
---------------------
    |                    |
    ---------------

7)
---------------------
|   |                    |   |
|   |   x, y, w, h   |   |
|   |                    |   |
|   ---------------   |
|                             |
|            Pan           |
|                             |
---------------------

8)
---------------------
|                             |
|            Pan           |
|                             |
|   ---------------   |
|   |                    |   |
|   |   x, y, w, h   |   |
|   |                    |   |
---------------------

git-svn-id: svn+ssh://svn.enlightenment.org/var/svn/e/trunk/elementary@56579 7cbeb6ba-43b4-40fd-8cce-4c39aea84d33

src/lib/els_scroller.c

index 85d002e..6a5a34d 100644 (file)
@@ -1213,19 +1213,11 @@ elm_smart_scroller_region_bring_in(Evas_Object *obj, Evas_Coord x, Evas_Coord y,
    sd->pan_func.get(sd->pan_obj, &px, &py);
 
    nx = px;
-   if (x < px) nx = x;
-   else if ((x + w) > (px + (cw - mx)))
-     {
-       nx = x + w - (cw - mx);
-       if (nx > x) nx = x;
-     }
+   if ((x < px) && ((x + w) < (px + (cw - mx)))) nx = x;
+   else if ((x > px) && ((x + w) > (px + (cw - mx)))) nx = x + w - (cw - mx);
    ny = py;
-   if (y < py) ny = y;
-   else if ((y + h) > (py + (ch - my)))
-     {
-       ny = y + h - (ch - my);
-       if (ny > y) ny = y;
-     }
+   if ((y < py) && ((y + h) < (py + (ch - my)))) ny = y;
+   else if ((y > py) && ((y + h) > (py + (ch - my)))) ny = y + h - (ch - my);
    if ((nx == px) && (ny == py)) return;
    if ((sd->down.bounce_x_animator) || (sd->down.bounce_y_animator) ||
        (sd->scrollto.x.animator) || (sd->scrollto.y.animator))