forked from mirrors/gecko-dev
		
	
		
			
				
	
	
		
			57 lines
		
	
	
	
		
			1.6 KiB
		
	
	
	
		
			Diff
		
	
	
	
	
	
			
		
		
	
	
			57 lines
		
	
	
	
		
			1.6 KiB
		
	
	
	
		
			Diff
		
	
	
	
	
	
| diff --git a/gfx/cairo/cairo/src/cairo-image-surface.c b/gfx/cairo/cairo/src/cairo-image-surface.c
 | |
| --- a/gfx/cairo/cairo/src/cairo-image-surface.c
 | |
| +++ b/gfx/cairo/cairo/src/cairo-image-surface.c
 | |
| @@ -2885,16 +2885,18 @@ static cairo_status_t
 | |
|      cairo_bool_t need_clip_mask = FALSE;
 | |
|      cairo_status_t status;
 | |
|      struct _cairo_boxes_chunk *chunk;
 | |
|      uint32_t pixel;
 | |
|      int i;
 | |
|  
 | |
|      if (clip != NULL) {
 | |
|  	status = _cairo_clip_get_region (clip, &clip_region);
 | |
| +	if (unlikely (status == CAIRO_INT_STATUS_NOTHING_TO_DO))
 | |
| +	    return CAIRO_STATUS_SUCCESS;
 | |
|  	need_clip_mask = status == CAIRO_INT_STATUS_UNSUPPORTED;
 | |
|  	if (need_clip_mask &&
 | |
|  	    (op == CAIRO_OPERATOR_SOURCE || ! extents->is_bounded))
 | |
|  	{
 | |
|  	    return CAIRO_INT_STATUS_UNSUPPORTED;
 | |
|  	}
 | |
|  
 | |
|  	if (clip_region != NULL && cairo_region_num_rectangles (clip_region) == 1)
 | |
| @@ -3200,30 +3202,20 @@ static cairo_status_t
 | |
|      return _clip_and_composite (dst, op, src,
 | |
|  				_composite_traps, &info,
 | |
|  				extents, clip);
 | |
|  }
 | |
|  
 | |
|  static cairo_clip_path_t *
 | |
|  _clip_get_single_path (cairo_clip_t *clip)
 | |
|  {
 | |
| -    cairo_clip_path_t *iter = clip->path;
 | |
| -    cairo_clip_path_t *path = NULL;
 | |
| -
 | |
| -    do {
 | |
| -	if ((iter->flags & CAIRO_CLIP_PATH_IS_BOX) == 0) {
 | |
| -	    if (path != NULL)
 | |
| -		return FALSE;
 | |
| -
 | |
| -	    path = iter;
 | |
| -	}
 | |
| -	iter = iter->prev;
 | |
| -    } while (iter != NULL);
 | |
| -
 | |
| -    return path;
 | |
| +    if (clip->path->prev == NULL)
 | |
| +      return clip->path;
 | |
| +
 | |
| +    return NULL;
 | |
|  }
 | |
|  
 | |
|  /* high level image interface */
 | |
|  
 | |
|  static cairo_int_status_t
 | |
|  _cairo_image_surface_paint (void			*abstract_surface,
 | |
|  			    cairo_operator_t		 op,
 | |
|  			    const cairo_pattern_t	*source,
 | 
