All pastes #42884 Raw Edit

Someone

public text v1 · immutable
#42884 ·published 2006-02-23 12:42 UTC
rendered paste body
// testing & playing with pango :-)

#include <gtk/gtk.h>
#include <pango/pango.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();
}


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();
}