summaryrefslogtreecommitdiff
path: root/src/cairo-matrix.c
diff options
context:
space:
mode:
authorCarl Worth <cworth@cworth.org>2006-11-07 01:42:21 -0800
committerCarl Worth <cworth@cworth.org>2006-11-07 01:42:21 -0800
commitfc584e1fbb87752f6123fbc02c1c27e538dd13f0 (patch)
treebc9848b61d5c996adef8d6eb149c84656d2b3895 /src/cairo-matrix.c
parent777eaf326a56bb3b2ec3e6408309336d2bf6754f (diff)
Rewrite _cairo_matrix_transform_bounding_box to actually accept a box not a rectangle
It turns out that all of the callers want a box anyway, so this simplfies the code in addition to being more honest to the name. (For those new to the convention, a "box" is an (x1,y2),(x2,y2) pair while a "rectangle" is an (x,y),(width,height) pair.)
Diffstat (limited to 'src/cairo-matrix.c')
-rw-r--r--src/cairo-matrix.c39
1 files changed, 17 insertions, 22 deletions
diff --git a/src/cairo-matrix.c b/src/cairo-matrix.c
index 339079f7..e2f353b2 100644
--- a/src/cairo-matrix.c
+++ b/src/cairo-matrix.c
@@ -357,35 +357,30 @@ slim_hidden_def(cairo_matrix_transform_point);
void
_cairo_matrix_transform_bounding_box (const cairo_matrix_t *matrix,
- double *x, double *y,
- double *width, double *height,
+ double *x1, double *y1,
+ double *x2, double *y2,
cairo_bool_t *is_tight)
{
int i;
double quad_x[4], quad_y[4];
- double dx1, dy1;
- double dx2, dy2;
double min_x, max_x;
double min_y, max_y;
- quad_x[0] = *x;
- quad_y[0] = *y;
+ quad_x[0] = *x1;
+ quad_y[0] = *y1;
cairo_matrix_transform_point (matrix, &quad_x[0], &quad_y[0]);
- dx1 = *width;
- dy1 = 0;
- cairo_matrix_transform_distance (matrix, &dx1, &dy1);
- quad_x[1] = quad_x[0] + dx1;
- quad_y[1] = quad_y[0] + dy1;
+ quad_x[1] = *x2;
+ quad_y[1] = *y1;
+ cairo_matrix_transform_point (matrix, &quad_x[1], &quad_y[1]);
- dx2 = 0;
- dy2 = *height;
- cairo_matrix_transform_distance (matrix, &dx2, &dy2);
- quad_x[2] = quad_x[0] + dx2;
- quad_y[2] = quad_y[0] + dy2;
+ quad_x[2] = *x1;
+ quad_y[2] = *y2;
+ cairo_matrix_transform_point (matrix, &quad_x[2], &quad_y[2]);
- quad_x[3] = quad_x[0] + dx1 + dx2;
- quad_y[3] = quad_y[0] + dy1 + dy2;
+ quad_x[3] = *x2;
+ quad_y[3] = *y2;
+ cairo_matrix_transform_point (matrix, &quad_x[3], &quad_y[3]);
min_x = max_x = quad_x[0];
min_y = max_y = quad_y[0];
@@ -402,10 +397,10 @@ _cairo_matrix_transform_bounding_box (const cairo_matrix_t *matrix,
max_y = quad_y[i];
}
- *x = min_x;
- *y = min_y;
- *width = max_x - min_x;
- *height = max_y - min_y;
+ *x1 = min_x;
+ *y1 = min_y;
+ *x2 = max_x;
+ *y2 = max_y;
if (is_tight) {
/* it's tight if and only if the four corner points form an axis-aligned