[cairo-commit] pycairo/cairo pycairo-context.c, 1.76, 1.77 pycairo-private.h, 1.40, 1.41 pycairo-pattern.c, 1.36, 1.37 pycairo-surface.c, 1.83, 1.84

Steve Chaplin commit at pdx.freedesktop.org
Wed Dec 27 23:55:52 PST 2006


Committed by: stevech1097

Update of /cvs/cairo/pycairo/cairo
In directory kemper:/tmp/cvs-serv28637/cairo

Modified Files:
	pycairo-context.c pycairo-private.h pycairo-pattern.c 
	pycairo-surface.c 
Log Message:
'SC'

Index: pycairo-context.c
===================================================================
RCS file: /cvs/cairo/pycairo/cairo/pycairo-context.c,v
retrieving revision 1.76
retrieving revision 1.77
diff -u -d -r1.76 -r1.77
--- pycairo-context.c	28 Dec 2006 02:44:21 -0000	1.76
+++ pycairo-context.c	28 Dec 2006 07:55:48 -0000	1.77
@@ -35,23 +35,6 @@
 #endif
 #include "pycairo-private.h"
 
-#define RETURN_NULL_IF_CONTEXT_STATUS_ERROR(obj) \
-    do {                                         \
-	cairo_status_t status = cairo_status (obj->ctx); \
-	if (status != CAIRO_STATUS_SUCCESS) { \
-	    Pycairo_Check_Status (status);    \
-            return NULL;		      \
-	}                                     \
-    } while (0)
-
-#define RETURN_NULL_IF_STATUS_ERROR(status)   \
-    do {                                      \
-	if (status != CAIRO_STATUS_SUCCESS) { \
-	    Pycairo_Check_Status (status);    \
-            return NULL;		      \
-	}                                     \
-    } while (0)
-
 
 /* Take a PyBaseString (str or unicode) object and return a pointer to the
  * UTF-8 encoded string.
@@ -132,24 +115,11 @@
 static PyObject *
 pycairo_new (PyTypeObject *type, PyObject *args, PyObject *kwds)
 {
-    PyObject *o;
     PycairoSurface *s;
-
     if (!PyArg_ParseTuple(args, "O!:Context.__new__",
 			  &PycairoSurface_Type, &s))
 	return NULL;
-
-    o = type->tp_alloc(type, 0);
-    if (o != NULL) {
-	cairo_t *ctx = cairo_create (s->surface);
-	if (Pycairo_Check_Status (cairo_status (ctx))) {
-	    cairo_destroy (ctx);
-	    Py_DECREF(o);
-	    return NULL;
-	}
-	((PycairoContext *)o)->ctx = ctx;
-    }
-    return o;
+    return PycairoContext_FromContext (cairo_create (s->surface), NULL, NULL);
 }
 
 static PyObject *
@@ -162,7 +132,7 @@
 	return NULL;
 
     cairo_append_path (o->ctx, p->path);
-    RETURN_NULL_IF_CONTEXT_STATUS_ERROR(o);
+    RETURN_NULL_IF_CAIRO_CONTEXT_ERROR(o->ctx);
     Py_RETURN_NONE;
 }
 
@@ -176,7 +146,7 @@
 	return NULL;
 
     cairo_arc (o->ctx, xc, yc, radius, angle1, angle2);
-    RETURN_NULL_IF_CONTEXT_STATUS_ERROR(o);
+    RETURN_NULL_IF_CAIRO_CONTEXT_ERROR(o->ctx);
     Py_RETURN_NONE;
 }
 
@@ -190,7 +160,7 @@
 	return NULL;
 
     cairo_arc_negative (o->ctx, xc, yc, radius, angle1, angle2);
-    RETURN_NULL_IF_CONTEXT_STATUS_ERROR(o);
+    RETURN_NULL_IF_CAIRO_CONTEXT_ERROR(o->ctx);
     Py_RETURN_NONE;
 }
 
@@ -198,7 +168,7 @@
 pycairo_clip (PycairoContext *o)
 {
     cairo_clip (o->ctx);
-    RETURN_NULL_IF_CONTEXT_STATUS_ERROR(o);
+    RETURN_NULL_IF_CAIRO_CONTEXT_ERROR(o->ctx);
     Py_RETURN_NONE;
 }
 
@@ -207,7 +177,7 @@
 {
     double x1, y1, x2, y2;
     cairo_clip_extents (o->ctx, &x1, &y1, &x2, &y2);
-    RETURN_NULL_IF_CONTEXT_STATUS_ERROR(o);
+    RETURN_NULL_IF_CAIRO_CONTEXT_ERROR(o->ctx);
     return Py_BuildValue("(dddd)", x1, y1, x2, y2);
 }
 
@@ -215,7 +185,7 @@
 pycairo_clip_preserve (PycairoContext *o)
 {
     cairo_clip_preserve (o->ctx);
-    RETURN_NULL_IF_CONTEXT_STATUS_ERROR(o);
+    RETURN_NULL_IF_CAIRO_CONTEXT_ERROR(o->ctx);
     Py_RETURN_NONE;
 }
 
@@ -223,15 +193,48 @@
 pycairo_close_path (PycairoContext *o)
 {
     cairo_close_path (o->ctx);
-    RETURN_NULL_IF_CONTEXT_STATUS_ERROR(o);
+    RETURN_NULL_IF_CAIRO_CONTEXT_ERROR(o->ctx);
     Py_RETURN_NONE;
 }
 
+/* a possible candidate for an iterator (like cairo_copy_path), but for the
+ * typical rectangle_list a simple Python tuple in fine?
+ */
+static PyObject *
+pycairo_copy_clip_rectangles (PycairoContext *o)
+{
+    int i;
+    PyObject *rv = NULL;
+    cairo_rectangle_list_t *rlist = cairo_copy_clip_rectangles (o->ctx);
+    if (rlist->status != CAIRO_STATUS_SUCCESS) {
+	Pycairo_Check_Status (rlist->status);
+	goto exit;
+    }
+
+    rv = PyTuple_New(rlist->num_rectangles);
+    if (rv == NULL)
+	goto exit;
+
+    for (i = 0; i < rlist->num_rectangles; i++) {
+	cairo_rectangle_t *r = &rlist->rectangles[i];
+	PyObject *py_rect = Py_BuildValue("(dddd)", r->x, r->y,
+					  r->width, r->height);
+	if (py_rect == NULL) {
+	    Py_CLEAR(rv);
+	    goto exit;
+	}
+	PyTuple_SET_ITEM (rv, i, py_rect);
+    }
+ exit:
+    cairo_rectangle_list_destroy(rlist);
+    return rv;
+}
+
 static PyObject *
 pycairo_copy_page (PycairoContext *o)
 {
     cairo_copy_page (o->ctx);
-    RETURN_NULL_IF_CONTEXT_STATUS_ERROR(o);
+    RETURN_NULL_IF_CAIRO_CONTEXT_ERROR(o->ctx);
     Py_RETURN_NONE;
 }
 
