// testing & playing with pango :-) #include #include // 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(); } void handle_context_changed_style(GtkWidget *widget, GtkStyle style, gpointer layout) { g_print("Entering style\n"); if(NULL == layout) g_print("style : layout is null\n"); PangoLayout *pg_layout = (PangoLayout *)layout; g_print("from layout : %s\n", pango_layout_get_text(pg_layout)); pango_layout_set_text(pg_layout, "This is a string", -1); //pango_layout_context_changed(pg_layout); g_print("Exiting style\n"); } void handle_context_changed_dir(GtkWidget *widget, GtkTextDirection dir, gpointer layout) { g_print("Entering direction\n"); if(NULL == layout) g_print("direction : layout is null\n"); PangoLayout *pg_layout = (PangoLayout *)layout; pango_layout_context_changed(pg_layout); g_print("Exiting direction\n"); } int main(int argc, char *argv[]) { GtkWidget *window = NULL; GtkWidget *entry = NULL; gchar *pango_str = NULL; /* Pango stuff */ PangoLayout *pg_layout = NULL; PangoFont *pg_font = NULL; PangoFontDescription *pg_desc = 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); 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); entry = gtk_entry_new(); gtk_entry_set_text(GTK_ENTRY(entry), "Junk Stuff"); pg_layout = gtk_widget_create_pango_layout(entry, "Junk Stuff"); pango_layout_set_text(pg_layout, "setted form main", -1); pg_desc = pango_font_description_from_string("Serif 10"); pg_font = pango_context_load_font(pango_layout_get_context(pg_layout), pg_desc); if(NULL == pg_font) g_print("Sorry dude, problem loading font :-P\n"); else g_print("Hurray! Font loaded :-)\n"); // let the widget know the change in layout gtk_signal_connect(GTK_OBJECT(entry), "style-set", GTK_SIGNAL_FUNC(handle_context_changed_style), pg_layout); gtk_signal_connect(GTK_OBJECT(entry), "direction-changed", GTK_SIGNAL_FUNC(handle_context_changed_dir), pg_layout); // add the pango'ised string & show it gtk_container_add(GTK_CONTAINER(window), entry); gtk_widget_show_all(window); gtk_main(); }