From aac132a76a2af3719088678295169f1962a555e6 Mon Sep 17 00:00:00 2001 From: Chris Wilson Date: Fri, 24 Apr 2009 10:14:36 +0100 Subject: [PATCH] [image] Make _cairo_image_analayze_transparency() more format agnostic Use the content in preference to the format to determine CAIRO_IMAGE_IS_OPAQUE/CAIRO_IMAGE_HAS_ALPHA. --- src/cairo-image-surface.c | 17 +++++++---------- 1 file changed, 7 insertions(+), 10 deletions(-) diff --git a/src/cairo-image-surface.c b/src/cairo-image-surface.c index baead1086..3225a7226 100644 --- a/src/cairo-image-surface.c +++ b/src/cairo-image-surface.c @@ -1576,15 +1576,13 @@ _cairo_image_analyze_transparency (cairo_image_surface_t *image) if (image->transparency != CAIRO_IMAGE_UNKNOWN) return image->transparency; - if (image->format == CAIRO_FORMAT_RGB24) { - image->transparency = CAIRO_IMAGE_IS_OPAQUE; - return CAIRO_IMAGE_IS_OPAQUE; - } + if ((image->base.content & CAIRO_CONTENT_ALPHA) == 0) + return image->transparency = CAIRO_IMAGE_IS_OPAQUE; + if ((image->base.content & CAIRO_CONTENT_COLOR) == 0) + return image->transparency = CAIRO_IMAGE_HAS_ALPHA; - if (image->format != CAIRO_FORMAT_ARGB32) { - image->transparency = CAIRO_IMAGE_HAS_ALPHA; - return CAIRO_IMAGE_HAS_ALPHA; - } + if (image->format != CAIRO_FORMAT_ARGB32) + return image->transparency = CAIRO_IMAGE_HAS_ALPHA; image->transparency = CAIRO_IMAGE_IS_OPAQUE; for (y = 0; y < image->height; y++) { @@ -1593,8 +1591,7 @@ _cairo_image_analyze_transparency (cairo_image_surface_t *image) for (x = 0; x < image->width; x++, pixel++) { int a = (*pixel & 0xff000000) >> 24; if (a > 0 && a < 255) { - image->transparency = CAIRO_IMAGE_HAS_ALPHA; - return CAIRO_IMAGE_HAS_ALPHA; + return image->transparency = CAIRO_IMAGE_HAS_ALPHA; } else if (a == 0) { image->transparency = CAIRO_IMAGE_HAS_BILEVEL_ALPHA; }