blur: Fix pixel sizes

The code accesses pixels in a chunks of 4 bytes, so we must only support
formats where the size of a single pixel is 4 bytes.
Fix RGB24 to be 4 bytes (the alpha channel is ignored) and disallow A8.
This commit is contained in:
Benjamin Otte 2012-09-19 22:23:47 +02:00
parent 1cecaf6d7e
commit 267d1793c6

View File

@ -227,8 +227,7 @@ _gtk_cairo_blur_surface (cairo_surface_t* surface,
g_return_if_fail (cairo_surface_get_type (surface) == CAIRO_SURFACE_TYPE_IMAGE);
format = cairo_image_surface_get_format (surface);
g_return_if_fail (format == CAIRO_FORMAT_A8 ||
format == CAIRO_FORMAT_RGB24 ||
g_return_if_fail (format == CAIRO_FORMAT_RGB24 ||
format == CAIRO_FORMAT_ARGB32);
if (radius == 0)
@ -248,12 +247,10 @@ _gtk_cairo_blur_surface (cairo_surface_t* surface,
_expblur (pixels, width, height, 4, radius, 16, 7);
break;
case CAIRO_FORMAT_RGB24:
_expblur (pixels, width, height, 3, radius, 16, 7);
break;
case CAIRO_FORMAT_A8:
_expblur (pixels, width, height, 1, radius, 16, 7);
_expblur (pixels, width, height, 4, radius, 16, 7);
break;
default:
g_assert_not_reached ();
break;
}