summaryrefslogtreecommitdiff
path: root/src/cairo-spline.c
diff options
context:
space:
mode:
authorChris Wilson <chris@chris-wilson.co.uk>2009-07-26 09:03:36 +0100
committerChris Wilson <chris@chris-wilson.co.uk>2009-07-27 10:18:25 +0100
commitf3d265559a2f97152ce8f307ea3ce83463083088 (patch)
tree86d65e07c8786634c423e0aaaa4f4a16ab5a96b2 /src/cairo-spline.c
parent25858d524d158531a71a2e772551b1e497d9d423 (diff)
downloadcairo-f3d265559a2f97152ce8f307ea3ce83463083088.tar.gz
[spline] Treat a straight spline as degenerate.
The fallback for degenerate splines is to treat them as a line-to, so if the spline is straight, we can just replace it with a simple line-to by treating as degenerate.
Diffstat (limited to 'src/cairo-spline.c')
-rw-r--r--src/cairo-spline.c9
1 files changed, 9 insertions, 0 deletions
diff --git a/src/cairo-spline.c b/src/cairo-spline.c
index 45eedbd6a..8bebcb2a8 100644
--- a/src/cairo-spline.c
+++ b/src/cairo-spline.c
@@ -43,6 +43,8 @@ _cairo_spline_init (cairo_spline_t *spline,
const cairo_point_t *a, const cairo_point_t *b,
const cairo_point_t *c, const cairo_point_t *d)
{
+ cairo_slope_t slope;
+
spline->add_point_func = add_point_func;
spline->closure = closure;
@@ -67,6 +69,13 @@ _cairo_spline_init (cairo_spline_t *spline,
else
_cairo_slope_init (&spline->final_slope, &spline->knots.a, &spline->knots.d);
+ _cairo_slope_init (&slope, &spline->knots.a, &spline->knots.d);
+ if (_cairo_slope_compare (&slope, &spline->initial_slope) == 0 &&
+ _cairo_slope_compare (&slope, &spline->final_slope) == 0)
+ {
+ return FALSE; /* just a straight line... */
+ }
+
return TRUE;
}