[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