diff options
author | Matthias Clasen <mclasen@redhat.com> | 2012-03-04 19:20:10 -0500 |
---|---|---|
committer | Matthias Clasen <mclasen@redhat.com> | 2012-03-04 19:20:10 -0500 |
commit | ab87579e3f7c63ab7b48b535c0aaae959b47882b (patch) | |
tree | ff6d7f15290e3a37ad3ebfa247c3a0244ce47e52 /gtk/gtkscrolledwindow.c | |
parent | 5714454a736794dbe8aa61ab4258e73ea8a98595 (diff) | |
download | gtk+-ab87579e3f7c63ab7b48b535c0aaae959b47882b.tar.gz |
scrolledwindow: Fix scroll event handling
Rewrite the code that deals with smooth scroll events to
be in terms of 'scroll units' as well.
Diffstat (limited to 'gtk/gtkscrolledwindow.c')
-rw-r--r-- | gtk/gtkscrolledwindow.c | 17 |
1 files changed, 13 insertions, 4 deletions
diff --git a/gtk/gtkscrolledwindow.c b/gtk/gtkscrolledwindow.c index dd4b71f9ca..3ebc02a0f8 100644 --- a/gtk/gtkscrolledwindow.c +++ b/gtk/gtkscrolledwindow.c @@ -2252,9 +2252,10 @@ gtk_scrolled_window_scroll_event (GtkWidget *widget, gboolean handled = FALSE; gdouble delta_x; gdouble delta_y; + gdouble delta; g_return_val_if_fail (GTK_IS_SCROLLED_WINDOW (widget), FALSE); - g_return_val_if_fail (event != NULL, FALSE); + g_return_val_if_fail (event != NULL, FALSE); scrolled_window = GTK_SCROLLED_WINDOW (widget); priv = scrolled_window->priv; @@ -2266,10 +2267,14 @@ gtk_scrolled_window_scroll_event (GtkWidget *widget, { GtkAdjustment *adj; gdouble new_value; + gdouble page_size; + gdouble scroll_unit; adj = gtk_range_get_adjustment (GTK_RANGE (priv->hscrollbar)); + page_size = gtk_adjustment_get_page_size (adj); + scroll_unit = pow (page_size, 2.0 / 3.0); - new_value = CLAMP (gtk_adjustment_get_value (adj) + delta_x, + new_value = CLAMP (gtk_adjustment_get_value (adj) + delta_x * scroll_unit, gtk_adjustment_get_lower (adj), gtk_adjustment_get_upper (adj) - gtk_adjustment_get_page_size (adj)); @@ -2284,10 +2289,14 @@ gtk_scrolled_window_scroll_event (GtkWidget *widget, { GtkAdjustment *adj; gdouble new_value; + gdouble page_size; + gdouble scroll_unit; adj = gtk_range_get_adjustment (GTK_RANGE (priv->vscrollbar)); + page_size = gtk_adjustment_get_page_size (adj); + scroll_unit = pow (page_size, 2.0 / 3.0); - new_value = CLAMP (gtk_adjustment_get_value (adj) + delta_y, + new_value = CLAMP (gtk_adjustment_get_value (adj) + delta_y * scroll_unit, gtk_adjustment_get_lower (adj), gtk_adjustment_get_upper (adj) - gtk_adjustment_get_page_size (adj)); @@ -2309,7 +2318,7 @@ gtk_scrolled_window_scroll_event (GtkWidget *widget, if (range && gtk_widget_get_visible (range)) { GtkAdjustment *adj = gtk_range_get_adjustment (GTK_RANGE (range)); - gdouble delta, new_value; + gdouble new_value; delta = _gtk_range_get_wheel_delta (GTK_RANGE (range), event); |