diff options
author | Carl Worth <cworth@cworth.org> | 2006-11-07 01:42:21 -0800 |
---|---|---|
committer | Carl Worth <cworth@cworth.org> | 2006-11-07 01:42:21 -0800 |
commit | fc584e1fbb87752f6123fbc02c1c27e538dd13f0 (patch) | |
tree | bc9848b61d5c996adef8d6eb149c84656d2b3895 /src/cairo-matrix.c | |
parent | 777eaf326a56bb3b2ec3e6408309336d2bf6754f (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.c | 39 |
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 |