Mercurial > dwindows
changeset 861:8f2722696a8e
Implemented dw_container_scroll() for GTK3.
author | bsmith@81767d24-ef19-dc11-ae90-00e081727c95 |
---|---|
date | Fri, 01 Apr 2011 21:00:42 +0000 |
parents | 93ac372941c4 |
children | 9750236bcdd5 |
files | gtk3/dw.c |
diffstat | 1 files changed, 64 insertions(+), 0 deletions(-) [+] |
line wrap: on
line diff
--- a/gtk3/dw.c Fri Apr 01 01:37:05 2011 +0000 +++ b/gtk3/dw.c Fri Apr 01 21:00:42 2011 +0000 @@ -6156,6 +6156,70 @@ */ void dw_container_scroll(HWND handle, int direction, long rows) { + GtkWidget *cont; + int _locked_by_me = FALSE; + + DW_MUTEX_LOCK; + cont = (GtkWidget *)g_object_get_data(G_OBJECT(handle), "_dw_user"); + + /* Make sure it is the correct tree type */ + if(cont && GTK_IS_TREE_VIEW(cont) && g_object_get_data(G_OBJECT(cont), "_dw_tree_type") == GINT_TO_POINTER(_DW_TREE_TYPE_CONTAINER)) + { + GtkAdjustment *adjust = gtk_tree_view_get_vadjustment(GTK_TREE_VIEW(cont)); + + if(adjust) + { + gint rowcount = (gint)g_object_get_data(G_OBJECT(cont), "_dw_rowcount"); + gdouble currpos = gtk_adjustment_get_value(adjust); + gdouble upper = gtk_adjustment_get_upper(adjust); + gdouble lower = gtk_adjustment_get_lower(adjust); + gdouble change; + + /* Safety check */ + if(rowcount < 1) + { + DW_MUTEX_UNLOCK; + return; + } + + change = ((gdouble)rows/(gdouble)rowcount) * (upper - lower); + + switch(direction) + { + case DW_SCROLL_TOP: + { + gtk_adjustment_set_value(adjust, lower); + break; + } + case DW_SCROLL_BOTTOM: + { + gtk_adjustment_set_value(adjust, upper); + break; + } + case DW_SCROLL_UP: + { + gdouble newpos = currpos - change; + if(newpos < lower) + { + newpos = lower; + } + gtk_adjustment_set_value(adjust, newpos); + break; + } + case DW_SCROLL_DOWN: + { + gdouble newpos = currpos + change; + if(newpos > upper) + { + newpos = upper; + } + gtk_adjustment_set_value(adjust, newpos); + break; + } + } + } + } + DW_MUTEX_UNLOCK; } /*