glitz_color_t glitz_color;
_cairo_glitz_surface_fill_rectangles (void *abstract_dst,				      cairo_operator_t op,				      const cairo_color_t *color,				      cairo_rectangle_t *rects,				      int n_rects){    cairo_glitz_surface_t *dst = abstract_dst;    glitz_color_t glitz_color;    if (op == CAIRO_OPERATOR_SATURATE)	return CAIRO_INT_STATUS_UNSUPPORTED;        glitz_color.red = color->red_short;    glitz_color.green = color->green_short;    glitz_color.blue = color->blue_short;    glitz_color.alpha = color->alpha_short;	    if (op != CAIRO_OPERATOR_SRC) {	glitz_surface_t *solid;	glitz_float_t *vertices;	glitz_buffer_t *buffer;	glitz_geometry_format_t gf;	cairo_int_status_t status;	int width, height;	void *data;		gf.mode = GLITZ_GEOMETRY_MODE_DIRECT;	gf.edge_hint = GLITZ_GEOMETRY_EDGE_HINT_SHARP;	gf.primitive = GLITZ_GEOMETRY_PRIMITIVE_QUADS;	gf.type = GLITZ_DATA_TYPE_FLOAT;	gf.first = 0;	gf.count = n_rects * 4;	data = malloc (n_rects * 8 * sizeof (glitz_float_t));	if (!data)	    return CAIRO_STATUS_NO_MEMORY;	buffer = glitz_buffer_create_for_data (data);	if (buffer == NULL) {	    free (data);	    return CAIRO_STATUS_NO_MEMORY;	}	width = height = 0;	vertices = glitz_buffer_map (buffer, GLITZ_BUFFER_ACCESS_WRITE_ONLY);	for (; n_rects; rects++, n_rects--) {	    *vertices++ = (glitz_float_t) rects->x;	    *vertices++ = (glitz_float_t) rects->y;	    *vertices++ = (glitz_float_t) (rects->x + rects->width);	    *vertices++ = (glitz_float_t) rects->y;	    *vertices++ = (glitz_float_t) (rects->x + rects->width);	    *vertices++ = (glitz_float_t) (rects->y + rects->height);	    *vertices++ = (glitz_float_t) rects->x;	    *vertices++ = (glitz_float_t) (rects->y + rects->height);	    if ((rects->x + rects->width) > width)		width = rects->x + rects->width;	    if ((rects->y + rects->height) > height)		height = rects->y + rects->height;	}	glitz_buffer_unmap (buffer);	solid = _glitz_surface_create_solid (dst->surface,					     GLITZ_STANDARD_ARGB32,					     &glitz_color);	if (solid == NULL)	    return CAIRO_STATUS_NO_MEMORY;	status = _glitz_composite (_glitz_operator (op),				   solid,				   NULL,				   dst->surface,				   0, 0,				   0, 0,				   0, 0,				   width, height,				   buffer, &gf);	glitz_surface_destroy (solid);	glitz_buffer_destroy (buffer);	free (data);	return status;    } else {	if (glitz_surface_get_width (dst->surface) != 1 ||	    glitz_surface_get_height (dst->surface) != 1) {	    if (_glitz_ensure_target (dst->surface))		return CAIRO_INT_STATUS_UNSUPPORTED;	}		glitz_set_rectangles (dst->surface, &glitz_color,			      (glitz_rectangle_t *) rects, n_rects);    }    return CAIRO_STATUS_SUCCESS;}