summaryrefslogtreecommitdiff
path: root/tests/animated-revealing.c
diff options
context:
space:
mode:
authorBenjamin Otte <otte@redhat.com>2014-09-29 23:10:41 +0200
committerBenjamin Otte <otte@redhat.com>2014-10-03 06:18:04 +0200
commit7d1e79ef4b2adc31fd910ffc0e1deedefcfdd565 (patch)
tree330fcf065c398ee9301410c38bc0538f23477a61 /tests/animated-revealing.c
parent202116c60c67bab7ede6cfd5627f8a6a33184301 (diff)
downloadgtk+-7d1e79ef4b2adc31fd910ffc0e1deedefcfdd565.tar.gz
tests: Add a test for a performance optimisation
text-shadow is too slow. Running this testcase reveals that.
Diffstat (limited to 'tests/animated-revealing.c')
-rw-r--r--tests/animated-revealing.c75
1 files changed, 75 insertions, 0 deletions
diff --git a/tests/animated-revealing.c b/tests/animated-revealing.c
new file mode 100644
index 0000000000..2040824b08
--- /dev/null
+++ b/tests/animated-revealing.c
@@ -0,0 +1,75 @@
+/* -*- mode: C; c-basic-offset: 2; indent-tabs-mode: nil; -*- */
+
+#include <gtk/gtk.h>
+
+#include "frame-stats.h"
+
+double reveal_time = 5;
+
+static GOptionEntry options[] = {
+ { "time", 't', 0, G_OPTION_ARG_DOUBLE, &reveal_time, "Reveal time", "SECONDS" },
+ { NULL }
+};
+
+static void
+toggle_reveal (GtkRevealer *revealer)
+{
+ gtk_revealer_set_reveal_child (revealer, !gtk_revealer_get_reveal_child (revealer));
+}
+
+int
+main(int argc, char **argv)
+{
+ GtkWidget *window, *revealer, *grid, *widget;
+ GtkCssProvider *cssprovider;
+ GError *error = NULL;
+ guint x, y;
+
+ GOptionContext *context = g_option_context_new (NULL);
+ g_option_context_add_main_entries (context, options, NULL);
+ frame_stats_add_options (g_option_context_get_main_group (context));
+ g_option_context_add_group (context,
+ gtk_get_option_group (TRUE));
+
+ if (!g_option_context_parse (context, &argc, &argv, &error))
+ {
+ g_printerr ("Option parsing failed: %s\n", error->message);
+ return 1;
+ }
+
+ window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
+ frame_stats_ensure (GTK_WINDOW (window));
+
+ revealer = gtk_revealer_new ();
+ gtk_widget_set_valign (revealer, GTK_ALIGN_START);
+ gtk_revealer_set_transition_type (GTK_REVEALER (revealer), GTK_REVEALER_TRANSITION_TYPE_SLIDE_DOWN);
+ gtk_revealer_set_transition_duration (GTK_REVEALER (revealer), reveal_time * 1000);
+ gtk_revealer_set_reveal_child (GTK_REVEALER (revealer), TRUE);
+ g_signal_connect_after (revealer, "map", G_CALLBACK (toggle_reveal), NULL);
+ g_signal_connect_after (revealer, "notify::child-revealed", G_CALLBACK (toggle_reveal), NULL);
+ gtk_container_add (GTK_CONTAINER (window), revealer);
+
+ grid = gtk_grid_new ();
+ gtk_container_add (GTK_CONTAINER (revealer), grid);
+
+ cssprovider = gtk_css_provider_new ();
+ gtk_css_provider_load_from_data (cssprovider, "* { padding: 2px; text-shadow: 5px 5px 2px grey; }", -1, NULL);
+
+ for (x = 0; x < 10; x++)
+ {
+ for (y = 0; y < 20; y++)
+ {
+ widget = gtk_label_new ("Hello World");
+ gtk_style_context_add_provider (gtk_widget_get_style_context (widget),
+ GTK_STYLE_PROVIDER (cssprovider),
+ GTK_STYLE_PROVIDER_PRIORITY_APPLICATION);
+ gtk_grid_attach (GTK_GRID (grid), widget, x, y, 1, 1);
+ }
+ }
+
+ gtk_widget_show_all (window);
+
+ gtk_main ();
+
+ return 0;
+}