rendered paste body/* testing & playing with pango :-) */#include <pango/pango.h>#include <gtk/gtk.h>#include <stdio.h>#include <math.h>/* signal handler(s) */gboolean handle_delete_event(GtkWidget *widget, GdkEvent *event, gpointer data){ return FALSE;}gboolean handle_destroy(GtkWidget *widget, gpointer data){ gtk_main_quit();}int main(int argc, char *argv[]){ PangoContext *pg_context = NULL; PangoFontFamily **pg_families = NULL; gint num_families = 0; GtkWidget *window = NULL; GtkWidget **labels = NULL; GtkWidget *table = NULL; gint table_dim = 0; gint family_offset = 0; gint row = 0, col = 0; gboolean all_done = FALSE; PangoContext *pg_labels_context = NULL; PangoFontDescription *pg_labels_desc = NULL; const gchar *family_name = NULL; /* setup GTK environment */ gtk_init(&argc, &argv); /* create a window & attach required signals */ window = gtk_window_new(GTK_WINDOW_TOPLEVEL); gtk_window_set_title(GTK_WINDOW(window), "Pango example"); gtk_window_set_default_size(GTK_WINDOW(window), 200, 100); /* attach signal handlers to the window */ gtk_signal_connect(GTK_OBJECT(window), "delete-event", GTK_SIGNAL_FUNC(handle_delete_event), NULL); gtk_signal_connect(GTK_OBJECT(window), "destroy", GTK_SIGNAL_FUNC(handle_destroy), NULL); /* get a pango context form the window */ pg_context = gtk_widget_get_pango_context(window); /* get the font_family listing */ pango_context_list_families(pg_context, &pg_families, &num_families); /* initialize the labels array */ labels = (GtkWidget **)g_malloc(sizeof(GtkWidget *) * num_families); /* init a GtkTable instance to hold all the labels */ table_dim = ceil(sqrt(num_families)); table = gtk_table_new(table_dim, table_dim, TRUE); /* render each label with its own font */ pg_labels_desc = pango_font_description_new(); for(row = 0; row < table_dim; ++row) { for(col = 0; col < table_dim; ++col) { /* get the family name in a string & create a label for that name */ family_name = pango_font_family_get_name(pg_families[family_offset]); labels[family_offset] = gtk_label_new(family_name); /* get the pango context for that label & modify its font */ pg_labels_context = gtk_widget_get_pango_context(labels[family_offset]); pango_font_description_set_family(pg_labels_desc, family_name); gtk_widget_modify_font(labels[family_offset], pg_labels_desc); /* add the font to the gtk-table */ gtk_table_attach(GTK_TABLE(table), labels[family_offset], col, col + 1, row, row + 1, GTK_FILL|GTK_EXPAND, GTK_FILL|GTK_EXPAND, 6, 6); family_offset ++; /* finish adding to gtk-table when all done */ if(family_offset == (num_families - 1)) { all_done = TRUE; break; } } if(TRUE == all_done) break; } /* pack the window & show it */; gtk_container_add(GTK_CONTAINER(window), table); gtk_widget_show_all(window); gtk_main(); return 0;}