[cairo-commit] src/cairo-gstate.c

Chris Wilson ickle at kemper.freedesktop.org
Thu Jun 20 06:26:54 PDT 2013


 src/cairo-gstate.c |   24 ++++++++++++------------
 1 file changed, 12 insertions(+), 12 deletions(-)

New commits:
commit b7331f0c52cc64f2c224eac502afa6c50a1a8d8b
Author: Chris Wilson <chris at chris-wilson.co.uk>
Date:   Thu Jun 20 14:23:15 2013 +0100

    gstate: Speed up stroked path extents
    
    We can skip the intermediate evaluation of the trapezoids for
    determining the extents of a stroked path by using the relatively new
    functions for computing the contours of the stroke. Then we can simply
    use the bbox of the points within the contours to retrieve the path
    extents - which is already provided by the polygon holding the contours
    of the stroke. This provides a faster result with less numerical
    inaccuracy due to fewer stages required in the computation
    
    References: https://bugs.freedesktop.org/show_bug.cgi?id=62375
    Signed-off-by: Chris Wilson <chris at chris-wilson.co.uk>

diff --git a/src/cairo-gstate.c b/src/cairo-gstate.c
index 6319471..b8caa63 100644
--- a/src/cairo-gstate.c
+++ b/src/cairo-gstate.c
@@ -1462,19 +1462,19 @@ _cairo_gstate_stroke_extents (cairo_gstate_t	 *gstate,
     }
 
     if (status == CAIRO_INT_STATUS_UNSUPPORTED) {
-	cairo_traps_t traps;
-
-	_cairo_traps_init (&traps);
-	status = _cairo_path_fixed_stroke_polygon_to_traps (path,
-							    &gstate->stroke_style,
-							    &gstate->ctm,
-							    &gstate->ctm_inverse,
-							    gstate->tolerance,
-							    &traps);
-	empty = traps.num_traps == 0;
+	cairo_polygon_t polygon;
+
+	_cairo_polygon_init (&polygon, NULL, 0);
+	status = _cairo_path_fixed_stroke_to_polygon (path,
+						      &gstate->stroke_style,
+						      &gstate->ctm,
+						      &gstate->ctm_inverse,
+						      gstate->tolerance,
+						      &polygon);
+	empty = polygon.num_edges == 0;
 	if (! empty)
-	    _cairo_traps_extents (&traps, &extents);
-	_cairo_traps_fini (&traps);
+	    extents = polygon.extents;
+	_cairo_polygon_fini (&polygon);
     }
     if (! empty) {
 	_cairo_gstate_extents_to_user_rectangle (gstate, &extents,


More information about the cairo-commit mailing list