[gtk/wip/carlosg/scroll-overshoot] gtk/scrolledwindow: Check for overshoot setting up kinetic scroll helpers




commit 9502813356566be535d08ca8db58e0e37dfbaa68
Author: Carlos Garnacho <carlosg gnome org>
Date:   Fri Jul 29 20:34:55 2022 +0200

    gtk/scrolledwindow: Check for overshoot setting up kinetic scroll helpers
    
    We may have situations where velocity is 0/0, but are overshooting. Places where
    this happens are mouse wheels, and continuous scroll that ended up still before
    finish. In this situation we also want to run the animation for overshoot, so
    check for the corresponding axes to also set up the kinetic scroll helper.
    
    Closes: https://gitlab.gnome.org/GNOME/gtk/-/issues/5069

 gtk/gtkscrolledwindow.c | 7 +++++--
 1 file changed, 5 insertions(+), 2 deletions(-)
---
diff --git a/gtk/gtkscrolledwindow.c b/gtk/gtkscrolledwindow.c
index d2768d3ae0..aa0d23b128 100644
--- a/gtk/gtkscrolledwindow.c
+++ b/gtk/gtkscrolledwindow.c
@@ -3326,6 +3326,7 @@ gtk_scrolled_window_start_deceleration (GtkScrolledWindow *scrolled_window)
   GdkFrameClock *frame_clock;
   gint64 current_time;
   double elapsed;
+  int overshoot_x, overshoot_y;
 
   g_return_if_fail (priv->deceleration_id == 0);
 
@@ -3335,6 +3336,8 @@ gtk_scrolled_window_start_deceleration (GtkScrolledWindow *scrolled_window)
   elapsed = (current_time - priv->last_deceleration_time) / (double)G_TIME_SPAN_SECOND;
   priv->last_deceleration_time = current_time;
 
+  _gtk_scrolled_window_get_overshoot (scrolled_window, &overshoot_x, &overshoot_y);
+
   if (may_hscroll (scrolled_window))
     {
       double lower,upper;
@@ -3343,7 +3346,7 @@ gtk_scrolled_window_start_deceleration (GtkScrolledWindow *scrolled_window)
       gtk_scrolled_window_accumulate_velocity (&priv->hscrolling, elapsed, &priv->x_velocity);
       g_clear_pointer (&priv->hscrolling, gtk_kinetic_scrolling_free);
 
-      if (priv->x_velocity != 0)
+      if (priv->x_velocity != 0 || overshoot_x != 0)
         {
           hadjustment = gtk_scrollbar_get_adjustment (GTK_SCROLLBAR (priv->hscrollbar));
           lower = gtk_adjustment_get_lower (hadjustment);
@@ -3370,7 +3373,7 @@ gtk_scrolled_window_start_deceleration (GtkScrolledWindow *scrolled_window)
       gtk_scrolled_window_accumulate_velocity (&priv->vscrolling, elapsed, &priv->y_velocity);
       g_clear_pointer (&priv->vscrolling, gtk_kinetic_scrolling_free);
 
-      if (priv->y_velocity != 0)
+      if (priv->y_velocity != 0 || overshoot_y != 0)
         {
           vadjustment = gtk_scrollbar_get_adjustment (GTK_SCROLLBAR (priv->vscrollbar));
           lower = gtk_adjustment_get_lower(vadjustment);


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