diff --git a/src/cairo-image-surface.c b/src/cairo-image-surface.c index 87abf1696..36acc4f92 100644 --- a/src/cairo-image-surface.c +++ b/src/cairo-image-surface.c @@ -221,59 +221,55 @@ _pixman_format_from_masks (cairo_format_masks_t *masks, /* XXX: This function should really live inside pixman. */ void _pixman_format_to_masks (pixman_format_code_t pixman_format, - uint32_t *bpp, - uint32_t *red, - uint32_t *green, - uint32_t *blue) + cairo_format_masks_t *masks) { - *red = 0x0; - *green = 0x0; - *blue = 0x0; + masks->red_mask = 0x0; + masks->green_mask = 0x0; + masks->blue_mask = 0x0; switch (pixman_format) { case PIXMAN_a8r8g8b8: case PIXMAN_x8r8g8b8: default: - *bpp = 32; - *red = 0x00ff0000; - *green = 0x0000ff00; - *blue = 0x000000ff; + masks->bpp = 32; + masks->red_mask = 0x00ff0000; + masks->green_mask = 0x0000ff00; + masks->blue_mask = 0x000000ff; break; case PIXMAN_a8b8g8r8: case PIXMAN_x8b8g8r8: - *bpp = 32; - *red = 0x000000ff; - *green = 0x0000ff00; - *blue = 0x00ff0000; + masks->bpp = 32; + masks->red_mask = 0x000000ff; + masks->green_mask = 0x0000ff00; + masks->blue_mask = 0x00ff0000; break; case PIXMAN_r5g6b5: - *bpp = 16; - *red = 0xf800; - *green = 0x07e0; - *blue = 0x001f; + masks->bpp = 16; + masks->red_mask = 0xf800; + masks->green_mask = 0x07e0; + masks->blue_mask = 0x001f; break; case PIXMAN_x1r5g5b5: - *bpp = 16; - *red = 0x7c00; - *green = 0x03e0; - *blue = 0x001f; + masks->bpp = 16; + masks->red_mask = 0x7c00; + masks->green_mask = 0x03e0; + masks->blue_mask = 0x001f; break; case PIXMAN_a8: - *bpp = 8; + masks->bpp = 8; break; case PIXMAN_a1: - *bpp = 1; + masks->bpp = 1; break; } } - /* XXX: This function really should be eliminated. We don't really * want to advertise a cairo image surface that supports any possible * format. A minimal step would be to replace this function with one diff --git a/src/cairo-xlib-surface.c b/src/cairo-xlib-surface.c index cd1814b26..b8bea7ce5 100644 --- a/src/cairo-xlib-surface.c +++ b/src/cairo-xlib-surface.c @@ -735,11 +735,11 @@ _draw_image_surface (cairo_xlib_surface_t *surface, int dst_y) { XImage ximage; - uint32_t bpp, red, green, blue; + cairo_format_masks_t image_masks; int native_byte_order = _native_byte_order_lsb () ? LSBFirst : MSBFirst; cairo_status_t status; - _pixman_format_to_masks (image->pixman_format, &bpp, &red, &green, &blue); + _pixman_format_to_masks (image->pixman_format, &image_masks); ximage.width = image->width; ximage.height = image->height; @@ -751,10 +751,10 @@ _draw_image_surface (cairo_xlib_surface_t *surface, ximage.bitmap_pad = 32; /* always for libpixman */ ximage.depth = image->depth; ximage.bytes_per_line = image->stride; - ximage.bits_per_pixel = bpp; - ximage.red_mask = red; - ximage.green_mask = green; - ximage.blue_mask = blue; + ximage.bits_per_pixel = image_masks.bpp; + ximage.red_mask = image_masks.red_mask; + ximage.green_mask = image_masks.green_mask; + ximage.blue_mask = image_masks.blue_mask; ximage.xoffset = 0; XInitImage (&ximage); diff --git a/src/cairoint.h b/src/cairoint.h index fdeeae591..84aa61bbc 100644 --- a/src/cairoint.h +++ b/src/cairoint.h @@ -1854,10 +1854,7 @@ _pixman_format_from_masks (cairo_format_masks_t *masks, cairo_private void _pixman_format_to_masks (pixman_format_code_t pixman_format, - uint32_t *bpp, - uint32_t *red, - uint32_t *green, - uint32_t *blue); + cairo_format_masks_t *masks); cairo_private cairo_surface_t * _cairo_image_surface_create_with_pixman_format (unsigned char *data,