@@ -257,7 +260,7 @@
 	return NULL;
 
     cairo_curve_to (o->ctx, x1, y1, x2, y2, x3, y3);
-    RETURN_NULL_IF_CONTEXT_STATUS_ERROR(o);
+    RETURN_NULL_IF_CAIRO_CONTEXT_ERROR(o->ctx);
     Py_RETURN_NONE;
 }
 
@@ -270,7 +273,7 @@
 	return NULL;
 
     cairo_device_to_user(o->ctx, &x, &y);
-    RETURN_NULL_IF_CONTEXT_STATUS_ERROR(o);
+    RETURN_NULL_IF_CAIRO_CONTEXT_ERROR(o->ctx);
     return Py_BuildValue("(dd)", x, y);
 }
 
@@ -284,7 +287,7 @@
 	return NULL;
 
     cairo_device_to_user_distance (o->ctx, &dx, &dy);
-    RETURN_NULL_IF_CONTEXT_STATUS_ERROR(o);
+    RETURN_NULL_IF_CAIRO_CONTEXT_ERROR(o->ctx);
     return Py_BuildValue("(dd)", dx, dy);
 }
 
@@ -292,7 +295,7 @@
 pycairo_fill (PycairoContext *o)
 {
     cairo_fill (o->ctx);
-    RETURN_NULL_IF_CONTEXT_STATUS_ERROR(o);
+    RETURN_NULL_IF_CAIRO_CONTEXT_ERROR(o->ctx);
     Py_RETURN_NONE;
 }
 
@@ -301,7 +304,7 @@
 {
     double x1, y1, x2, y2;
     cairo_fill_extents (o->ctx, &x1, &y1, &x2, &y2);
-    RETURN_NULL_IF_CONTEXT_STATUS_ERROR(o);
+    RETURN_NULL_IF_CAIRO_CONTEXT_ERROR(o->ctx);
     return Py_BuildValue("(dddd)", x1, y1, x2, y2);
 }
 
@@ -309,7 +312,7 @@
 pycairo_fill_preserve (PycairoContext *o)
 {
     cairo_fill_preserve (o->ctx);
-    RETURN_NULL_IF_CONTEXT_STATUS_ERROR(o);
+    RETURN_NULL_IF_CAIRO_CONTEXT_ERROR(o->ctx);
     Py_RETURN_NONE;
 }
 
