summaryrefslogtreecommitdiff
path: root/src/cairo-stroke-style.c
diff options
context:
space:
mode:
authorChris Wilson <chris@chris-wilson.co.uk>2008-11-30 13:49:24 +0000
committerChris Wilson <chris@chris-wilson.co.uk>2009-01-29 14:55:21 +0000
commitdd4276c6618aa250637e4499bc7cb0a35b24448c (patch)
tree2ea77749766b4b3f37cab5092f4acb59ef398007 /src/cairo-stroke-style.c
parent7f95288c03a400bf770165d427ef623d924b3b47 (diff)
downloadcairo-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.c18
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));
}