diff options
author | Cosimo Cecchi <cosimoc@gnome.org> | 2012-02-06 11:26:57 -0500 |
---|---|---|
committer | Cosimo Cecchi <cosimoc@gnome.org> | 2012-02-29 12:33:46 -0500 |
commit | cb316cb2a82dac1285a3a0eee1d74e911c0e5faf (patch) | |
tree | 3eebef3c8fa980d46527be602b4466bf30769d9b /tests/testoverlaystyleclass.c | |
parent | d1aa797be306d27c91df8ea3b20c2b3eb773df61 (diff) | |
download | gtk+-cb316cb2a82dac1285a3a0eee1d74e911c0e5faf.tar.gz |
tests: add a test for GtkOverlay position style classes
https://bugzilla.gnome.org/show_bug.cgi?id=669342
Diffstat (limited to 'tests/testoverlaystyleclass.c')
-rw-r--r-- | tests/testoverlaystyleclass.c | 154 |
1 files changed, 154 insertions, 0 deletions
diff --git a/tests/testoverlaystyleclass.c b/tests/testoverlaystyleclass.c new file mode 100644 index 0000000000..e3b9f31874 --- /dev/null +++ b/tests/testoverlaystyleclass.c @@ -0,0 +1,154 @@ +#include <gtk/gtk.h> + +static void +child_size_allocate (GtkWidget *child, + GdkRectangle *allocation, + gpointer user_data) +{ + GtkStyleContext *context; + context = gtk_widget_get_style_context (child); + + g_print ("Child %p\nHas left? %d\nHas right? %d\nHas top? %d\nHas bottom? %d\n", + child, + gtk_style_context_has_class (context, "left"), + gtk_style_context_has_class (context, "right"), + gtk_style_context_has_class (context, "top"), + gtk_style_context_has_class (context, "bottom")); +} + +static gboolean +overlay_get_child_position (GtkOverlay *overlay, + GtkWidget *child, + GdkRectangle *allocation, + gpointer user_data) +{ + GtkWidget *custom_child = user_data; + GtkRequisition req; + + if (child != custom_child) + return FALSE; + + gtk_widget_get_preferred_size (child, NULL, &req); + + allocation->x = 120; + allocation->y = 0; + allocation->width = req.width; + allocation->height = req.height; + + return TRUE; +} + +int +main (int argc, char *argv[]) +{ + GtkWidget *win, *overlay, *grid, *main_child, *child, *label, *sw; + GdkRGBA color; + gchar *str; + + gtk_init (&argc, &argv); + + win = gtk_window_new (GTK_WINDOW_TOPLEVEL); + gtk_window_set_default_size (GTK_WINDOW (win), 600, 600); + + grid = gtk_grid_new (); + child = gtk_event_box_new (); + gdk_rgba_parse (&color, "red"); + gtk_widget_override_background_color (child, 0, &color); + gtk_widget_set_hexpand (child, TRUE); + gtk_widget_set_vexpand (child, TRUE); + gtk_container_add (GTK_CONTAINER (grid), child); + label = gtk_label_new ("Out of overlay"); + gtk_container_add (GTK_CONTAINER (child), label); + + overlay = gtk_overlay_new (); + sw = gtk_scrolled_window_new (NULL, NULL); + gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (sw), + GTK_POLICY_ALWAYS, + GTK_POLICY_ALWAYS); + gtk_container_add (GTK_CONTAINER (overlay), sw); + + main_child = gtk_event_box_new (); + gtk_scrolled_window_add_with_viewport (GTK_SCROLLED_WINDOW (sw), + main_child); + gdk_rgba_parse (&color, "green"); + gtk_widget_override_background_color (main_child, 0, &color); + gtk_widget_set_hexpand (main_child, TRUE); + gtk_widget_set_vexpand (main_child, TRUE); + label = gtk_label_new ("Main child"); + gtk_container_add (GTK_CONTAINER (main_child), label); + + child = gtk_label_new (NULL); + str = g_strdup_printf ("%p", child); + gtk_label_set_text (GTK_LABEL (child), str); + g_free (str); + g_print ("Bottom/Right child: %p\n", child); + gtk_widget_set_halign (child, GTK_ALIGN_END); + gtk_widget_set_valign (child, GTK_ALIGN_END); + gtk_overlay_add_overlay (GTK_OVERLAY (overlay), child); + + g_signal_connect (child, "size-allocate", + G_CALLBACK (child_size_allocate), overlay); + + child = gtk_label_new (NULL); + str = g_strdup_printf ("%p", child); + gtk_label_set_text (GTK_LABEL (child), str); + g_free (str); + g_print ("Left/Top child: %p\n", child); + gtk_widget_set_halign (child, GTK_ALIGN_START); + gtk_widget_set_valign (child, GTK_ALIGN_START); + gtk_overlay_add_overlay (GTK_OVERLAY (overlay), child); + + g_signal_connect (child, "size-allocate", + G_CALLBACK (child_size_allocate), overlay); + + child = gtk_label_new (NULL); + str = g_strdup_printf ("%p", child); + gtk_label_set_text (GTK_LABEL (child), str); + g_free (str); + g_print ("Right/Center child: %p\n", child); + gtk_widget_set_halign (child, GTK_ALIGN_END); + gtk_widget_set_valign (child, GTK_ALIGN_CENTER); + gtk_overlay_add_overlay (GTK_OVERLAY (overlay), child); + + g_signal_connect (child, "size-allocate", + G_CALLBACK (child_size_allocate), overlay); + + child = gtk_label_new (NULL); + str = g_strdup_printf ("%p", child); + gtk_label_set_text (GTK_LABEL (child), str); + g_free (str); + gtk_widget_set_margin_left (child, 55); + gtk_widget_set_margin_top (child, 4); + g_print ("Left/Top margined child: %p\n", child); + gtk_widget_set_halign (child, GTK_ALIGN_START); + gtk_widget_set_valign (child, GTK_ALIGN_START); + gtk_overlay_add_overlay (GTK_OVERLAY (overlay), child); + + g_signal_connect (child, "size-allocate", + G_CALLBACK (child_size_allocate), overlay); + + child = gtk_label_new (NULL); + str = g_strdup_printf ("%p", child); + gtk_label_set_text (GTK_LABEL (child), str); + g_free (str); + g_print ("Custom get-child-position child: %p\n", child); + gtk_widget_set_halign (child, GTK_ALIGN_START); + gtk_widget_set_valign (child, GTK_ALIGN_START); + gtk_overlay_add_overlay (GTK_OVERLAY (overlay), child); + + g_signal_connect (child, "size-allocate", + G_CALLBACK (child_size_allocate), overlay); + g_signal_connect (overlay, "get-child-position", + G_CALLBACK (overlay_get_child_position), child); + + gtk_grid_attach (GTK_GRID (grid), overlay, 1, 0, 1, 3); + gtk_container_add (GTK_CONTAINER (win), grid); + + g_print ("\n"); + + gtk_widget_show_all (win); + + gtk_main (); + + return 0; +} |