diff options
author | Soeren Sandmann <sandmann@daimi.au.dk> | 2004-02-29 18:21:57 +0000 |
---|---|---|
committer | Søren Sandmann Pedersen <ssp@src.gnome.org> | 2004-02-29 18:21:57 +0000 |
commit | 41dfb5ec46ee3785a2cf1ae3a8919c49b9b5ee70 (patch) | |
tree | 9afe2267e10ee1064511b88db0c14070fe32e3ea /gtk/gtkrange.c | |
parent | fc29c1a2fb70a70ff494e4e3b2bb11be7b5816dc (diff) | |
download | gtk+-41dfb5ec46ee3785a2cf1ae3a8919c49b9b5ee70.tar.gz |
New internal function returning a good step value for the mouse wheel. For
Sun Feb 29 19:04:33 2004 Soeren Sandmann <sandmann@daimi.au.dk>
* gtk/gtkrange.c (_gtk_range_get_wheel_delta): New internal
function returning a good step value for the mouse wheel. For
scrollbars, base the step on page_size^(2/3), for other ranges,
use 2 * step_increment.
* gtk/gtkrange.c (gtk_range_scroll_event): Use it here ...
* gtk/gtkscrolledwindow.c (gtk_scrolled_window_scroll_event):
... and here.
* gtk/gtkmenu.c (gtk_menu_leave_notify): Fix a warning.
Diffstat (limited to 'gtk/gtkrange.c')
-rw-r--r-- | gtk/gtkrange.c | 48 |
1 files changed, 39 insertions, 9 deletions
diff --git a/gtk/gtkrange.c b/gtk/gtkrange.c index d277de8f18..88520c91eb 100644 --- a/gtk/gtkrange.c +++ b/gtk/gtkrange.c @@ -26,11 +26,13 @@ */ #include <stdio.h> +#include <math.h> #include "gtkintl.h" #include "gtkmain.h" #include "gtkmarshalers.h" #include "gtkrange.h" #include "gtkintl.h" +#include "gtkscrollbar.h" #define SCROLL_INITIAL_DELAY 250 /* must hold button this long before ... */ #define SCROLL_LATER_DELAY 100 /* ... it starts repeating at this rate */ @@ -1364,6 +1366,39 @@ gtk_range_button_release (GtkWidget *widget, return FALSE; } +/** + * _gtk_range_get_wheel_delta: + * @range: a #GtkRange + * @direction: A #GdkScrollDirection + * + * Returns a good step value for the mouse wheel. + * + * Return value: A good step value for the mouse wheel. + * + * Since: 2.4 + **/ +gdouble +_gtk_range_get_wheel_delta (GtkRange *range, + GdkScrollDirection direction) +{ + GtkAdjustment *adj = range->adjustment; + gdouble delta; + + if (GTK_IS_SCROLLBAR (range)) + delta = pow (adj->page_size, 2.0 / 3.0); + else + delta = adj->step_increment * 2; + + if (direction == GDK_SCROLL_UP || + direction == GDK_SCROLL_LEFT) + delta = - delta; + + if (range->inverted) + delta = - delta; + + return delta; +} + static gint gtk_range_scroll_event (GtkWidget *widget, GdkEventScroll *event) @@ -1373,16 +1408,11 @@ gtk_range_scroll_event (GtkWidget *widget, if (GTK_WIDGET_REALIZED (range)) { GtkAdjustment *adj = GTK_RANGE (range)->adjustment; - gdouble increment = ((event->direction == GDK_SCROLL_UP || - event->direction == GDK_SCROLL_LEFT) ? - -adj->page_increment / 2: - adj->page_increment / 2); - - if (range->inverted) - increment = -increment; - - gtk_range_internal_set_value (range, adj->value + increment); + gdouble delta; + delta = _gtk_range_get_wheel_delta (range, event->direction); + gtk_range_internal_set_value (range, adj->value + delta); + /* Policy DELAYED makes sense with scroll events, * but DISCONTINUOUS doesn't, so we update immediately * for DISCONTINUOUS |