[gtk+/gtk-2-22] gtk-demo: Convert drawingarea example to Cairo
- From: Benjamin Otte <otte src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gtk+/gtk-2-22] gtk-demo: Convert drawingarea example to Cairo
- Date: Sat, 7 Aug 2010 13:56:04 +0000 (UTC)
commit ddb905e99a6c76b2a4956f58c4228c49c6a5a35e
Author: Benjamin Otte <otte redhat com>
Date: Sat Jul 17 00:18:35 2010 +0200
gtk-demo: Convert drawingarea example to Cairo
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 03e4ddc..5e80449 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.
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]