From: Jae Hwan Kim <jae.hwan.kim@samsung.com>

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   |   |
|   |                    |   |
---------------------
                                     


SVN revision: 56579
This commit is contained in:
Jae Hwan Kim 2011-01-31 10:00:49 +00:00 committed by Carsten Haitzler
parent 4c33d6b63e
commit 1bfd549a08
1 changed files with 4 additions and 12 deletions

View 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))