@@ -319,7 +322,7 @@
     cairo_font_extents_t e;
 
     cairo_font_extents (o->ctx, &e);
-    RETURN_NULL_IF_CONTEXT_STATUS_ERROR(o);
+    RETURN_NULL_IF_CAIRO_CONTEXT_ERROR(o->ctx);
     return Py_BuildValue("(ddddd)", e.ascent, e.descent, e.height,
 			 e.max_x_advance, e.max_y_advance);
 }
@@ -347,7 +350,7 @@
     cairo_status_t status;
 
     status = cairo_get_dash_count (o->ctx, &count);
-    RETURN_NULL_IF_STATUS_ERROR(status);
+    RETURN_NULL_IF_CAIRO_ERROR(status);
 
     dashes = PyMem_Malloc (count * sizeof(double));
     if (dashes == NULL)
@@ -491,7 +494,7 @@
 pycairo_identity_matrix (PycairoContext *o)
 {
     cairo_identity_matrix (o->ctx);
-    RETURN_NULL_IF_CONTEXT_STATUS_ERROR(o);
+    RETURN_NULL_IF_CAIRO_CONTEXT_ERROR(o->ctx);
     Py_RETURN_NONE;
 }
 
@@ -505,7 +508,7 @@
 	return NULL;
 
     result = cairo_in_fill (o->ctx, x, y) ? Py_True : Py_False;
-    RETURN_NULL_IF_CONTEXT_STATUS_ERROR(o);
+    RETURN_NULL_IF_CAIRO_CONTEXT_ERROR(o->ctx);
     Py_INCREF(result);
     return result;
 }
@@ -520,7 +523,7 @@
 	return NULL;
 
     result = cairo_in_stroke (o->ctx, x, y) ? Py_True : Py_False;
-    RETURN_NULL_IF_CONTEXT_STATUS_ERROR(o);
+    RETURN_NULL_IF_CAIRO_CONTEXT_ERROR(o->ctx);
     Py_INCREF(result);
     return result;
 }
@@ -534,7 +537,7 @@
 	return NULL;
 
     cairo_line_to (o->ctx, x, y);
-    RETURN_NULL_IF_CONTEXT_STATUS_ERROR(o);
+    RETURN_NULL_IF_CAIRO_CONTEXT_ERROR(o->ctx);
     Py_RETURN_NONE;
 }
 
@@ -547,7 +550,7 @@
 	return NULL;
 
     cairo_mask (o->ctx, p->pattern);
-    RETURN_NULL_IF_CONTEXT_STATUS_ERROR(o);
+    RETURN_NULL_IF_CAIRO_CONTEXT_ERROR(o->ctx);
     Py_RETURN_NONE;
 }
 
@@ -562,7 +565,7 @@
 	return NULL;
 
     cairo_mask_surface (o->ctx, s->surface, surface_x, surface_y);
-    RETURN_NULL_IF_CONTEXT_STATUS_ERROR(o);
+    RETURN_NULL_IF_CAIRO_CONTEXT_ERROR(o->ctx);
     Py_RETURN_NONE;
 }
 
@@ -575,7 +578,7 @@
 	return NULL;
 
     cairo_move_to (o->ctx, x, y);
-    RETURN_NULL_IF_CONTEXT_STATUS_ERROR(o);
+    RETURN_NULL_IF_CAIRO_CONTEXT_ERROR(o->ctx);
     Py_RETURN_NONE;
 }
 
@@ -583,7 +586,7 @@
 pycairo_new_path (PycairoContext *o)
 {
     cairo_new_path (o->ctx);
-    RETURN_NULL_IF_CONTEXT_STATUS_ERROR(o);
+    RETURN_NULL_IF_CAIRO_CONTEXT_ERROR(o->ctx);
     Py_RETURN_NONE;
 }
 
@@ -591,7 +594,7 @@
 pycairo_new_sub_path (PycairoContext *o)
 {
     cairo_new_sub_path (o->ctx);
-    RETURN_NULL_IF_CONTEXT_STATUS_ERROR(o);
+    RETURN_NULL_IF_CAIRO_CONTEXT_ERROR(o->ctx);
     Py_RETURN_NONE;
 }
 
@@ -599,7 +602,7 @@
 pycairo_paint (PycairoContext *o)
 {
     cairo_paint (o->ctx);
-    RETURN_NULL_IF_CONTEXT_STATUS_ERROR(o);
+    RETURN_NULL_IF_CAIRO_CONTEXT_ERROR(o->ctx);
     Py_RETURN_NONE;
 }
 
@@ -612,7 +615,7 @@
 	return NULL;
 
     cairo_paint_with_alpha (o->ctx, alpha);
