diff --git a/gfx/cairo/cairo/src/cairo-quartz-surface.c b/gfx/cairo/cairo/src/cairo-quartz-surface.c --- a/gfx/cairo/cairo/src/cairo-quartz-surface.c +++ b/gfx/cairo/cairo/src/cairo-quartz-surface.c @@ -2573,29 +2573,43 @@ static cairo_int_status_t if (style->dash && style->num_dashes) { #define STATIC_DASH 32 cairo_quartz_float_t sdash[STATIC_DASH]; cairo_quartz_float_t *fdash = sdash; unsigned int max_dashes = style->num_dashes; unsigned int k; - if (style->num_dashes%2) - max_dashes *= 2; - if (max_dashes > STATIC_DASH) - fdash = _cairo_malloc_ab (max_dashes, sizeof (cairo_quartz_float_t)); - if (fdash == NULL) - return _cairo_error (CAIRO_STATUS_NO_MEMORY); - - for (k = 0; k < max_dashes; k++) - fdash[k] = (cairo_quartz_float_t) style->dash[k % style->num_dashes]; - - CGContextSetLineDash (surface->cgContext, style->dash_offset, fdash, max_dashes); - if (fdash != sdash) - free (fdash); + bool set_line_dash = false; + if (style->num_dashes % 2 == 0) { + for (k = 1; k < max_dashes; k++) { + if (style->dash[k]) { + set_line_dash = true; + break; + } + } + } else + set_line_dash = true; + + if (set_line_dash) { + if (style->num_dashes%2) + max_dashes *= 2; + if (max_dashes > STATIC_DASH) + fdash = _cairo_malloc_ab (max_dashes, sizeof (cairo_quartz_float_t)); + if (fdash == NULL) + return _cairo_error (CAIRO_STATUS_NO_MEMORY); + + for (k = 0; k < max_dashes; k++) + fdash[k] = (cairo_quartz_float_t) style->dash[k % style->num_dashes]; + + CGContextSetLineDash (surface->cgContext, style->dash_offset, fdash, max_dashes); + if (fdash != sdash) + free (fdash); + } else + CGContextSetLineDash (state.context, 0, NULL, 0); } else CGContextSetLineDash (state.context, 0, NULL, 0); _cairo_quartz_cairo_path_to_quartz_context (path, state.context); _cairo_quartz_cairo_matrix_to_quartz (ctm, &strokeTransform); CGContextConcatCTM (state.context, strokeTransform);