[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