Mercurial > dwindows
comparison gtk3/dw.c @ 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 | d51e958aad95 |
children | 18eab415ff0c |
comparison
equal
deleted
inserted
replaced
860:93ac372941c4 | 861:8f2722696a8e |
---|---|
6154 * DW_SCROLL_BOTTOM. (rows is ignored for last two) | 6154 * DW_SCROLL_BOTTOM. (rows is ignored for last two) |
6155 * rows: The number of rows to be scrolled. | 6155 * rows: The number of rows to be scrolled. |
6156 */ | 6156 */ |
6157 void dw_container_scroll(HWND handle, int direction, long rows) | 6157 void dw_container_scroll(HWND handle, int direction, long rows) |
6158 { | 6158 { |
6159 GtkWidget *cont; | |
6160 int _locked_by_me = FALSE; | |
6161 | |
6162 DW_MUTEX_LOCK; | |
6163 cont = (GtkWidget *)g_object_get_data(G_OBJECT(handle), "_dw_user"); | |
6164 | |
6165 /* Make sure it is the correct tree type */ | |
6166 if(cont && GTK_IS_TREE_VIEW(cont) && g_object_get_data(G_OBJECT(cont), "_dw_tree_type") == GINT_TO_POINTER(_DW_TREE_TYPE_CONTAINER)) | |
6167 { | |
6168 GtkAdjustment *adjust = gtk_tree_view_get_vadjustment(GTK_TREE_VIEW(cont)); | |
6169 | |
6170 if(adjust) | |
6171 { | |
6172 gint rowcount = (gint)g_object_get_data(G_OBJECT(cont), "_dw_rowcount"); | |
6173 gdouble currpos = gtk_adjustment_get_value(adjust); | |
6174 gdouble upper = gtk_adjustment_get_upper(adjust); | |
6175 gdouble lower = gtk_adjustment_get_lower(adjust); | |
6176 gdouble change; | |
6177 | |
6178 /* Safety check */ | |
6179 if(rowcount < 1) | |
6180 { | |
6181 DW_MUTEX_UNLOCK; | |
6182 return; | |
6183 } | |
6184 | |
6185 change = ((gdouble)rows/(gdouble)rowcount) * (upper - lower); | |
6186 | |
6187 switch(direction) | |
6188 { | |
6189 case DW_SCROLL_TOP: | |
6190 { | |
6191 gtk_adjustment_set_value(adjust, lower); | |
6192 break; | |
6193 } | |
6194 case DW_SCROLL_BOTTOM: | |
6195 { | |
6196 gtk_adjustment_set_value(adjust, upper); | |
6197 break; | |
6198 } | |
6199 case DW_SCROLL_UP: | |
6200 { | |
6201 gdouble newpos = currpos - change; | |
6202 if(newpos < lower) | |
6203 { | |
6204 newpos = lower; | |
6205 } | |
6206 gtk_adjustment_set_value(adjust, newpos); | |
6207 break; | |
6208 } | |
6209 case DW_SCROLL_DOWN: | |
6210 { | |
6211 gdouble newpos = currpos + change; | |
6212 if(newpos > upper) | |
6213 { | |
6214 newpos = upper; | |
6215 } | |
6216 gtk_adjustment_set_value(adjust, newpos); | |
6217 break; | |
6218 } | |
6219 } | |
6220 } | |
6221 } | |
6222 DW_MUTEX_UNLOCK; | |
6159 } | 6223 } |
6160 | 6224 |
6161 /* | 6225 /* |
6162 * Starts a new query of a container. | 6226 * Starts a new query of a container. |
6163 * Parameters: | 6227 * Parameters: |