scroll-bar: Add smooth scrolling support
Do the same for StScrollBar. https://bugzilla.gnome.org/show_bug.cgi?id=687573
This commit is contained in:
parent
06dc12e217
commit
f162dd7e87
@ -433,42 +433,57 @@ st_scroll_bar_constructor (GType type,
|
|||||||
return obj;
|
return obj;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
adjust_with_direction (StAdjustment *adj,
|
||||||
|
ClutterScrollDirection direction)
|
||||||
|
{
|
||||||
|
gdouble delta;
|
||||||
|
|
||||||
|
switch (direction)
|
||||||
|
{
|
||||||
|
case CLUTTER_SCROLL_UP:
|
||||||
|
case CLUTTER_SCROLL_LEFT:
|
||||||
|
delta = -1.0;
|
||||||
|
break;
|
||||||
|
case CLUTTER_SCROLL_RIGHT:
|
||||||
|
case CLUTTER_SCROLL_DOWN:
|
||||||
|
delta = 1.0;
|
||||||
|
break;
|
||||||
|
case CLUTTER_SCROLL_SMOOTH:
|
||||||
|
g_assert_not_reached ();
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
st_adjustment_adjust_for_scroll_event (adj, delta);
|
||||||
|
}
|
||||||
|
|
||||||
static gboolean
|
static gboolean
|
||||||
st_scroll_bar_scroll_event (ClutterActor *actor,
|
st_scroll_bar_scroll_event (ClutterActor *actor,
|
||||||
ClutterScrollEvent *event)
|
ClutterScrollEvent *event)
|
||||||
{
|
{
|
||||||
StScrollBarPrivate *priv = ST_SCROLL_BAR (actor)->priv;
|
StScrollBarPrivate *priv = ST_SCROLL_BAR (actor)->priv;
|
||||||
gdouble step, value, delta_x, delta_y;
|
|
||||||
|
|
||||||
if (priv->adjustment)
|
if (clutter_event_is_pointer_emulated ((ClutterEvent *) event))
|
||||||
{
|
return TRUE;
|
||||||
g_object_get (priv->adjustment,
|
|
||||||
"step-increment", &step,
|
|
||||||
"value", &value,
|
|
||||||
NULL);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
return FALSE;
|
|
||||||
}
|
|
||||||
|
|
||||||
switch (event->direction)
|
switch (event->direction)
|
||||||
{
|
{
|
||||||
case CLUTTER_SCROLL_SMOOTH:
|
case CLUTTER_SCROLL_SMOOTH:
|
||||||
clutter_event_get_scroll_delta ((ClutterEvent *)event,
|
{
|
||||||
&delta_x, &delta_y);
|
gdouble delta_x, delta_y;
|
||||||
if (fabs (delta_x) > fabs (delta_y))
|
clutter_event_get_scroll_delta ((ClutterEvent *)event, &delta_x, &delta_y);
|
||||||
st_adjustment_set_value (priv->adjustment, value + delta_x);
|
|
||||||
else
|
if (priv->vertical)
|
||||||
st_adjustment_set_value (priv->adjustment, value + delta_y);
|
st_adjustment_adjust_for_scroll_event (priv->adjustment, delta_y);
|
||||||
|
else
|
||||||
|
st_adjustment_adjust_for_scroll_event (priv->adjustment, delta_x);
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
case CLUTTER_SCROLL_UP:
|
case CLUTTER_SCROLL_UP:
|
||||||
case CLUTTER_SCROLL_LEFT:
|
|
||||||
st_adjustment_set_value (priv->adjustment, value - step);
|
|
||||||
break;
|
|
||||||
case CLUTTER_SCROLL_DOWN:
|
case CLUTTER_SCROLL_DOWN:
|
||||||
|
case CLUTTER_SCROLL_LEFT:
|
||||||
case CLUTTER_SCROLL_RIGHT:
|
case CLUTTER_SCROLL_RIGHT:
|
||||||
st_adjustment_set_value (priv->adjustment, value + step);
|
adjust_with_direction (priv->adjustment, event->direction);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user