summaryrefslogtreecommitdiff
path: root/src/cairo-spline.c
diff options
context:
space:
mode:
authorBehdad Esfahbod <behdad@behdad.org>2008-12-28 01:20:37 -0500
committerBehdad Esfahbod <behdad@behdad.org>2008-12-28 01:20:37 -0500
commit8672178bf6c7f3a38e11e224f1d484b1f0c7fd7b (patch)
treeb5a4f417508710c4bed4bba142b6a2b8718b467b /src/cairo-spline.c
parentef0f6c3ca311c41c9062e1298b020eae1212984e (diff)
[spline] Remove duplicated code by using a macro
Diffstat (limited to 'src/cairo-spline.c')
-rw-r--r--src/cairo-spline.c50
1 files changed, 21 insertions, 29 deletions
diff --git a/src/cairo-spline.c b/src/cairo-spline.c
index 9ae15f978..f8c0267f6 100644
--- a/src/cairo-spline.c
+++ b/src/cairo-spline.c
@@ -217,7 +217,7 @@ _cairo_spline_bound (cairo_spline_add_point_func_t add_point_func,
{
double x0, x1, x2, x3;
double y0, y1, y2, y3;
- double a, b, c, delta;
+ double a, b, c;
double t[4];
int t_num = 0, i;
@@ -266,43 +266,35 @@ _cairo_spline_bound (cairo_spline_add_point_func_t add_point_func,
if (0 < (t0) && (t0) < 1) \
t[t_num++] = (t0);
+#define FIND_EXTREMES(a,b,c) \
+ { \
+ double delta = b * b - a * c; \
+ if (a == 0) { \
+ double t0 = -c / (2*b); \
+ ADD (t0); \
+ } else if (delta > 0) { \
+ double sqrt_delta = sqrt (delta); \
+ double t1 = (-b - sqrt_delta) / a; \
+ double t2 = (-b + sqrt_delta) / a; \
+ ADD (t1); \
+ ADD (t2); \
+ } else if (delta == 0) { \
+ double t0 = -b / a; \
+ ADD (t0); \
+ } \
+ }
+
/* Find X extremes */
a = -x0 + 3*x1 - 3*x2 + x3;
b = x0 - 2*x1 + x2;
c = -x0 + x1;
- delta = b * b - a * c;
- if (a == 0) {
- double t0 = -c / (2*b);
- ADD (t0);
- } else if (delta > 0) {
- double sqrt_delta = sqrt (delta);
- double t1 = (-b - sqrt_delta) / a;
- double t2 = (-b + sqrt_delta) / a;
- ADD (t1);
- ADD (t2);
- } else if (delta == 0) {
- double t0 = -b / a;
- ADD (t0);
- }
+ FIND_EXTREMES (a, b, c);
/* Find Y extremes */
a = -y0 + 3*y1 - 3*y2 + y3;
b = y0 - 2*y1 + y2;
c = -y0 + y1;
- delta = b * b - a * c;
- if (a == 0) {
- double t0 = -c / (2*b);
- ADD (t0);
- } else if (delta > 0) {
- double sqrt_delta = sqrt (delta);
- double t1 = (-b - sqrt_delta) / a;
- double t2 = (-b + sqrt_delta) / a;
- ADD (t1);
- ADD (t2);
- } else if (delta == 0) {
- double t0 = -b / a;
- ADD (t0);
- }
+ FIND_EXTREMES (a, b, c);
add_point_func (closure, p0);
for (i = 0; i < t_num; i++) {