When the scroller is holded and scrolled, it can be jump.
authorjaehwan <jaehwan@7cbeb6ba-43b4-40fd-8cce-4c39aea84d33>
Mon, 26 Mar 2012 10:05:26 +0000 (10:05 +0000)
committerjaehwan <jaehwan@7cbeb6ba-43b4-40fd-8cce-4c39aea84d33>
Mon, 26 Mar 2012 10:05:26 +0000 (10:05 +0000)
The squence is hold push -> mouse down -> mouse move -> hold pop -> mouse move continuously.
After upper sequence, the scroller will jump. So I fixed this issue.

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

src/lib/els_scroller.c

index 08ba71a..bb26075 100644 (file)
@@ -70,6 +70,7 @@ struct _Smart_Data
       Eina_Bool bounce_x_hold : 1;
       Eina_Bool bounce_y_hold : 1;
       Eina_Bool scroll : 1;
+      Eina_Bool want_reset : 1;
    } down;
 
    struct {
@@ -1774,6 +1775,10 @@ _smart_event_mouse_down(void *data, Evas *e __UNUSED__, Evas_Object *obj __UNUSE
         sd->down.dragged_began = EINA_FALSE;
         sd->down.hold_parent = EINA_FALSE;
         sd->down.cancelled = EINA_FALSE;
+        if(sd->hold || sd->freeze)
+           sd->down.want_reset = EINA_TRUE;
+        else
+           sd->down.want_reset = EINA_FALSE;
      }
 }
 
@@ -2392,6 +2397,12 @@ _smart_event_mouse_move(void *data, Evas *e, Evas_Object *obj __UNUSED__, void *
                          y = sd->down.sy - (ev->cur.canvas.y - sd->down.y);
                        else
                          y = sd->down.sy;
+                       if(sd->down.want_reset)
+                         {
+                            sd->down.x = ev->cur.canvas.x;
+                            sd->down.y = ev->cur.canvas.y;
+                            sd->down.want_reset = EINA_FALSE;
+                         }
                        if ((sd->down.dir_x) || (sd->down.dir_y))
                          {
                             if (!sd->down.locked)