-    RETURN_NULL_IF_CONTEXT_STATUS_ERROR(o);
+    RETURN_NULL_IF_CAIRO_CONTEXT_ERROR(o->ctx);
     Py_RETURN_NONE;
 }
 
@@ -633,7 +636,7 @@
 pycairo_push_group (PycairoContext *o)
 {
     cairo_push_group (o->ctx);
-    RETURN_NULL_IF_CONTEXT_STATUS_ERROR(o);
+    RETURN_NULL_IF_CAIRO_CONTEXT_ERROR(o->ctx);
     Py_RETURN_NONE;
 }
 
@@ -646,7 +649,7 @@
 			  &content))
 	return NULL;
     cairo_push_group_with_content (o->ctx, content);
-    RETURN_NULL_IF_CONTEXT_STATUS_ERROR(o);
+    RETURN_NULL_IF_CAIRO_CONTEXT_ERROR(o->ctx);
     Py_RETURN_NONE;
 }
 
@@ -660,7 +663,7 @@
 	return NULL;
 
     cairo_rectangle (o->ctx, x, y, width, height);
-    RETURN_NULL_IF_CONTEXT_STATUS_ERROR(o);
+    RETURN_NULL_IF_CAIRO_CONTEXT_ERROR(o->ctx);
     Py_RETURN_NONE;
 }
 
@@ -674,7 +677,7 @@
 	return NULL;
 
     cairo_rel_curve_to (o->ctx, dx1, dy1, dx2, dy2, dx3, dy3);
-    RETURN_NULL_IF_CONTEXT_STATUS_ERROR(o);
+    RETURN_NULL_IF_CAIRO_CONTEXT_ERROR(o->ctx);
     Py_RETURN_NONE;
 }
 
@@ -687,7 +690,7 @@
 	return NULL;
 
     cairo_rel_line_to (o->ctx, dx, dy);
-    RETURN_NULL_IF_CONTEXT_STATUS_ERROR(o);
+    RETURN_NULL_IF_CAIRO_CONTEXT_ERROR(o->ctx);
     Py_RETURN_NONE;
 }
 
@@ -700,7 +703,7 @@
 	return NULL;
 
     cairo_rel_move_to (o->ctx, dx, dy);
-    RETURN_NULL_IF_CONTEXT_STATUS_ERROR(o);
+    RETURN_NULL_IF_CAIRO_CONTEXT_ERROR(o->ctx);
     Py_RETURN_NONE;
 }
 
@@ -708,7 +711,7 @@
 pycairo_reset_clip (PycairoContext *o)
 {
     cairo_reset_clip (o->ctx);
-    RETURN_NULL_IF_CONTEXT_STATUS_ERROR(o);
+    RETURN_NULL_IF_CAIRO_CONTEXT_ERROR(o->ctx);
     Py_RETURN_NONE;
 }
 
@@ -716,7 +719,7 @@
 pycairo_restore (PycairoContext *o)
 {
     cairo_restore (o->ctx);
-    RETURN_NULL_IF_CONTEXT_STATUS_ERROR(o);
+    RETURN_NULL_IF_CAIRO_CONTEXT_ERROR(o->ctx);
     Py_RETURN_NONE;
 }
 
@@ -729,7 +732,7 @@
 	return NULL;
 
     cairo_rotate (o->ctx, angle);
-    RETURN_NULL_IF_CONTEXT_STATUS_ERROR(o);
+    RETURN_NULL_IF_CAIRO_CONTEXT_ERROR(o->ctx);
     Py_RETURN_NONE;
 }
 
@@ -737,7 +740,7 @@
 pycairo_save (PycairoContext *o)
 {
     cairo_save (o->ctx);
-    RETURN_NULL_IF_CONTEXT_STATUS_ERROR(o);
+    RETURN_NULL_IF_CAIRO_CONTEXT_ERROR(o->ctx);
     Py_RETURN_NONE;
 }
 
@@ -750,7 +753,7 @@
 	return NULL;
 
     cairo_scale (o->ctx, sx, sy);
-    RETURN_NULL_IF_CONTEXT_STATUS_ERROR(o);
+    RETURN_NULL_IF_CAIRO_CONTEXT_ERROR(o->ctx);
     Py_RETURN_NONE;
 }
 
@@ -771,7 +774,7 @@
 	return NULL;
 
     cairo_select_font_face (o->ctx, family, slant, weight);
-    RETURN_NULL_IF_CONTEXT_STATUS_ERROR(o);
+    RETURN_NULL_IF_CAIRO_CONTEXT_ERROR(o->ctx);
     Py_RETURN_NONE;
 }
 
@@ -784,7 +787,7 @@
 	return NULL;
 
     cairo_set_antialias (o->ctx, antialias);
