#include #include #include /* Define this to shut off the printfs (for profiling). */ #define QUIET /* Number of elements to put in the list. */ static int n = 1024; /* Number of times to draw. */ static int nd = 256; static int timediff( struct timeval *large, struct timeval *small ) { return ( ( ( large->tv_sec * 1000 * 1000 ) + large->tv_usec ) - ( ( small->tv_sec * 1000 * 1000 ) + small->tv_usec ) ); } int main (int argc, char **argv) { GtkCellRenderer *renderer; GtkTreeViewColumn *column; GtkTreeIter iter; GtkListStore *store; GtkWidget *scrolled; GtkWidget *tree; GtkWidget *window; int i; gtk_init (&argc, &argv); window = gtk_window_new (GTK_WINDOW_TOPLEVEL); g_signal_connect (G_OBJECT (window), "destroy", G_CALLBACK (gtk_main_quit), 0); g_signal_connect (G_OBJECT (window), "delete_event", G_CALLBACK (gtk_main_quit), 0); scrolled = gtk_scrolled_window_new (0, 0); store = gtk_list_store_new (7, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING); tree = gtk_tree_view_new_with_model (GTK_TREE_MODEL (store)); renderer = gtk_cell_renderer_text_new (); column = gtk_tree_view_column_new_with_attributes ("Column1", renderer, "text", 0, 0); gtk_tree_view_column_set_sizing (column, GTK_TREE_VIEW_COLUMN_FIXED); gtk_tree_view_column_set_min_width (column, 40); gtk_tree_view_append_column (GTK_TREE_VIEW (tree), column); renderer = gtk_cell_renderer_text_new (); column = gtk_tree_view_column_new_with_attributes ("Column2", renderer, "text", 1, 0); gtk_tree_view_column_set_sizing (column, GTK_TREE_VIEW_COLUMN_FIXED); gtk_tree_view_column_set_min_width (column, 40); gtk_tree_view_append_column (GTK_TREE_VIEW (tree), column); renderer = gtk_cell_renderer_text_new (); column = gtk_tree_view_column_new_with_attributes ("Column3", renderer, "text", 2, 0); gtk_tree_view_column_set_sizing (column, GTK_TREE_VIEW_COLUMN_FIXED); gtk_tree_view_column_set_min_width (column, 40); gtk_tree_view_append_column (GTK_TREE_VIEW (tree), column); renderer = gtk_cell_renderer_text_new (); column = gtk_tree_view_column_new_with_attributes ("Column4", renderer, "text", 3, 0); gtk_tree_view_column_set_sizing (column, GTK_TREE_VIEW_COLUMN_FIXED); gtk_tree_view_column_set_min_width (column, 40); gtk_tree_view_append_column (GTK_TREE_VIEW (tree), column); renderer = gtk_cell_renderer_text_new (); column = gtk_tree_view_column_new_with_attributes ("Column5", renderer, "text", 4, 0); gtk_tree_view_column_set_sizing (column, GTK_TREE_VIEW_COLUMN_FIXED); gtk_tree_view_column_set_min_width (column, 40); gtk_tree_view_append_column (GTK_TREE_VIEW (tree), column); renderer = gtk_cell_renderer_text_new (); column = gtk_tree_view_column_new_with_attributes ("Column6", renderer, "text", 5, 0); gtk_tree_view_column_set_sizing (column, GTK_TREE_VIEW_COLUMN_FIXED); gtk_tree_view_column_set_min_width (column, 40); gtk_tree_view_append_column (GTK_TREE_VIEW (tree), column); renderer = gtk_cell_renderer_text_new (); column = gtk_tree_view_column_new_with_attributes ("Column7", renderer, "text", 6, 0); gtk_tree_view_column_set_sizing (column, GTK_TREE_VIEW_COLUMN_FIXED); gtk_tree_view_column_set_min_width (column, 40); gtk_tree_view_append_column (GTK_TREE_VIEW (tree), column); gtk_container_add (GTK_CONTAINER (scrolled), tree); gtk_container_add (GTK_CONTAINER (window), scrolled); for (i = 0; i < n; i++) { gtk_list_store_append (store, &iter); gtk_list_store_set (store, &iter, 0, "this", 1, "works", 2, "great", 3, "and", 4, "is", 5, "super", 6, "fast", -1); } gtk_widget_set_size_request (window, 400, 400); gtk_widget_show_all (window); while (gtk_events_pending ()) gtk_main_iteration (); for (i = 0; i < nd; i++) { struct timeval before, after; gtk_widget_queue_draw (tree); #ifndef QUIET gettimeofday (&before, 0); #endif gdk_window_process_all_updates (); #ifndef QUIET gettimeofday (&after, 0); fprintf (stderr, "Process all updates took %d usec (%.2f ms).\n", timediff (&after, &before), ((double) timediff (&after, &before)) / 1000.0); #endif } return 0; }