[gtk/wip/carlosg/scroll-overshoot] gtk/scrolledwindow: Check for overshoot setting up kinetic scroll helpers
- From: Carlos Garnacho <carlosg src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gtk/wip/carlosg/scroll-overshoot] gtk/scrolledwindow: Check for overshoot setting up kinetic scroll helpers
- Date: Fri, 29 Jul 2022 18:41:55 +0000 (UTC)
commit 4ea8dd8f431d5f56b85f53f80190c8d4c6043663
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 | 8 ++++++--
1 file changed, 6 insertions(+), 2 deletions(-)
---
diff --git a/gtk/gtkscrolledwindow.c b/gtk/gtkscrolledwindow.c
index d2768d3ae0..ec2fcea1bf 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,9 @@ 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;
+ if (!_gtk_scrolled_window_get_overshoot (scrolled_window, &overshoot_x, &overshoot_y))
+ return;
+
if (may_hscroll (scrolled_window))
{
double lower,upper;
@@ -3343,7 +3347,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 +3374,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]