diff options
author | Chris Wilson <chris@chris-wilson.co.uk> | 2008-11-30 13:49:24 +0000 |
---|---|---|
committer | Chris Wilson <chris@chris-wilson.co.uk> | 2009-01-29 14:55:21 +0000 |
commit | dd4276c6618aa250637e4499bc7cb0a35b24448c (patch) | |
tree | 2ea77749766b4b3f37cab5092f4acb59ef398007 /src/cairo-stroke-style.c | |
parent | 7f95288c03a400bf770165d427ef623d924b3b47 (diff) | |
download | cairo-dd4276c6618aa250637e4499bc7cb0a35b24448c.tar.gz |
[stroker] Rectilinear dashing.
Extend the rectilinear stroker to handle dashes, so that for pixel-aligned
dashed strokes we completely avoid tessellation overhead.
Diffstat (limited to 'src/cairo-stroke-style.c')
-rw-r--r-- | src/cairo-stroke-style.c | 18 |
1 files changed, 14 insertions, 4 deletions
diff --git a/src/cairo-stroke-style.c b/src/cairo-stroke-style.c index edc4f8890..d808ad8bc 100644 --- a/src/cairo-stroke-style.c +++ b/src/cairo-stroke-style.c @@ -95,9 +95,19 @@ _cairo_stroke_style_max_distance_from_path (const cairo_stroke_style_t *style, const cairo_matrix_t *ctm, double *dx, double *dy) { - double style_expansion = MAX(style->line_cap == CAIRO_LINE_CAP_SQUARE ? M_SQRT1_2 : 0.5, - style->line_join == CAIRO_LINE_JOIN_MITER ? style->miter_limit : 0.5); + double style_expansion = 0.5; - *dx = style->line_width * style_expansion * (fabs(ctm->xx) + fabs(ctm->xy)); - *dy = style->line_width * style_expansion * (fabs(ctm->yy) + fabs(ctm->yx)); + if (style->line_cap == CAIRO_LINE_CAP_SQUARE) + style_expansion = M_SQRT1_2; + + if (style->line_join == CAIRO_LINE_JOIN_MITER && + style_expansion < style->miter_limit) + { + style_expansion = style->miter_limit; + } + + style_expansion *= style->line_width; + + *dx = style_expansion * (fabs (ctm->xx) + fabs (ctm->xy)); + *dy = style_expansion * (fabs (ctm->yy) + fabs (ctm->yx)); } |