-    RETURN_NULL_IF_CONTEXT_STATUS_ERROR(o);
+    RETURN_NULL_IF_CAIRO_CONTEXT_ERROR(o->ctx);
     Py_RETURN_NONE;
 }
 
@@ -821,7 +824,7 @@
     cairo_set_dash (o->ctx, dashes, num_dashes, offset);
     PyMem_Free (dashes);
     Py_DECREF(py_dashes);
-    RETURN_NULL_IF_CONTEXT_STATUS_ERROR(o);
+    RETURN_NULL_IF_CAIRO_CONTEXT_ERROR(o->ctx);
     Py_RETURN_NONE;
 }
 
@@ -834,7 +837,7 @@
 	return NULL;
 
     cairo_set_fill_rule (o->ctx, fill_rule);
-    RETURN_NULL_IF_CONTEXT_STATUS_ERROR(o);
+    RETURN_NULL_IF_CAIRO_CONTEXT_ERROR(o->ctx);
     Py_RETURN_NONE;
 }
 
@@ -848,7 +851,7 @@
 	return NULL;
 
     cairo_set_font_matrix (o->ctx, &matrix->matrix);
-    RETURN_NULL_IF_CONTEXT_STATUS_ERROR(o);
+    RETURN_NULL_IF_CAIRO_CONTEXT_ERROR(o->ctx);
     Py_RETURN_NONE;
 }
 
@@ -865,7 +868,7 @@
 			"cairo.FontFace or None");
 	return NULL;
     }
-    RETURN_NULL_IF_CONTEXT_STATUS_ERROR(o);
+    RETURN_NULL_IF_CAIRO_CONTEXT_ERROR(o->ctx);
     Py_RETURN_NONE;
 }
 
@@ -879,7 +882,7 @@
 	return NULL;
 
     cairo_set_font_options (o->ctx, options->font_options);
-    RETURN_NULL_IF_CONTEXT_STATUS_ERROR(o);
+    RETURN_NULL_IF_CAIRO_CONTEXT_ERROR(o->ctx);
     Py_RETURN_NONE;
 }
 
@@ -892,7 +895,7 @@
 	return NULL;
 
     cairo_set_font_size (o->ctx, size);
-    RETURN_NULL_IF_CONTEXT_STATUS_ERROR(o);
+    RETURN_NULL_IF_CAIRO_CONTEXT_ERROR(o->ctx);
     Py_RETURN_NONE;
 }
 
@@ -905,7 +908,7 @@
 	return NULL;
 
     cairo_set_line_cap (o->ctx, line_cap);
-    RETURN_NULL_IF_CONTEXT_STATUS_ERROR(o);
+    RETURN_NULL_IF_CAIRO_CONTEXT_ERROR(o->ctx);
     Py_RETURN_NONE;
 }
 
@@ -918,7 +921,7 @@
 	return NULL;
 
     cairo_set_line_join (o->ctx, line_join);
-    RETURN_NULL_IF_CONTEXT_STATUS_ERROR(o);
+    RETURN_NULL_IF_CAIRO_CONTEXT_ERROR(o->ctx);
     Py_RETURN_NONE;
 }
 
@@ -931,7 +934,7 @@
 	return NULL;
 
     cairo_set_line_width (o->ctx, width);
-    RETURN_NULL_IF_CONTEXT_STATUS_ERROR(o);
+    RETURN_NULL_IF_CAIRO_CONTEXT_ERROR(o->ctx);
     Py_RETURN_NONE;
 }
 
@@ -945,7 +948,7 @@
 	return NULL;
 
     cairo_set_matrix (o->ctx, &matrix->matrix);
-    RETURN_NULL_IF_CONTEXT_STATUS_ERROR(o);
+    RETURN_NULL_IF_CAIRO_CONTEXT_ERROR(o->ctx);
     Py_RETURN_NONE;
 }
 
@@ -958,7 +961,7 @@
 	return NULL;
 
     cairo_set_miter_limit (o->ctx, limit);
-    RETURN_NULL_IF_CONTEXT_STATUS_ERROR(o);
+    RETURN_NULL_IF_CAIRO_CONTEXT_ERROR(o->ctx);
     Py_RETURN_NONE;
 }
 
@@ -971,7 +974,7 @@
 	return NULL;
 
     cairo_set_operator(o->ctx, op);
-    RETURN_NULL_IF_CONTEXT_STATUS_ERROR(o);
+    RETURN_NULL_IF_CAIRO_CONTEXT_ERROR(o->ctx);
     Py_RETURN_NONE;
 }
 
@@ -985,7 +988,7 @@
 	return NULL;
 
     cairo_set_source (o->ctx, p->pattern);
-    RETURN_NULL_IF_CONTEXT_STATUS_ERROR(o);
+    RETURN_NULL_IF_CAIRO_CONTEXT_ERROR(o->ctx);
     Py_RETURN_NONE;
 }
 
