[gtk+/rendering-cleanup-next: 119/203] testgtk: Connect to draw signals in "composited window" example
- From: Benjamin Otte <otte src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gtk+/rendering-cleanup-next: 119/203] testgtk: Connect to draw signals in "composited window" example
- Date: Thu, 23 Sep 2010 10:41:06 +0000 (UTC)
commit 977cc8883cf8f8e67b79c4b25eaad8c97276cd7c
Author: Benjamin Otte <otte redhat com>
Date: Wed Sep 8 22:31:06 2010 +0200
testgtk: Connect to draw signals in "composited window" example
tests/testgtk.c | 40 ++++++++++------------------------------
1 files changed, 10 insertions(+), 30 deletions(-)
---
diff --git a/tests/testgtk.c b/tests/testgtk.c
index ffc5c8e..c12e82d 100644
--- a/tests/testgtk.c
+++ b/tests/testgtk.c
@@ -335,7 +335,7 @@ create_alpha_window (GtkWidget *widget)
* Composited non-toplevel window
*/
-/* The expose event handler for the event box.
+/* The draw event handler for the event box.
*
* This function simply draws a transparency onto a widget on the area
* for which it receives expose events. This is intended to give the
@@ -348,16 +348,11 @@ create_alpha_window (GtkWidget *widget)
* default background colour).
*/
static gboolean
-transparent_expose (GtkWidget *widget,
- GdkEventExpose *event)
+transparent_draw (GtkWidget *widget,
+ cairo_t *cr)
{
- cairo_t *cr;
-
- cr = gdk_cairo_create (gtk_widget_get_window (widget));
cairo_set_operator (cr, CAIRO_OPERATOR_CLEAR);
- gdk_cairo_region (cr, event->region);
- cairo_fill (cr);
- cairo_destroy (cr);
+ cairo_paint (cr);
return FALSE;
}
@@ -374,20 +369,15 @@ transparent_expose (GtkWidget *widget,
* called before then GTK would just blindly paint over our work.
*/
static gboolean
-window_expose_event (GtkWidget *widget,
- GdkEventExpose *event)
+window_draw (GtkWidget *widget,
+ cairo_t *cr)
{
GtkAllocation allocation;
- cairo_region_t *region;
GtkWidget *child;
- cairo_t *cr;
/* get our child (in this case, the event box) */
child = gtk_bin_get_child (GTK_BIN (widget));
- /* create a cairo context to draw to the window */
- cr = gdk_cairo_create (gtk_widget_get_window (widget));
-
gtk_widget_get_allocation (child, &allocation);
/* the source data is the (composited) event box */
@@ -395,19 +385,9 @@ window_expose_event (GtkWidget *widget,
allocation.x,
allocation.y);
- /* draw no more than our expose event intersects our child */
- region = cairo_region_create_rectangle (&allocation);
- cairo_region_intersect (region, event->region);
- gdk_cairo_region (cr, region);
- cairo_clip (cr);
-
/* composite, with a 50% opacity */
- cairo_set_operator (cr, CAIRO_OPERATOR_OVER);
cairo_paint_with_alpha (cr, 0.5);
- /* we're done */
- cairo_destroy (cr);
-
return FALSE;
}
@@ -439,8 +419,8 @@ create_composited_window (GtkWidget *widget)
* that "transparency" is the background colour for a widget.
*/
gtk_widget_set_app_paintable (GTK_WIDGET (event), TRUE);
- g_signal_connect (event, "expose-event",
- G_CALLBACK (transparent_expose), NULL);
+ g_signal_connect (event, "draw",
+ G_CALLBACK (transparent_draw), NULL);
/* put them inside one another */
gtk_container_set_border_width (GTK_CONTAINER (window), 10);
@@ -460,8 +440,8 @@ create_composited_window (GtkWidget *widget)
* note that we do _after so that the normal (red) background is drawn
* by gtk before our compositing occurs.
*/
- g_signal_connect_after (window, "expose-event",
- G_CALLBACK (window_expose_event), NULL);
+ g_signal_connect_after (window, "draw",
+ G_CALLBACK (window_draw), NULL);
}
if (!gtk_widget_get_visible (window))
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]