summaryrefslogtreecommitdiff
path: root/src/cairo-polygon.c
diff options
context:
space:
mode:
authorChris Wilson <chris@chris-wilson.co.uk>2013-02-08 13:22:01 +0000
committerChris Wilson <chris@chris-wilson.co.uk>2013-02-08 13:22:01 +0000
commitea16302e45ced56e6f12b8520e9f530e1ffc68c4 (patch)
tree755a7bd7237cd988d110b603708bd4f89fa63bbe /src/cairo-polygon.c
parent8cfbdf2f02ba01d5638a91c9f3f7fc228b402caa (diff)
downloadcairo-ea16302e45ced56e6f12b8520e9f530e1ffc68c4.tar.gz
polygon: Avoid computing the unused intersection coordinates
If we only ignore the result of the computed boundary intersection, because the edge is inside that boundary, then we can simply forgo the calculation. Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
Diffstat (limited to 'src/cairo-polygon.c')
-rw-r--r--src/cairo-polygon.c13
1 files changed, 8 insertions, 5 deletions
diff --git a/src/cairo-polygon.c b/src/cairo-polygon.c
index 4c5861df4..b0424f6e7 100644
--- a/src/cairo-polygon.c
+++ b/src/cairo-polygon.c
@@ -390,11 +390,6 @@ _add_clipped_edge (cairo_polygon_t *polygon,
cairo_fixed_t left_y, right_y;
cairo_bool_t top_left_to_bottom_right;
- left_y = _cairo_edge_compute_intersection_y_for_x (p1, p2,
- limits->p1.x);
- right_y = _cairo_edge_compute_intersection_y_for_x (p1, p2,
- limits->p2.x);
-
/*
* The edge intersects the lines corresponding to the left
* and right sides of the limit box at left_y and right_y,
@@ -425,6 +420,8 @@ _add_clipped_edge (cairo_polygon_t *polygon,
if (pleft >= limits->p1.x) {
left_y = top_y;
} else {
+ left_y = _cairo_edge_compute_intersection_y_for_x (p1, p2,
+ limits->p1.x);
if (_cairo_edge_compute_intersection_x_for_y (p1, p2, left_y) < limits->p1.x)
left_y++;
}
@@ -440,6 +437,8 @@ _add_clipped_edge (cairo_polygon_t *polygon,
if (pright <= limits->p2.x) {
right_y = bot_y;
} else {
+ right_y = _cairo_edge_compute_intersection_y_for_x (p1, p2,
+ limits->p2.x);
if (_cairo_edge_compute_intersection_x_for_y (p1, p2, right_y) > limits->p2.x)
right_y--;
}
@@ -455,6 +454,8 @@ _add_clipped_edge (cairo_polygon_t *polygon,
if (pright <= limits->p2.x) {
right_y = top_y;
} else {
+ right_y = _cairo_edge_compute_intersection_y_for_x (p1, p2,
+ limits->p2.x);
if (_cairo_edge_compute_intersection_x_for_y (p1, p2, right_y) > limits->p2.x)
right_y++;
}
@@ -470,6 +471,8 @@ _add_clipped_edge (cairo_polygon_t *polygon,
if (pleft >= limits->p1.x) {
left_y = bot_y;
} else {
+ left_y = _cairo_edge_compute_intersection_y_for_x (p1, p2,
+ limits->p1.x);
if (_cairo_edge_compute_intersection_x_for_y (p1, p2, left_y) < limits->p1.x)
left_y--;
}