summaryrefslogtreecommitdiff
path: root/tests/testoverlaystyleclass.c
diff options
context:
space:
mode:
authorCosimo Cecchi <cosimoc@gnome.org>2012-02-06 11:26:57 -0500
committerCosimo Cecchi <cosimoc@gnome.org>2012-02-29 12:33:46 -0500
commitcb316cb2a82dac1285a3a0eee1d74e911c0e5faf (patch)
tree3eebef3c8fa980d46527be602b4466bf30769d9b /tests/testoverlaystyleclass.c
parentd1aa797be306d27c91df8ea3b20c2b3eb773df61 (diff)
downloadgtk+-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.c154
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;
+}