[gtk+] kineticscrolling: avoid stutter at tail of kinetic deceleration



commit 4f63d839550f7a9038b391e7d3e1e6fc8bdfafa6
Author: Christian Hergert <chergert redhat com>
Date:   Sun Apr 24 02:41:26 2016 -0700

    kineticscrolling: avoid stutter at tail of kinetic deceleration
    
    When decelerating the kinetic scroll, we can get into a position where it
    looks like we are stuttering. This happens because the amount we move is
    so little that it takes multiple frames to make forward progress by one
    pixel.
    
    This prevents that by detecting when we have reached the slow stutter of
    the deceleration and simply stops the deceleration phase immediately.
    
    https://bugzilla.gnome.org/show_bug.cgi?id=765493

 gtk/gtkkineticscrolling.c |    5 ++++-
 1 files changed, 4 insertions(+), 1 deletions(-)
---
diff --git a/gtk/gtkkineticscrolling.c b/gtk/gtkkineticscrolling.c
index c33faee..29bf085 100644
--- a/gtk/gtkkineticscrolling.c
+++ b/gtk/gtkkineticscrolling.c
@@ -152,6 +152,8 @@ gtk_kinetic_scrolling_tick (GtkKineticScrolling *data,
     {
     case GTK_KINETIC_SCROLLING_PHASE_DECELERATING:
       {
+        gdouble last_position = data->position;
+        gdouble last_time = data->t;
         gdouble exp_part;
 
         data->t += time_delta;
@@ -168,7 +170,8 @@ gtk_kinetic_scrolling_tick (GtkKineticScrolling *data,
           {
             gtk_kinetic_scrolling_init_overshoot(data, data->upper, data->position, data->velocity);
           }
-        else if (fabs(data->velocity) < 1)
+        else if (fabs(data->velocity) < 1 ||
+                 (last_time != 0.0 && fabs(data->position - last_position) < 1))
           {
             data->phase = GTK_KINETIC_SCROLLING_PHASE_FINISHED;
             data->position = round(data->position);


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]