@@ -999,7 +1002,7 @@
 	return NULL;
 
     cairo_set_source_rgb (o->ctx, red, green, blue);
-    RETURN_NULL_IF_CONTEXT_STATUS_ERROR(o);
+    RETURN_NULL_IF_CAIRO_CONTEXT_ERROR(o->ctx);
     Py_RETURN_NONE;
 }
 
@@ -1014,7 +1017,7 @@
 	return NULL;
 
     cairo_set_source_rgba (o->ctx, red, green, blue, alpha);
-    RETURN_NULL_IF_CONTEXT_STATUS_ERROR(o);
+    RETURN_NULL_IF_CAIRO_CONTEXT_ERROR(o->ctx);
     Py_RETURN_NONE;
 }
 
@@ -1029,7 +1032,7 @@
 	return NULL;
 
     cairo_set_source_surface (o->ctx, surface->surface, x, y);
-    RETURN_NULL_IF_CONTEXT_STATUS_ERROR(o);
+    RETURN_NULL_IF_CAIRO_CONTEXT_ERROR(o->ctx);
     Py_RETURN_NONE;
 }
 
@@ -1042,7 +1045,7 @@
 	return NULL;
 
     cairo_set_tolerance (o->ctx, tolerance);
-    RETURN_NULL_IF_CONTEXT_STATUS_ERROR(o);
+    RETURN_NULL_IF_CAIRO_CONTEXT_ERROR(o->ctx);
     Py_RETURN_NONE;
 }
 
@@ -1050,7 +1053,7 @@
 pycairo_show_page (PycairoContext *o)
 {
     cairo_show_page (o->ctx);
-    RETURN_NULL_IF_CONTEXT_STATUS_ERROR(o);
+    RETURN_NULL_IF_CAIRO_CONTEXT_ERROR(o->ctx);
     Py_RETURN_NONE;
 }
 
@@ -1066,7 +1069,7 @@
     }
 
     cairo_show_text (o->ctx, utf8);
-    RETURN_NULL_IF_CONTEXT_STATUS_ERROR(o);
+    RETURN_NULL_IF_CAIRO_CONTEXT_ERROR(o->ctx);
     Py_RETURN_NONE;
 }
 
@@ -1074,7 +1077,7 @@
 pycairo_stroke (PycairoContext *o)
 {
     cairo_stroke (o->ctx);
-    RETURN_NULL_IF_CONTEXT_STATUS_ERROR(o);
+    RETURN_NULL_IF_CAIRO_CONTEXT_ERROR(o->ctx);
     Py_RETURN_NONE;
 }
 
@@ -1083,7 +1086,7 @@
 {
     double x1, y1, x2, y2;
     cairo_stroke_extents (o->ctx, &x1, &y1, &x2, &y2);
-    RETURN_NULL_IF_CONTEXT_STATUS_ERROR(o);
+    RETURN_NULL_IF_CAIRO_CONTEXT_ERROR(o->ctx);
     return Py_BuildValue("(dddd)", x1, y1, x2, y2);
 }
 
@@ -1091,7 +1094,7 @@
 pycairo_stroke_preserve (PycairoContext *o)
 {
     cairo_stroke_preserve (o->ctx);
-    RETURN_NULL_IF_CONTEXT_STATUS_ERROR(o);
+    RETURN_NULL_IF_CAIRO_CONTEXT_ERROR(o->ctx);
     Py_RETURN_NONE;
 }
 
@@ -1108,7 +1111,7 @@
     }
 
     cairo_text_extents (o->ctx, utf8, &extents);
-    RETURN_NULL_IF_CONTEXT_STATUS_ERROR(o);
+    RETURN_NULL_IF_CAIRO_CONTEXT_ERROR(o->ctx);
     return Py_BuildValue("(dddddd)", extents.x_bearing, extents.y_bearing,
 			 extents.width, extents.height, extents.x_advance,
 			 extents.y_advance);
@@ -1126,7 +1129,7 @@
     }
 
     cairo_text_path (o->ctx, utf8);
-    RETURN_NULL_IF_CONTEXT_STATUS_ERROR(o);
+    RETURN_NULL_IF_CAIRO_CONTEXT_ERROR(o->ctx);
     Py_RETURN_NONE;
 }
 
@@ -1139,7 +1142,7 @@
 	return NULL;
 
     cairo_translate (o->ctx, tx, ty);
-    RETURN_NULL_IF_CONTEXT_STATUS_ERROR(o);
+    RETURN_NULL_IF_CAIRO_CONTEXT_ERROR(o->ctx);
     Py_RETURN_NONE;
 }
 
