summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndrea Canciani <ranma42@gmail.com>2010-12-28 12:22:54 +0100
committerAndrea Canciani <ranma42@gmail.com>2011-01-08 12:02:58 +0100
commit7d6058974d8d392537e1589758ef770aac1f5228 (patch)
tree8682aa2cf86993b56409bcf1c770e8564a0914b9
parentb2a645a78f5281fe97762f065e2b3a9c8bcab7d1 (diff)
-rw-r--r--src/cairo-gl-surface.c2
-rw-r--r--src/cairo-image-surface.c4
-rw-r--r--src/cairo-pattern.c4
-rw-r--r--src/cairo-win32-font.c3
-rw-r--r--src/cairo-win32-surface.c3
-rw-r--r--src/cairo-xcb-surface-render.c2
6 files changed, 10 insertions, 8 deletions
diff --git a/src/cairo-gl-surface.c b/src/cairo-gl-surface.c
index d20fb98ca..6414654e0 100644
--- a/src/cairo-gl-surface.c
+++ b/src/cairo-gl-surface.c
@@ -1406,7 +1406,7 @@ _cairo_gl_surface_paint (void *abstract_surface,
return _cairo_gl_surface_clear (abstract_surface, CAIRO_COLOR_TRANSPARENT);
else if (source->type == CAIRO_PATTERN_TYPE_SOLID &&
(op == CAIRO_OPERATOR_SOURCE ||
- (op == CAIRO_OPERATOR_OVER && _cairo_pattern_is_opaque_solid (source)))) {
+ (op == CAIRO_OPERATOR_OVER && _cairo_pattern_is_opaque (source, NULL)))) {
return _cairo_gl_surface_clear (abstract_surface,
&((cairo_solid_pattern_t *) source)->color);
}
diff --git a/src/cairo-image-surface.c b/src/cairo-image-surface.c
index 1ea2ab574..34e1b4209 100644
--- a/src/cairo-image-surface.c
+++ b/src/cairo-image-surface.c
@@ -1818,7 +1818,7 @@ reduce_alpha_op (cairo_image_surface_t *dst,
{
return dst->base.is_clear &&
dst->base.content == CAIRO_CONTENT_ALPHA &&
- _cairo_pattern_is_opaque (pattern) &&
+ _cairo_pattern_is_opaque (pattern, NULL) &&
can_reduce_alpha_op (op);
}
@@ -2384,7 +2384,7 @@ _composite_traps (void *closure,
format = info->antialias == CAIRO_ANTIALIAS_NONE ? PIXMAN_a1 : PIXMAN_a8;
if (dst_format == format &&
(pattern == NULL ||
- (op == CAIRO_OPERATOR_ADD && _cairo_pattern_is_opaque (pattern))))
+ (op == CAIRO_OPERATOR_ADD && _cairo_pattern_is_opaque (pattern, NULL))))
{
_pixman_image_add_traps (dst, dst_x, dst_y, info);
return CAIRO_STATUS_SUCCESS;
diff --git a/src/cairo-pattern.c b/src/cairo-pattern.c
index cca857b1d..2d00e554f 100644
--- a/src/cairo-pattern.c
+++ b/src/cairo-pattern.c
@@ -3425,7 +3425,7 @@ _cairo_mesh_pattern_coord_box (const cairo_mesh_pattern_t *mesh,
*
* Return value: %TRUE if the pattern is a solid color.
**/
-cairo_private cairo_bool_t
+static cairo_bool_t
_cairo_gradient_pattern_is_solid (const cairo_gradient_pattern_t *gradient,
const cairo_rectangle_int_t *extents,
cairo_color_t *color)
@@ -3672,7 +3672,7 @@ _cairo_pattern_is_opaque (const cairo_pattern_t *abstract_pattern,
pattern = (cairo_pattern_union_t *) abstract_pattern;
switch (pattern->base.type) {
case CAIRO_PATTERN_TYPE_SOLID:
- return _cairo_pattern_is_opaque_solid (abstract_pattern);
+ return CAIRO_COLOR_IS_OPAQUE (&pattern->solid.color);
case CAIRO_PATTERN_TYPE_SURFACE:
return _surface_is_opaque (&pattern->surface, extents);
case CAIRO_PATTERN_TYPE_LINEAR:
diff --git a/src/cairo-win32-font.c b/src/cairo-win32-font.c
index d0c29bbda..4ba635906 100644
--- a/src/cairo-win32-font.c
+++ b/src/cairo-win32-font.c
@@ -1407,7 +1407,8 @@ _cairo_win32_scaled_font_show_glyphs (void *abstract_font,
if (_cairo_surface_is_win32 (generic_surface) &&
surface->format == CAIRO_FORMAT_RGB24 &&
op == CAIRO_OPERATOR_OVER &&
- _cairo_pattern_is_opaque_solid (pattern)) {
+ pattern->type == CAIRO_PATTERN_TYPE_SOLID &&
+ _cairo_pattern_is_opaque (pattern, NULL)) {
cairo_solid_pattern_t *solid_pattern = (cairo_solid_pattern_t *)pattern;
diff --git a/src/cairo-win32-surface.c b/src/cairo-win32-surface.c
index c335d9780..89d13b63b 100644
--- a/src/cairo-win32-surface.c
+++ b/src/cairo-win32-surface.c
@@ -1530,7 +1530,8 @@ _cairo_win32_surface_show_glyphs_internal (void *surface,
return CAIRO_INT_STATUS_UNSUPPORTED;
/* We can only handle opaque solid color sources */
- if (!_cairo_pattern_is_opaque_solid(source))
+ if (source->type != CAIRO_PATTERN_TYPE_SOLID ||
+ ! _cairo_pattern_is_opaque (source, NULL))
return CAIRO_INT_STATUS_UNSUPPORTED;
/* We can only handle operator SOURCE or OVER with the destination
diff --git a/src/cairo-xcb-surface-render.c b/src/cairo-xcb-surface-render.c
index 1a719968c..a00a048a5 100644
--- a/src/cairo-xcb-surface-render.c
+++ b/src/cairo-xcb-surface-render.c
@@ -2008,7 +2008,7 @@ reduce_alpha_op (cairo_surface_t *dst,
{
return dst->is_clear &&
dst->content == CAIRO_CONTENT_ALPHA &&
- _cairo_pattern_is_opaque_solid (pattern) &&
+ _cairo_pattern_is_opaque (pattern, NULL) &&
can_reduce_alpha_op (op);
}