range: Straighten the wheel delta calculation
Scroll events report normalized deltas in terms of an abstract 'scroll unit' now, so our job is to determine a suitable scroll unit here. Since we are changing the value of the adjustment, the allocation of the widget does not factor into this at all.
This commit is contained in:
parent
3dd5e88c07
commit
5714454a73
@ -2788,11 +2788,11 @@ gtk_range_button_release (GtkWidget *widget,
|
|||||||
* _gtk_range_get_wheel_delta:
|
* _gtk_range_get_wheel_delta:
|
||||||
* @range: a #GtkRange
|
* @range: a #GtkRange
|
||||||
* @event: A #GdkEventScroll
|
* @event: A #GdkEventScroll
|
||||||
*
|
*
|
||||||
* Returns a good step value for the mouse wheel.
|
* Returns a good step value for the mouse wheel.
|
||||||
*
|
*
|
||||||
* Return value: A good step value for the mouse wheel.
|
* Return value: A good step value for the mouse wheel.
|
||||||
*
|
*
|
||||||
* Since: 2.4
|
* Since: 2.4
|
||||||
**/
|
**/
|
||||||
gdouble
|
gdouble
|
||||||
@ -2804,49 +2804,32 @@ _gtk_range_get_wheel_delta (GtkRange *range,
|
|||||||
gdouble dx, dy;
|
gdouble dx, dy;
|
||||||
gdouble delta;
|
gdouble delta;
|
||||||
gdouble page_size;
|
gdouble page_size;
|
||||||
gdouble size;
|
gdouble page_increment;
|
||||||
|
gdouble scroll_unit;
|
||||||
|
|
||||||
page_size = gtk_adjustment_get_page_size (adjustment);
|
page_size = gtk_adjustment_get_page_size (adjustment);
|
||||||
|
page_increment = gtk_adjustment_get_page_increment (adjustment);
|
||||||
|
|
||||||
|
if (GTK_IS_SCROLLBAR (range))
|
||||||
|
scroll_unit = pow (page_size, 2.0 / 3.0);
|
||||||
|
else
|
||||||
|
scroll_unit = page_increment;
|
||||||
|
|
||||||
if (gdk_event_get_scroll_deltas ((GdkEvent *) event, &dx, &dy))
|
if (gdk_event_get_scroll_deltas ((GdkEvent *) event, &dx, &dy))
|
||||||
{
|
{
|
||||||
GtkAllocation allocation;
|
|
||||||
|
|
||||||
gtk_widget_get_allocation (GTK_WIDGET (range), &allocation);
|
|
||||||
|
|
||||||
if (gtk_orientable_get_orientation (GTK_ORIENTABLE (range)) == GTK_ORIENTATION_HORIZONTAL)
|
|
||||||
size = allocation.width;
|
|
||||||
else
|
|
||||||
size = allocation.height;
|
|
||||||
|
|
||||||
if (dx != 0 &&
|
if (dx != 0 &&
|
||||||
gtk_orientable_get_orientation (GTK_ORIENTABLE (range)) == GTK_ORIENTATION_HORIZONTAL)
|
gtk_orientable_get_orientation (GTK_ORIENTABLE (range)) == GTK_ORIENTATION_HORIZONTAL)
|
||||||
{
|
delta = dx * scroll_unit;
|
||||||
if (GTK_IS_SCROLLBAR (range) && page_size > 0)
|
|
||||||
delta = dx * page_size / size;
|
|
||||||
else
|
|
||||||
delta = dx * (gtk_adjustment_get_upper (adjustment) -
|
|
||||||
gtk_adjustment_get_lower (adjustment)) / size;
|
|
||||||
}
|
|
||||||
else
|
else
|
||||||
{
|
delta = dy * scroll_unit;
|
||||||
if (GTK_IS_SCROLLBAR (range) && page_size > 0)
|
|
||||||
delta = dy * page_size / size;
|
|
||||||
else
|
|
||||||
delta = dy * (gtk_adjustment_get_upper (adjustment) -
|
|
||||||
gtk_adjustment_get_lower (adjustment)) / size;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if (GTK_IS_SCROLLBAR (range))
|
|
||||||
delta = pow (page_size, 2.0 / 3.0);
|
|
||||||
else
|
|
||||||
delta = gtk_adjustment_get_page_increment (adjustment) * 2;
|
|
||||||
|
|
||||||
if (event->direction == GDK_SCROLL_UP ||
|
if (event->direction == GDK_SCROLL_UP ||
|
||||||
event->direction == GDK_SCROLL_LEFT)
|
event->direction == GDK_SCROLL_LEFT)
|
||||||
delta = - delta;
|
delta = - scroll_unit;
|
||||||
|
else
|
||||||
|
delta = scroll_unit;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (priv->inverted)
|
if (priv->inverted)
|
||||||
|
Loading…
Reference in New Issue
Block a user