diff options
Diffstat (limited to 'gfx/cairo/dasharray-zero-gap.patch')
-rw-r--r-- | gfx/cairo/dasharray-zero-gap.patch | 60 |
1 files changed, 60 insertions, 0 deletions
diff --git a/gfx/cairo/dasharray-zero-gap.patch b/gfx/cairo/dasharray-zero-gap.patch new file mode 100644 index 000000000..e26580ae1 --- /dev/null +++ b/gfx/cairo/dasharray-zero-gap.patch @@ -0,0 +1,60 @@ +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); |