summaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
authorCody Russell <crussell@canonical.com>2009-12-18 13:43:11 +0100
committerTristan Van Berkom <tristan.van.berkom@gmail.com>2010-04-03 20:53:44 -0400
commit87487cea622d2522f56c08727099c62c653b8186 (patch)
tree384e3d4ab99fb2205fb46691b53718c7ae274285 /tests
parentddf4cde3af346b49a8771e3a1bb2b957ec671036 (diff)
downloadgtk+-87487cea622d2522f56c08727099c62c653b8186.tar.gz
GtkOffscreenWindow implementation for #604901
Diffstat (limited to 'tests')
-rw-r--r--tests/Makefile.am6
-rw-r--r--tests/testoffscreenwindow.c92
2 files changed, 98 insertions, 0 deletions
diff --git a/tests/Makefile.am b/tests/Makefile.am
index d8b4ea8bd2..d5db0a9958 100644
--- a/tests/Makefile.am
+++ b/tests/Makefile.am
@@ -60,6 +60,7 @@ noinst_PROGRAMS = $(TEST_PROGS) \
testnotebookdnd \
testnouiprint \
testoffscreen \
+ testoffscreenwindow \
testorientable \
testprint \
testrgb \
@@ -143,6 +144,7 @@ testmultiscreen_DEPENDENCIES = $(TEST_DEPS)
testnotebookdnd_DEPENDENCIES = $(TEST_DEPS)
testnouiprint_DEPENDENCIES = $(TEST_DEPS)
testoffscreen_DEPENDENCIES = $(TEST_DEPS)
+testoffscreenwindow_DEPENDENCIES = $(TEST_DEPS)
testorientable_DEPENDENCIES = $(TEST_DEPS)
testprint_DEPENDENCIES = $(TEST_DEPS)
testrecentchooser_DEPENDENCIES = $(TEST_DEPS)
@@ -207,6 +209,7 @@ testmultiscreen_LDADD = $(LDADDS)
testnotebookdnd_LDADD = $(LDADDS)
testnouiprint_LDADD = $(LDADDS)
testoffscreen_LDADD = $(LDADDS)
+testoffscreenwindow_LDADD = $(LDADDS)
testorientable_LDADD = $(LDADDS)
testprint_LDADD = $(LDADDS)
testrecentchooser_LDADD = $(LDADDS)
@@ -343,6 +346,9 @@ testoffscreen_SOURCES = \
gtkoffscreenbox.h \
testoffscreen.c
+testoffscreenwindnow_SOURCES = \
+ testoffscreenwindow.c
+
testwindow_SOURCES = \
testwindows.c
diff --git a/tests/testoffscreenwindow.c b/tests/testoffscreenwindow.c
new file mode 100644
index 0000000000..a70e36b1ae
--- /dev/null
+++ b/tests/testoffscreenwindow.c
@@ -0,0 +1,92 @@
+#include <gtk/gtk.h>
+
+static gboolean
+da_expose (GtkWidget *widget,
+ GdkEventExpose *event,
+ gpointer user_data)
+{
+ GtkOffscreenWindow *offscreen = (GtkOffscreenWindow *)user_data;
+ GdkPixmap *pixmap;
+ cairo_t *cr;
+
+ if (GTK_WIDGET_DRAWABLE (widget))
+ {
+ pixmap = gdk_offscreen_window_get_pixmap (GTK_WIDGET (offscreen)->window);
+
+ cr = gdk_cairo_create (widget->window);
+ gdk_cairo_set_source_pixmap (cr, pixmap, 50, 50);
+ cairo_paint (cr);
+ cairo_destroy (cr);
+ }
+
+ return FALSE;
+}
+
+static gboolean
+offscreen_damage (GtkWidget *widget,
+ GdkEventExpose *event,
+ GtkWidget *da)
+{
+ gtk_widget_queue_draw (da);
+
+ return TRUE;
+}
+
+static gboolean
+da_button_press (GtkWidget *area, GdkEventButton *event, GtkWidget *button)
+{
+ gtk_widget_set_size_request (button, 150, 60);
+ return TRUE;
+}
+
+int
+main (int argc, char **argv)
+{
+ GtkWidget *window;
+ GtkWidget *button;
+ GtkWidget *offscreen;
+ GtkWidget *da;
+
+ gtk_init (&argc, &argv);
+
+ offscreen = gtk_offscreen_window_new ();
+
+ button = gtk_button_new_with_label ("Test");
+ gtk_widget_set_size_request (button, 50, 50);
+ gtk_container_add (GTK_CONTAINER (offscreen), button);
+ gtk_widget_show (button);
+
+ gtk_widget_show (offscreen);
+
+ /* Queue exposures and ensure they are handled so
+ * that the result is uptodate for the first
+ * expose of the window. If you want to get further
+ * changes, also track damage on the offscreen
+ * as done above.
+ */
+ gtk_widget_draw (offscreen, NULL);
+
+ window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
+ da = gtk_drawing_area_new ();
+ gtk_container_add (GTK_CONTAINER (window), da);
+
+ g_signal_connect (da,
+ "expose-event",
+ G_CALLBACK (da_expose),
+ offscreen);
+
+ g_signal_connect (offscreen,
+ "damage-event",
+ G_CALLBACK (offscreen_damage),
+ da);
+
+ gtk_widget_add_events (da, GDK_BUTTON_PRESS_MASK);
+ g_signal_connect (da, "button_press_event", G_CALLBACK (da_button_press),
+ button);
+
+ gtk_widget_show_all (window);
+
+ gtk_main();
+
+ return 0;
+}