forked from mirrors/gecko-dev
		
	
		
			
				
	
	
		
			60 lines
		
	
	
	
		
			2 KiB
		
	
	
	
		
			Diff
		
	
	
	
	
	
			
		
		
	
	
			60 lines
		
	
	
	
		
			2 KiB
		
	
	
	
		
			Diff
		
	
	
	
	
	
| 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);
 | 
