Index: pango_break/Makefile =================================================================== --- pango_break/Makefile (nonexistent) +++ pango_break/Makefile (revision 8924) @@ -0,0 +1,12 @@ +TRUNK=../../../trunk +CFLAGS=-g -Wall -I $(TRUNK)/src_plugins `pkg-config --cflags gtk+-2.0` +LDFLAGS=-g `pkg-config --libs gtk+-2.0` +#CFLAGS=-g -Wall -I $(TRUNK)/src_plugins -DPCB_GTK3 `pkg-config --cflags gtk+-3.0` +#LDFLAGS=-g `pkg-config --libs gtk+-3.0` + +all: pango_create + +pango_create: pango_create.o + +clean: + rm *.o pango_create \ No newline at end of file Index: pango_break/pango_create.c =================================================================== --- pango_break/pango_create.c (nonexistent) +++ pango_break/pango_create.c (revision 8924) @@ -0,0 +1,92 @@ +/** + \file pango_create.c + \brief Wrapping and sizing GtkLabels dynamically. + + Compile with: +gcc -g -Wall `pkg-config --cflags gtk+-2.0` -c -o pango_create.o pango_create.c +gcc -g `pkg-config --libs gtk+-2.0` pango_create.o -o pango_create + */ + +#include + +static const gchar *text = "/home/userA/Projects/pcb-rnd/very_long_path/subdir/very_long_sub_dir/file"; + +#ifndef PCB_GTK3 +static void on_size_allocate_hack(GtkWidget * label, GtkAllocation * alloc, gpointer data) +{ + if (alloc->width > 1) { + /* Allows shrinking of widget size */ + gtk_widget_set_size_request(label, alloc->width - 1, -1); + } + //printf("x=%d, y=%d : w=%d, h=%d\n", alloc->x, alloc->y, alloc->width, alloc->height); +} +#endif + +static void create_widgets(GtkWidget * window) +{ + GtkWidget *window_vbox; + GtkWidget *box, *spring; + GtkWidget *label, *right_label; + + /* Pack the label in an horizontal box */ + box = gtk_hbox_new(FALSE, 0); + + /* Create a "left" label */ + //GtkWidget *left_label = gtk_label_new("This is a really long label that should wrap several time, at least once"); + //gtk_label_set_use_markup(GTK_LABEL(label), TRUE); + label = gtk_label_new(text); + gtk_misc_set_alignment(GTK_MISC(label), 0, 0.0); + gtk_label_set_line_wrap(GTK_LABEL(label), TRUE); + + /* Create a "right" label (optional) */ + //right_label = gtk_label_new("Small Label"); + right_label = gtk_label_new(""); + gtk_misc_set_alignment(GTK_MISC(right_label), 1, 0.0); + +#ifndef PCB_GTK3 + /* GtkLabel Line Wrap Hack - GTK2 SUCKS, there ! */ + g_signal_connect(G_OBJECT(label), "size-allocate", G_CALLBACK(on_size_allocate_hack), NULL); +#endif + + /* Add the labels to the horizontal box */ + gtk_box_pack_start(GTK_BOX(box), label, TRUE, TRUE, 0); + gtk_box_pack_start(GTK_BOX(box), right_label, TRUE, TRUE, 2); + + /* Add everything in a vertical box for the main window's contents */ + window_vbox = gtk_vbox_new(FALSE, 0); + //gtk_box_pack_start(GTK_BOX(window_vbox), gtk_label_new("Resize Me"), FALSE, TRUE, 0); + gtk_box_pack_start(GTK_BOX(window_vbox), box, FALSE, FALSE, 0); + + spring = gtk_hbox_new(0, 0); + gtk_box_pack_start(GTK_BOX(window_vbox), spring, TRUE, TRUE, 0); + + gtk_container_add(GTK_CONTAINER(window), window_vbox); +} + +int main(int argc, char **argv) +{ + GtkWidget *window; + + /* Initialize the widget set */ + gtk_init(&argc, &argv); + + window = gtk_window_new(GTK_WINDOW_TOPLEVEL); + g_signal_connect(G_OBJECT(window), "destroy", gtk_main_quit, NULL); + gtk_window_set_default_size(GTK_WINDOW(window), 10, 400); + /* Set a default window size */ + //GdkGeometry gdkGeometry; + //gdkGeometry.min_width = 60; + //gdkGeometry.min_height = 60; + //gtk_window_set_geometry_hints(GTK_WINDOW(window), window, &gdkGeometry, GDK_HINT_MIN_SIZE); + + /* Set up GUI elements */ + create_widgets(window); + + /* Show the application window */ + gtk_widget_show_all(window); + + /* Enter the main event loop, and wait for user interaction */ + gtk_main(); + + return 0; +}