@@ -1153,7 +1156,7 @@
 	return NULL;
 
     cairo_transform (o->ctx, &matrix->matrix);
-    RETURN_NULL_IF_CONTEXT_STATUS_ERROR(o);
+    RETURN_NULL_IF_CAIRO_CONTEXT_ERROR(o->ctx);
     Py_RETURN_NONE;
 }
 
@@ -1166,7 +1169,7 @@
 	return NULL;
 
     cairo_user_to_device (o->ctx, &x, &y);
-    RETURN_NULL_IF_CONTEXT_STATUS_ERROR(o);
+    RETURN_NULL_IF_CAIRO_CONTEXT_ERROR(o->ctx);
     return Py_BuildValue("(dd)", x, y);
 }
 
@@ -1180,7 +1183,7 @@
 	return NULL;
 
     cairo_user_to_device_distance (o->ctx, &dx, &dy);
-    RETURN_NULL_IF_CONTEXT_STATUS_ERROR(o);
+    RETURN_NULL_IF_CAIRO_CONTEXT_ERROR(o->ctx);
     return Py_BuildValue("(dd)", dx, dy);
 }
 
@@ -1189,6 +1192,7 @@
     /* methods never exposed in a language binding:
      * cairo_destroy()
      * cairo_reference()
+     * cairo_rectangle_list_destroy()
      *
      * cairo_status()
      * cairo_status_string()
@@ -1202,6 +1206,8 @@
     {"clip_extents",    (PyCFunction)pycairo_clip_extents,    METH_NOARGS},
     {"clip_preserve",   (PyCFunction)pycairo_clip_preserve,   METH_NOARGS},
     {"close_path",      (PyCFunction)pycairo_close_path,      METH_NOARGS},
+    {"copy_clip_rectangles", (PyCFunction)pycairo_copy_clip_rectangles,
+                                                              METH_NOARGS},
     {"copy_page",       (PyCFunction)pycairo_copy_page,       METH_NOARGS},
     {"copy_path",       (PyCFunction)pycairo_copy_path,       METH_NOARGS},
     {"copy_path_flat",  (PyCFunction)pycairo_copy_path_flat,  METH_NOARGS},

Index: pycairo-private.h
===================================================================
RCS file: /cvs/cairo/pycairo/cairo/pycairo-private.h,v
retrieving revision 1.40
retrieving revision 1.41
diff -u -d -r1.40 -r1.41
--- pycairo-private.h	21 Sep 2006 12:15:10 -0000	1.40
+++ pycairo-private.h	28 Dec 2006 07:55:48 -0000	1.41
@@ -118,4 +118,41 @@
         } while (0)
 #endif /* PY_MAJOR_VERSION */
 
+/* error checking macros */
+#define RETURN_NULL_IF_CAIRO_ERROR(status)    \
+    do {                                      \
+	if (status != CAIRO_STATUS_SUCCESS) { \
+	    Pycairo_Check_Status (status);    \
+            return NULL;		      \
+	}                                     \
+    } while (0)
+
+#define RETURN_NULL_IF_CAIRO_CONTEXT_ERROR(ctx) \
+    do {                                        \
+	cairo_status_t status = cairo_status (ctx); \
+	if (status != CAIRO_STATUS_SUCCESS) {   \
+	    Pycairo_Check_Status (status);      \
+            return NULL;		        \
+	}                                       \
+    } while (0)
+
+#define RETURN_NULL_IF_CAIRO_PATTERN_ERROR(pattern) \
+    do {                                         \
+	cairo_status_t status = cairo_pattern_status (pattern); \
+	if (status != CAIRO_STATUS_SUCCESS) {    \
+	    Pycairo_Check_Status (status);       \
+            return NULL;		         \
+	}                                        \
+    } while (0)
+
+#define RETURN_NULL_IF_CAIRO_SURFACE_ERROR(surface) \
+    do {                                         \
+	cairo_status_t status = cairo_surface_status (surface); \
+	if (status != CAIRO_STATUS_SUCCESS) {    \
+	    Pycairo_Check_Status (status);       \
+            return NULL;		         \
+	}                                        \
+    } while (0)
+
+
 #endif /* _PYCAIRO_PRIVATE_H_ */

Index: pycairo-pattern.c
===================================================================
RCS file: /cvs/cairo/pycairo/cairo/pycairo-pattern.c,v
retrieving revision 1.36
retrieving revision 1.37
diff -u -d -r1.36 -r1.37
--- pycairo-pattern.c	27 Dec 2006 23:02:08 -0000	1.36
+++ pycairo-pattern.c	28 Dec 2006 07:55:48 -0000	1.37
@@ -388,14 +388,11 @@
 gradient_add_color_stop_rgb (PycairoGradient *o, PyObject *args)
 {
     double offset, red, green, blue;
-
     if (!PyArg_ParseTuple(args, "dddd:Gradient.add_color_stop_rgb",
 			  &offset, &red, &green, &blue))
 	return NULL;
-
     cairo_pattern_add_color_stop_rgb (o->pattern, offset, red, green, blue);
-    if (Pycairo_Check_Status (cairo_pattern_status (o->pattern)))
-	return NULL;
+    RETURN_NULL_IF_CAIRO_PATTERN_ERROR(o->pattern);
     Py_RETURN_NONE;
 }
 
