Hello all,

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. 
Please check it.

Thanks.

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

Patch Code
----------------------------------------------------------------------------------

Index: src/lib/els_scroller.c
===================================================================
--- src/lib/els_scroller.c      (revision 56235)
+++ src/lib/els_scroller.c      (working copy)
@@ -928,19 +928,11 @@ elm_smart_scroller_child_region_show(Evas_Object *
    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))

------------------------------------------------------------------------------
Protect Your Site and Customers from Malware Attacks
Learn about various malware tactics and how to avoid them. Understand 
malware threats, the impact they can have on your business, and how you 
can protect your company and customers by using code signing.
http://p.sf.net/sfu/oracle-sfdevnl
_______________________________________________
enlightenment-devel mailing list
enlightenment-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/enlightenment-devel

Reply via email to