diff options
author | Benjamin Otte <otte@redhat.com> | 2010-07-17 00:18:35 +0200 |
---|---|---|
committer | Benjamin Otte <otte@redhat.com> | 2010-08-07 15:35:50 +0200 |
commit | ddb905e99a6c76b2a4956f58c4228c49c6a5a35e (patch) | |
tree | ef818e8d405431948b6674f106115ad934c20632 /demos | |
parent | f69034a0792d41fc0a34cb48b5b2b0af68576bb0 (diff) | |
download | gtk+-ddb905e99a6c76b2a4956f58c4228c49c6a5a35e.tar.gz |
gtk-demo: Convert drawingarea example to Cairo
Diffstat (limited to 'demos')
-rw-r--r-- | demos/gtk-demo/drawingarea.c | 60 |
1 files changed, 22 insertions, 38 deletions
diff --git a/demos/gtk-demo/drawingarea.c b/demos/gtk-demo/drawingarea.c index 03e4ddc841..5e80449c73 100644 --- a/demos/gtk-demo/drawingarea.c +++ b/demos/gtk-demo/drawingarea.c @@ -25,6 +25,8 @@ scribble_configure_event (GtkWidget *widget, GdkEventConfigure *event, gpointer data) { + cairo_t *cr; + if (pixmap) g_object_unref (pixmap); @@ -34,12 +36,12 @@ scribble_configure_event (GtkWidget *widget, -1); /* Initialize the pixmap to white */ - gdk_draw_rectangle (pixmap, - widget->style->white_gc, - TRUE, - 0, 0, - widget->allocation.width, - widget->allocation.height); + cr = gdk_cairo_create (pixmap); + + cairo_set_source_rgb (cr, 1, 1, 1); + cairo_paint (cr); + + cairo_destroy (cr); /* We've handled the configure event, no need for further processing. */ return TRUE; @@ -74,6 +76,7 @@ draw_brush (GtkWidget *widget, gdouble y) { GdkRectangle update_rect; + cairo_t *cr; update_rect.x = x - 3; update_rect.y = y - 3; @@ -81,11 +84,10 @@ draw_brush (GtkWidget *widget, update_rect.height = 6; /* Paint to the pixmap, where we store our state */ - gdk_draw_rectangle (pixmap, - widget->style->black_gc, - TRUE, - update_rect.x, update_rect.y, - update_rect.width, update_rect.height); + cr = gdk_cairo_create (pixmap); + + gdk_cairo_rectangle (cr, &update_rect); + cairo_fill (cr); /* Now invalidate the affected region of the drawing area. */ gdk_window_invalidate_rect (widget->window, @@ -146,8 +148,7 @@ checkerboard_expose (GtkWidget *da, gpointer data) { gint i, j, xcount, ycount; - GdkGC *gc1, *gc2; - GdkColor color; + cairo_t *cr; #define CHECK_SIZE 10 #define SPACING 2 @@ -159,21 +160,9 @@ checkerboard_expose (GtkWidget *da, * works. */ - /* It would be a bit more efficient to keep these - * GC's around instead of recreating on each expose, but - * this is the lazy/slow way. - */ - gc1 = gdk_gc_new (da->window); - color.red = 30000; - color.green = 0; - color.blue = 30000; - gdk_gc_set_rgb_fg_color (gc1, &color); - - gc2 = gdk_gc_new (da->window); - color.red = 65535; - color.green = 65535; - color.blue = 65535; - gdk_gc_set_rgb_fg_color (gc2, &color); + cr = gdk_cairo_create (da->window); + gdk_cairo_rectangle (cr, &event->area); + cairo_clip (cr); xcount = 0; i = SPACING; @@ -186,20 +175,16 @@ checkerboard_expose (GtkWidget *da, GdkGC *gc; if (ycount % 2) - gc = gc1; + cairo_set_source_rgb (cr, 0.45777, 0, 0.45777); else - gc = gc2; + cairo_set_source_rgb (cr, 1, 1, 1); /* If we're outside event->area, this will do nothing. * It might be mildly more efficient if we handled * the clipping ourselves, but again we're feeling lazy. */ - gdk_draw_rectangle (da->window, - gc, - TRUE, - i, j, - CHECK_SIZE, - CHECK_SIZE); + cairo_rectangle (cr, i, j, CHECK_SIZE, CHECK_SIZE); + cairo_fill (cr); j += CHECK_SIZE + SPACING; ++ycount; @@ -209,8 +194,7 @@ checkerboard_expose (GtkWidget *da, ++xcount; } - g_object_unref (gc1); - g_object_unref (gc2); + cairo_destroy (cr); /* return TRUE because we've handled this event, so no * further processing is required. |