@@ -403,15 +400,12 @@
 gradient_add_color_stop_rgba (PycairoGradient *o, PyObject *args)
 {
     double offset, red, green, blue, alpha;
-
     if (!PyArg_ParseTuple(args, "ddddd:Gradient.add_color_stop_rgba",
 			  &offset, &red, &green, &blue, &alpha))
 	return NULL;
-
     cairo_pattern_add_color_stop_rgba (o->pattern, offset, red,
 				       green, blue, alpha);
-    if (Pycairo_Check_Status (cairo_pattern_status (o->pattern)))
-	return NULL;
+    RETURN_NULL_IF_CAIRO_PATTERN_ERROR(o->pattern);
     Py_RETURN_NONE;
 }
 

Index: pycairo-surface.c
===================================================================
RCS file: /cvs/cairo/pycairo/cairo/pycairo-surface.c,v
retrieving revision 1.83
retrieving revision 1.84
diff -u -d -r1.83 -r1.84
--- pycairo-surface.c	27 Dec 2006 17:01:03 -0000	1.83
+++ pycairo-surface.c	28 Dec 2006 07:55:48 -0000	1.84
@@ -182,9 +182,7 @@
 {
     cairo_surface_finish (o->surface);
     Py_CLEAR(o->base);
-
-    if (Pycairo_Check_Status (cairo_surface_status(o->surface)))
-	return NULL;
+    RETURN_NULL_IF_CAIRO_SURFACE_ERROR(o->surface);
     Py_RETURN_NONE;
 }
 
@@ -192,9 +190,7 @@
 surface_flush (PycairoSurface *o)
 {
     cairo_surface_flush (o->surface);
-
-    if (Pycairo_Check_Status (cairo_surface_status(o->surface)))
-	return NULL;
+    RETURN_NULL_IF_CAIRO_SURFACE_ERROR(o->surface);
     Py_RETURN_NONE;
 }
 
@@ -234,9 +230,7 @@
 	return NULL;
 
     cairo_surface_mark_dirty_rectangle (o->surface, x, y, width, height);
-
-    if (Pycairo_Check_Status (cairo_surface_status(o->surface)))
-	return NULL;
+    RETURN_NULL_IF_CAIRO_SURFACE_ERROR(o->surface);
     Py_RETURN_NONE;
 }
 
@@ -290,8 +284,7 @@
 	status = cairo_surface_write_to_png_stream (o->surface, _write_func,
 						    file);
     }
-    if (Pycairo_Check_Status (status))
-	return NULL;
+    RETURN_NULL_IF_CAIRO_ERROR(status);
     Py_RETURN_NONE;
 }
 #endif  /* CAIRO_HAS_PNG_FUNCTIONS */
@@ -849,8 +842,7 @@
 ps_surface_dsc_begin_page_setup (PycairoPSSurface *o)
 {
     cairo_ps_surface_dsc_begin_page_setup (o->surface);
-    if (Pycairo_Check_Status (cairo_surface_status (o->surface)))
-	return NULL;
+    RETURN_NULL_IF_CAIRO_SURFACE_ERROR(o->surface);
     Py_RETURN_NONE;
 }
 
@@ -858,8 +850,7 @@
 ps_surface_dsc_begin_setup (PycairoPSSurface *o)
 {
     cairo_ps_surface_dsc_begin_setup (o->surface);
-    if (Pycairo_Check_Status (cairo_surface_status (o->surface)))
-	return NULL;
+    RETURN_NULL_IF_CAIRO_SURFACE_ERROR(o->surface);
     Py_RETURN_NONE;
 }
 
@@ -867,13 +858,10 @@
 ps_surface_dsc_comment (PycairoPSSurface *o, PyObject *args)
 {
     const char *comment;
-
     if (!PyArg_ParseTuple(args, "s:PSSurface.dsc_comment", &comment))
 	return NULL;
-
     cairo_ps_surface_dsc_comment (o->surface, comment);
-    if (Pycairo_Check_Status (cairo_surface_status (o->surface)))
-	return NULL;
+    RETURN_NULL_IF_CAIRO_SURFACE_ERROR(o->surface);
     Py_RETURN_NONE;
 }
 



More information about the cairo-commit mailing list