gcal-viewport: added :scroll_to method
GcalViewport:scroll_to will scroll to a point of it children accordingly to a value passed
This commit is contained in:
@@ -253,3 +253,31 @@ gcal_viewport_add (GcalViewport *viewport,
|
|||||||
g_signal_connect_after (widget, "size-allocate",
|
g_signal_connect_after (widget, "size-allocate",
|
||||||
G_CALLBACK (gcal_viewport_child_allocated), viewport);
|
G_CALLBACK (gcal_viewport_child_allocated), viewport);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* gcal_viewport_scroll_to:
|
||||||
|
* @viewport: a #GcalViewport
|
||||||
|
* @value: a value between 0 and 1.0 for scrolling the child.
|
||||||
|
*
|
||||||
|
* If no scrollbar is shown, this method does nothing
|
||||||
|
**/
|
||||||
|
void
|
||||||
|
gcal_viewport_scroll_to (GcalViewport *viewport,
|
||||||
|
gdouble value)
|
||||||
|
{
|
||||||
|
GcalViewportPrivate *priv;
|
||||||
|
GtkAdjustment *adj;
|
||||||
|
gdouble lower, upper, page_size;
|
||||||
|
|
||||||
|
priv = viewport->priv;
|
||||||
|
|
||||||
|
value = CLAMP (value, 0.0, 1.0);
|
||||||
|
|
||||||
|
adj = gtk_range_get_adjustment (GTK_RANGE (priv->vscrollbar));
|
||||||
|
page_size = gtk_adjustment_get_page_size (adj);
|
||||||
|
lower = gtk_adjustment_get_lower (adj);
|
||||||
|
upper = gtk_adjustment_get_upper (adj);
|
||||||
|
|
||||||
|
value = ((upper - page_size) - lower) * value;
|
||||||
|
gtk_adjustment_set_value (adj, value);
|
||||||
|
}
|
||||||
|
|||||||
@@ -55,6 +55,9 @@ GtkWidget* gcal_viewport_new (void);
|
|||||||
void gcal_viewport_add (GcalViewport *viewport,
|
void gcal_viewport_add (GcalViewport *viewport,
|
||||||
GtkWidget *widget);
|
GtkWidget *widget);
|
||||||
|
|
||||||
|
void gcal_viewport_scroll_to (GcalViewport *viewport,
|
||||||
|
gdouble value);
|
||||||
|
|
||||||
G_END_DECLS
|
G_END_DECLS
|
||||||
|
|
||||||
#endif /* __GCAL_VIEWPORT_H__ */
|
#endif /* __GCAL_VIEWPORT_H__ */
|
||||||
|
|||||||
Reference in New Issue
Block a user