summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChris Wilson <chris@chris-wilson.co.uk>2009-08-11 15:36:11 +0100
committerChris Wilson <chris@chris-wilson.co.uk>2009-08-29 08:08:33 +0100
commit30e5fa0ce06b2572f09f3d47ee10b692f18ba0ae (patch)
tree6ad69675b51a8b19df9a8e3e82ba51d748d5c02d
parent3fcac1ef21de9526bc1abca902db5755abe463ae (diff)
[polygon] Return status from path ops
This tidies the common case which was to call, for example, _cairo_polygon_line_to(); _cairo_polygon_status();
-rw-r--r--src/cairo-path-fill.c26
-rw-r--r--src/cairo-polygon.c18
-rw-r--r--src/cairoint.h6
3 files changed, 19 insertions, 31 deletions
diff --git a/src/cairo-path-fill.c b/src/cairo-path-fill.c
index d46917d5..f9679443 100644
--- a/src/cairo-path-fill.c
+++ b/src/cairo-path-fill.c
@@ -40,7 +40,6 @@
typedef struct cairo_filler {
double tolerance;
- cairo_point_t current_point;
cairo_polygon_t *polygon;
} cairo_filler_t;
@@ -51,9 +50,6 @@ _cairo_filler_init (cairo_filler_t *filler,
{
filler->tolerance = tolerance;
filler->polygon = polygon;
-
- filler->current_point.x = 0;
- filler->current_point.y = 0;
}
static void
@@ -69,11 +65,7 @@ _cairo_filler_move_to (void *closure,
cairo_polygon_t *polygon = filler->polygon;
_cairo_polygon_close (polygon);
- _cairo_polygon_move_to (polygon, point);
-
- filler->current_point = *point;
-
- return _cairo_polygon_status (filler->polygon);
+ return _cairo_polygon_move_to (polygon, point);
}
static cairo_status_t
@@ -81,13 +73,7 @@ _cairo_filler_line_to (void *closure,
const cairo_point_t *point)
{
cairo_filler_t *filler = closure;
- cairo_polygon_t *polygon = filler->polygon;
-
- _cairo_polygon_line_to (polygon, point);
-
- filler->current_point = *point;
-
- return _cairo_polygon_status (filler->polygon);
+ return _cairo_polygon_line_to (filler->polygon, point);
}
static cairo_status_t
@@ -101,7 +87,7 @@ _cairo_filler_curve_to (void *closure,
if (! _cairo_spline_init (&spline,
_cairo_filler_line_to, filler,
- &filler->current_point, b, c, d))
+ &filler->polygon->current_point, b, c, d))
{
return _cairo_filler_line_to (closure, d);
}
@@ -113,11 +99,7 @@ static cairo_status_t
_cairo_filler_close_path (void *closure)
{
cairo_filler_t *filler = closure;
- cairo_polygon_t *polygon = filler->polygon;
-
- _cairo_polygon_close (polygon);
-
- return _cairo_polygon_status (polygon);
+ return _cairo_polygon_close (filler->polygon);
}
cairo_status_t
diff --git a/src/cairo-polygon.c b/src/cairo-polygon.c
index 9de92bfa..f3e8e4d2 100644
--- a/src/cairo-polygon.c
+++ b/src/cairo-polygon.c
@@ -386,12 +386,12 @@ _cairo_polygon_add_line (cairo_polygon_t *polygon,
} else
_add_edge (polygon, &line->p1, &line->p2, top, bottom, dir);
- return _cairo_polygon_status (polygon);
+ return polygon->status;
}
/* flattened path operations */
-void
+cairo_status_t
_cairo_polygon_move_to (cairo_polygon_t *polygon,
const cairo_point_t *point)
{
@@ -408,9 +408,10 @@ _cairo_polygon_move_to (cairo_polygon_t *polygon,
}
polygon->current_point = *point;
+ return polygon->status;
}
-void
+cairo_status_t
_cairo_polygon_line_to (cairo_polygon_t *polygon,
const cairo_point_t *point)
{
@@ -424,7 +425,7 @@ _cairo_polygon_line_to (cairo_polygon_t *polygon,
_cairo_slope_init (&this, &polygon->current_point, point);
if (_cairo_slope_equal (&polygon->current_edge, &this)) {
polygon->current_point = *point;
- return;
+ return CAIRO_STATUS_SUCCESS;
}
_cairo_polygon_add_edge (polygon,
@@ -450,13 +451,16 @@ _cairo_polygon_line_to (cairo_polygon_t *polygon,
}
polygon->current_point = *point;
+ return polygon->status;
}
-void
+cairo_status_t
_cairo_polygon_close (cairo_polygon_t *polygon)
{
+ cairo_status_t status;
+
if (polygon->has_current_point) {
- _cairo_polygon_line_to (polygon, &polygon->first_point);
+ status = _cairo_polygon_line_to (polygon, &polygon->first_point);
polygon->has_current_point = FALSE;
}
@@ -466,4 +470,6 @@ _cairo_polygon_close (cairo_polygon_t *polygon)
&polygon->current_point);
polygon->has_current_edge = FALSE;
}
+
+ return polygon->status;
}
diff --git a/src/cairoint.h b/src/cairoint.h
index 9fd789da..2afb6904 100644
--- a/src/cairoint.h
+++ b/src/cairoint.h
@@ -2267,15 +2267,15 @@ _cairo_polygon_add_external_edge (void *polygon,
const cairo_point_t *p1,
const cairo_point_t *p2);
-cairo_private void
+cairo_private cairo_status_t
_cairo_polygon_move_to (cairo_polygon_t *polygon,
const cairo_point_t *point);
-cairo_private void
+cairo_private cairo_status_t
_cairo_polygon_line_to (cairo_polygon_t *polygon,
const cairo_point_t *point);
-cairo_private void
+cairo_private cairo_status_t
_cairo_polygon_close (cairo_polygon_t *polygon);
#define _cairo_polygon_status(P) ((cairo_polygon_t *) (P))->status