diff --git a/src/cairo-surface.c b/src/cairo-surface.c index 8a5937349..ddb1ffd8b 100644 --- a/src/cairo-surface.c +++ b/src/cairo-surface.c @@ -1926,6 +1926,12 @@ _cairo_surface_paint (cairo_surface_t *surface, if (op == CAIRO_OPERATOR_CLEAR && surface->is_clear) return CAIRO_STATUS_SUCCESS; + if (op == CAIRO_OPERATOR_OVER && + _cairo_pattern_is_clear (source)) + { + return CAIRO_STATUS_SUCCESS; + } + status = _pattern_has_error (source); if (unlikely (status)) return status; @@ -1971,6 +1977,12 @@ _cairo_surface_mask (cairo_surface_t *surface, return CAIRO_STATUS_SUCCESS; } + if (op == CAIRO_OPERATOR_OVER && + _cairo_pattern_is_clear (source)) + { + return CAIRO_STATUS_SUCCESS; + } + status = _pattern_has_error (source); if (unlikely (status)) return status; @@ -2097,6 +2109,12 @@ _cairo_surface_stroke (cairo_surface_t *surface, if (op == CAIRO_OPERATOR_CLEAR && surface->is_clear) return CAIRO_STATUS_SUCCESS; + if (op == CAIRO_OPERATOR_OVER && + _cairo_pattern_is_clear (source)) + { + return CAIRO_STATUS_SUCCESS; + } + status = _pattern_has_error (source); if (unlikely (status)) return status; @@ -2147,6 +2165,12 @@ _cairo_surface_fill (cairo_surface_t *surface, if (op == CAIRO_OPERATOR_CLEAR && surface->is_clear) return CAIRO_STATUS_SUCCESS; + if (op == CAIRO_OPERATOR_OVER && + _cairo_pattern_is_clear (source)) + { + return CAIRO_STATUS_SUCCESS; + } + status = _pattern_has_error (source); if (unlikely (status)) return status;