Some refactoring to get rid of the global list of allocation guides

svn path=/branches/extended-layout/; revision=17960
This commit is contained in:
Mathias Hasselmann
2007-05-28 08:21:42 +00:00
parent 57c1dae7aa
commit cf0ee4d7b0

View File

@@ -20,10 +20,17 @@
#include <config.h>
#include <gtk/gtk.h>
GList *allocation_guides = NULL;
typedef struct _TestCase TestCase;
struct _TestCase
{
const gchar *name;
GtkWidget *widget;
GList *guides;
};
static void
append_natural_size_box (GtkWidget *vbox,
append_natural_size_box (TestCase *test,
const gchar *caption,
PangoEllipsizeMode ellipsize)
{
@@ -41,7 +48,7 @@ append_natural_size_box (GtkWidget *vbox,
gtk_box_pack_start (GTK_BOX (hbox), button, FALSE, TRUE, 0);
if (PANGO_ELLIPSIZE_NONE == ellipsize)
allocation_guides = g_list_append (allocation_guides, button);
test->guides = g_list_append (test->guides, button);
button = gtk_button_new_with_label ("The large Button");
gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 0);
@@ -50,74 +57,89 @@ append_natural_size_box (GtkWidget *vbox,
gtk_label_set_markup (GTK_LABEL (label), caption);
gtk_misc_set_alignment (GTK_MISC (label), 0.0, 0.5);
gtk_box_pack_start (GTK_BOX (vbox), label, FALSE, TRUE, 0);
gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, TRUE, 0);
gtk_box_pack_start (GTK_BOX (test->widget), label, FALSE, TRUE, 0);
gtk_box_pack_start (GTK_BOX (test->widget), hbox, FALSE, TRUE, 0);
}
static GtkWidget*
create_natural_size ()
static TestCase*
create_natural_size_test ()
{
GtkWidget *vbox = gtk_vbox_new (FALSE, 12);
gtk_container_set_border_width (GTK_CONTAINER (vbox), 12);
append_natural_size_box (vbox, "<b>No ellipsizing</b>", PANGO_ELLIPSIZE_NONE);
append_natural_size_box (vbox, "<b>Ellipsizing at start</b>", PANGO_ELLIPSIZE_START);
append_natural_size_box (vbox, "<b>Ellipsizing in the middle</b>", PANGO_ELLIPSIZE_MIDDLE);
append_natural_size_box (vbox, "<b>Ellipsizing at end</b>", PANGO_ELLIPSIZE_END);
TestCase *test = g_new0 (TestCase, 1);
return vbox;
test->name = "Natural Size";
test->widget = gtk_vbox_new (FALSE, 12);
gtk_container_set_border_width (GTK_CONTAINER (test->widget), 12);
append_natural_size_box (test,
"<b>No ellipsizing</b>",
PANGO_ELLIPSIZE_NONE);
append_natural_size_box (test,
"<b>Ellipsizing at start</b>",
PANGO_ELLIPSIZE_START);
append_natural_size_box (test,
"<b>Ellipsizing in the middle</b>",
PANGO_ELLIPSIZE_MIDDLE);
append_natural_size_box (test,
"<b>Ellipsizing at end</b>",
PANGO_ELLIPSIZE_END);
return test;
}
static GtkWidget*
create_height_for_width ()
static TestCase*
create_height_for_width_test ()
{
GtkWidget *vbox;
TestCase *test = g_new0 (TestCase, 1);
vbox = gtk_vbox_new (FALSE, 12);
gtk_container_set_border_width (GTK_CONTAINER (vbox), 12);
test->name = "Height for Width";
test->widget = gtk_vbox_new (FALSE, 12);
gtk_container_set_border_width (GTK_CONTAINER (test->widget), 12);
return vbox;
return test;
}
static GtkWidget*
create_baseline ()
static TestCase*
create_baseline_test ()
{
GtkWidget *table;
GtkWidget *child;
GtkWidget *view;
GtkWidget *label;
table = gtk_table_new (3, 3, FALSE);
gtk_table_set_col_spacings (GTK_TABLE (table), 6);
gtk_table_set_row_spacings (GTK_TABLE (table), 6);
gtk_container_set_border_width (GTK_CONTAINER (table), 12);
TestCase *test = g_new0 (TestCase, 1);
test->name = "Baseline Alignment";
test->widget = gtk_table_new (3, 3, FALSE);
gtk_container_set_border_width (GTK_CONTAINER (test->widget), 12);
gtk_table_set_col_spacings (GTK_TABLE (test->widget), 6);
gtk_table_set_row_spacings (GTK_TABLE (test->widget), 6);
child = gtk_entry_new ();
gtk_entry_set_text (GTK_ENTRY (child), "Test...");
gtk_table_attach (GTK_TABLE (table), child, 1, 2, 0, 1,
gtk_table_attach (GTK_TABLE (test->widget), child, 1, 2, 0, 1,
GTK_FILL | GTK_EXPAND, GTK_FILL, 0, 0);
label = gtk_label_new_with_mnemonic ("_Title:");
allocation_guides = g_list_append (allocation_guides, label);
test->guides = g_list_append (test->guides, label);
gtk_misc_set_alignment (GTK_MISC (label), 0.0, 0.5);
gtk_label_set_mnemonic_widget (GTK_LABEL (label), child);
gtk_table_attach (GTK_TABLE (table), label, 0, 1, 0, 1,
gtk_table_attach (GTK_TABLE (test->widget), label, 0, 1, 0, 1,
GTK_FILL, GTK_FILL, 0, 0);
label = gtk_label_new_with_mnemonic ("Notice on\ntwo rows.");
allocation_guides = g_list_append (allocation_guides, label);
test->guides = g_list_append (test->guides, label);
gtk_misc_set_alignment (GTK_MISC (label), 0.0, 0.0);
gtk_table_attach (GTK_TABLE (table), label, 2, 3, 0, 2,
gtk_table_attach (GTK_TABLE (test->widget), label, 2, 3, 0, 2,
GTK_FILL, GTK_FILL, 0, 0);
child = gtk_font_button_new ();
gtk_table_attach (GTK_TABLE (table), child, 1, 2, 1, 2,
gtk_table_attach (GTK_TABLE (test->widget), child, 1, 2, 1, 2,
GTK_FILL | GTK_EXPAND, GTK_FILL, 0, 0);
label = gtk_label_new_with_mnemonic ("_Font:");
allocation_guides = g_list_append (allocation_guides, label);
test->guides = g_list_append (test->guides, label);
gtk_misc_set_alignment (GTK_MISC (label), 0.0, 0.5);
gtk_label_set_mnemonic_widget (GTK_LABEL (label), child);
gtk_table_attach (GTK_TABLE (table), label, 0, 1, 1, 2,
gtk_table_attach (GTK_TABLE (test->widget), label, 0, 1, 1, 2,
GTK_FILL, GTK_FILL, 0, 0);
view = gtk_text_view_new ();
@@ -131,19 +153,19 @@ create_baseline ()
GTK_SHADOW_IN);
gtk_container_add (GTK_CONTAINER (child), view);
gtk_table_attach (GTK_TABLE (table), child, 1, 3, 2, 3,
gtk_table_attach (GTK_TABLE (test->widget), child, 1, 3, 2, 3,
GTK_FILL | GTK_EXPAND,
GTK_FILL | GTK_EXPAND,
0, 0);
label = gtk_label_new_with_mnemonic ("_Comment:");
allocation_guides = g_list_append (allocation_guides, label);
test->guides = g_list_append (test->guides, label);
gtk_misc_set_alignment (GTK_MISC (label), 0.0, 0.0);
gtk_label_set_mnemonic_widget (GTK_LABEL (label), child);
gtk_table_attach (GTK_TABLE (table), label, 0, 1, 2, 3,
gtk_table_attach (GTK_TABLE (test->widget), label, 0, 1, 2, 3,
GTK_FILL, GTK_FILL, 0, 0);
return table;
return test;
}
static gboolean
@@ -219,17 +241,18 @@ expose_page (GtkWidget *page,
static void
append_testcase(GtkWidget *notebook,
GtkWidget *testcase,
const gchar *caption)
TestCase *test)
{
gtk_notebook_append_page (GTK_NOTEBOOK (notebook), testcase,
gtk_label_new (caption));
gtk_notebook_append_page (GTK_NOTEBOOK (notebook), test->widget,
gtk_label_new (test->name));
g_signal_connect_after (testcase, "expose-event",
g_signal_connect_after (test->widget, "expose-event",
G_CALLBACK (expose_page),
allocation_guides);
test->guides);
g_object_set_data_full (G_OBJECT(test->widget),
"test-case", test, g_free);
allocation_guides = NULL;
test->guides = NULL;
}
int
@@ -242,9 +265,9 @@ main (int argc, char *argv[])
notebook = gtk_notebook_new ();
append_testcase (notebook, create_natural_size (), "Natural Size");
append_testcase (notebook, create_height_for_width (), "Height for Width");
append_testcase (notebook, create_baseline (), "Baseline Alignment");
append_testcase (notebook, create_natural_size_test ());
append_testcase (notebook, create_height_for_width_test ());
append_testcase (notebook, create_baseline_test ());
window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
g_signal_connect (window, "destroy", G_CALLBACK (gtk_main_quit), NULL);