[cairo-commit] src/cairo-path-stroke.c src/cairo-rectangle.c

Chris Wilson ickle at kemper.freedesktop.org
Wed Oct 3 09:39:32 PDT 2012


 src/cairo-path-stroke.c |   91 +++++++++++++++++-------------------------------
 src/cairo-rectangle.c   |   16 +-------
 2 files changed, 35 insertions(+), 72 deletions(-)

New commits:
commit d6a05676849509049fc54eea2559803b6247a6fe
Author: Chris Wilson <chris at chris-wilson.co.uk>
Date:   Wed Oct 3 17:38:21 2012 +0100

    stroke: Remove redundant code for computing culling extents
    
    Same code repeated!
    
    Signed-off-by: Chris Wilson <chris at chris-wilson.co.uk>

diff --git a/src/cairo-path-stroke.c b/src/cairo-path-stroke.c
index 5ef212c..66ab3bd 100644
--- a/src/cairo-path-stroke.c
+++ b/src/cairo-path-stroke.c
@@ -88,6 +88,36 @@ typedef struct cairo_stroker {
     cairo_box_t bounds;
 } cairo_stroker_t;
 
+static void
+_cairo_stroker_limit (cairo_stroker_t *stroker,
+		      const cairo_path_fixed_t *path,
+		      const cairo_box_t *boxes,
+		      int num_boxes)
+{
+    double dx, dy;
+    cairo_fixed_t fdx, fdy;
+
+    stroker->has_bounds = TRUE;
+    _cairo_boxes_get_extents (boxes, num_boxes, &stroker->bounds);
+
+    /* Extend the bounds in each direction to account for the maximum area
+     * we might generate trapezoids, to capture line segments that are outside
+     * of the bounds but which might generate rendering that's within bounds.
+     */
+
+    _cairo_stroke_style_max_distance_from_path (&stroker->style, path,
+						stroker->ctm, &dx, &dy);
+
+    fdx = _cairo_fixed_from_double (dx);
+    fdy = _cairo_fixed_from_double (dy);
+
+    stroker->bounds.p1.x -= fdx;
+    stroker->bounds.p2.x += fdx;
+
+    stroker->bounds.p1.y -= fdy;
+    stroker->bounds.p2.y += fdy;
+}
+
 static cairo_status_t
 _cairo_stroker_init (cairo_stroker_t		*stroker,
 		     const cairo_path_fixed_t	*path,
@@ -122,65 +152,14 @@ _cairo_stroker_init (cairo_stroker_t		*stroker,
 
     stroker->add_external_edge = NULL;
 
-    stroker->has_bounds = num_limits;
-    if (stroker->has_bounds) {
-	/* Extend the bounds in each direction to account for the maximum area
-	 * we might generate trapezoids, to capture line segments that are
-	 * outside of the bounds but which might generate rendering that's
-	 * within bounds.
-	 */
-	double dx, dy;
-	cairo_fixed_t fdx, fdy;
-	int i;
-
-	stroker->bounds = limits[0];
-	for (i = 1; i < num_limits; i++)
-	     _cairo_box_add_box (&stroker->bounds, &limits[i]);
-
-	_cairo_stroke_style_max_distance_from_path (stroke_style, path, ctm, &dx, &dy);
-	fdx = _cairo_fixed_from_double (dx);
-	fdy = _cairo_fixed_from_double (dy);
-
-	stroker->bounds.p1.x -= fdx;
-	stroker->bounds.p2.x += fdx;
-	stroker->bounds.p1.y -= fdy;
-	stroker->bounds.p2.y += fdy;
-    }
+    stroker->has_bounds = FALSE;
+    if (num_limits)
+	_cairo_stroker_limit (stroker, path, limits, num_limits);
 
     return CAIRO_STATUS_SUCCESS;
 }
 
 static void
-_cairo_stroker_limit (cairo_stroker_t *stroker,
-		      const cairo_path_fixed_t *path,
-		      const cairo_box_t *boxes,
-		      int num_boxes)
-{
-    double dx, dy;
-    cairo_fixed_t fdx, fdy;
-
-    stroker->has_bounds = TRUE;
-    _cairo_boxes_get_extents (boxes, num_boxes, &stroker->bounds);
-
-    /* Extend the bounds in each direction to account for the maximum area
-     * we might generate trapezoids, to capture line segments that are outside
-     * of the bounds but which might generate rendering that's within bounds.
-     */
-
-    _cairo_stroke_style_max_distance_from_path (&stroker->style, path,
-						stroker->ctm, &dx, &dy);
-
-    fdx = _cairo_fixed_from_double (dx);
-    fdy = _cairo_fixed_from_double (dy);
-
-    stroker->bounds.p1.x -= fdx;
-    stroker->bounds.p2.x += fdx;
-
-    stroker->bounds.p1.y -= fdy;
-    stroker->bounds.p2.y += fdy;
-}
-
-static void
 _cairo_stroker_fini (cairo_stroker_t *stroker)
 {
     _cairo_pen_fini (&stroker->pen);
@@ -1339,10 +1318,6 @@ _cairo_path_fixed_stroke_dashed_to_polygon (const cairo_path_fixed_t	*path,
     stroker.add_external_edge = _cairo_polygon_add_external_edge,
     stroker.closure = polygon;
 
-    if (polygon->num_limits)
-	_cairo_stroker_limit (&stroker, path,
-			      polygon->limits, polygon->num_limits);
-
     status = _cairo_path_fixed_interpret (path,
 					  _cairo_stroker_move_to,
 					  stroker.dash.dashed ?
diff --git a/src/cairo-rectangle.c b/src/cairo-rectangle.c
index 9613065..47f2837 100644
--- a/src/cairo-rectangle.c
+++ b/src/cairo-rectangle.c
@@ -85,22 +85,10 @@ _cairo_boxes_get_extents (const cairo_box_t *boxes,
 			  int num_boxes,
 			  cairo_box_t *extents)
 {
-    int n;
-
     assert (num_boxes > 0);
     *extents = *boxes;
-
-    for (n = 1; n < num_boxes; n++) {
-	if (boxes[n].p1.x < extents->p1.x)
-	    extents->p1.x = boxes[n].p1.x;
-	if (boxes[n].p2.x > extents->p2.x)
-	    extents->p2.x = boxes[n].p2.x;
-
-	if (boxes[n].p1.y < extents->p1.y)
-	    extents->p1.y = boxes[n].p1.y;
-	if (boxes[n].p2.y > extents->p2.y)
-	    extents->p2.y = boxes[n].p2.y;
-    }
+    while (--num_boxes)
+	_cairo_box_add_box (extents, ++boxes);
 }
 
 /* XXX We currently have a confusing mix of boxes and rectangles as


More information about the cairo-commit mailing list