Make _pixman_format_to_masks accept a cairo_format_masks_t structure

This makes it work similarly to _pixman_format_from_masks
This commit is contained in:
Carl Worth 2008-03-14 16:48:41 +01:00
parent cdb1ae97f2
commit eb31c52feb
3 changed files with 29 additions and 36 deletions

View file

@ -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

View file

@ -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);

View file

@ -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,