[cairo-commit] src/cairo-xcb-surface.c
Jamey Sharp
jamey at kemper.freedesktop.org
Mon Oct 16 11:11:31 PDT 2006
src/cairo-xcb-surface.c | 84 ++++++++++++++++++++++++------------------------
1 files changed, 43 insertions(+), 41 deletions(-)
New commits:
diff-tree 7988f2cc6ac596de61ef4378df66cbafece5f747 (from b62710d4f8602203d848daf2d444865b611fff09)
Author: Ian Osgood <iano at quirkster.com>
Date: Mon Oct 16 07:20:15 2006 -0700
XCB: Remove unnecessary differences with the Xlib surface.
diff --git a/src/cairo-xcb-surface.c b/src/cairo-xcb-surface.c
index 5d4c848..de672c6 100644
--- a/src/cairo-xcb-surface.c
+++ b/src/cairo-xcb-surface.c
@@ -43,32 +43,6 @@
slim_hidden_proto (cairo_xcb_surface_create_with_xrender_format);
-static cairo_content_t
-_xcb_render_format_to_content (xcb_render_pictforminfo_t *xrender_format)
-{
- cairo_bool_t xrender_format_has_alpha;
- cairo_bool_t xrender_format_has_color;
-
- /* This only happens when using a non-Render server. Let's punt
- * and say there's no alpha here. */
- if (xrender_format == NULL)
- return CAIRO_CONTENT_COLOR;
-
- xrender_format_has_alpha = (xrender_format->direct.alpha_mask != 0);
- xrender_format_has_color = (xrender_format->direct.red_mask != 0 ||
- xrender_format->direct.green_mask != 0 ||
- xrender_format->direct.blue_mask != 0);
-
- if (xrender_format_has_alpha)
- if (xrender_format_has_color)
- return CAIRO_CONTENT_COLOR_ALPHA;
- else
- return CAIRO_CONTENT_ALPHA;
- else
- return CAIRO_CONTENT_COLOR;
-
-}
-
/*
* Instead of taking two round trips for each blending request,
* assume that if a particular drawable fails GetImage that it will
@@ -145,6 +119,32 @@ _CAIRO_FORMAT_DEPTH (cairo_format_t form
}
}
+static cairo_content_t
+_xcb_render_format_to_content (xcb_render_pictforminfo_t *xrender_format)
+{
+ cairo_bool_t xrender_format_has_alpha;
+ cairo_bool_t xrender_format_has_color;
+
+ /* This only happens when using a non-Render server. Let's punt
+ * and say there's no alpha here. */
+ if (xrender_format == NULL)
+ return CAIRO_CONTENT_COLOR;
+
+ xrender_format_has_alpha = (xrender_format->direct.alpha_mask != 0);
+ xrender_format_has_color = (xrender_format->direct.red_mask != 0 ||
+ xrender_format->direct.green_mask != 0 ||
+ xrender_format->direct.blue_mask != 0);
+
+ if (xrender_format_has_alpha)
+ if (xrender_format_has_color)
+ return CAIRO_CONTENT_COLOR_ALPHA;
+ else
+ return CAIRO_CONTENT_ALPHA;
+ else
+ return CAIRO_CONTENT_COLOR;
+
+}
+
static cairo_surface_t *
_cairo_xcb_surface_create_similar (void *abstract_src,
cairo_content_t content,
@@ -284,8 +284,8 @@ _get_image_surface (cairo_xcb_surface_t
int bpp, bytes_per_line;
int x1, y1, x2, y2;
unsigned char *data;
- cairo_format_t format;
cairo_format_masks_t masks;
+ cairo_format_t format;
x1 = 0;
y1 = 0;
@@ -463,7 +463,7 @@ _get_image_surface (cairo_xcb_surface_t
static void
_cairo_xcb_surface_set_picture_clip_rects (cairo_xcb_surface_t *surface)
{
- if (surface->num_clip_rects)
+ if (surface->have_clip_rects)
xcb_render_set_picture_clip_rectangles (surface->dpy, surface->picture,
0, 0,
surface->num_clip_rects,
@@ -473,7 +473,7 @@ _cairo_xcb_surface_set_picture_clip_rect
static void
_cairo_xcb_surface_set_gc_clip_rects (cairo_xcb_surface_t *surface)
{
- if (surface->num_clip_rects)
+ if (surface->have_clip_rects)
xcb_set_clip_rectangles(surface->dpy, XCB_CLIP_ORDERING_YX_SORTED, surface->gc,
0, 0,
surface->num_clip_rects,
@@ -743,7 +743,6 @@ _cairo_xcb_surface_set_attributes (cairo
_cairo_xcb_surface_set_repeat (surface, 1);
break;
case CAIRO_EXTEND_REFLECT:
- return CAIRO_INT_STATUS_UNSUPPORTED;
case CAIRO_EXTEND_PAD:
return CAIRO_INT_STATUS_UNSUPPORTED;
}
@@ -930,17 +929,6 @@ _cairo_xcb_surface_composite_trapezoids
if (status)
return status;
- if (traps[0].left.p1.y < traps[0].left.p2.y) {
- render_reference_x = _cairo_fixed_integer_floor (traps[0].left.p1.x);
- render_reference_y = _cairo_fixed_integer_floor (traps[0].left.p1.y);
- } else {
- render_reference_x = _cairo_fixed_integer_floor (traps[0].left.p2.x);
- render_reference_y = _cairo_fixed_integer_floor (traps[0].left.p2.y);
- }
-
- render_src_x = src_x + render_reference_x - dst_x;
- render_src_y = src_y + render_reference_y - dst_y;
-
switch (antialias) {
case CAIRO_ANTIALIAS_NONE:
cairo_format = CAIRO_FORMAT_A1;
@@ -955,6 +943,17 @@ _cairo_xcb_surface_composite_trapezoids
render_format = xcb_render_util_find_standard_format (xcb_render_util_query_formats (dst->dpy), cairo_format);
/* XXX: what to do if render_format is null? */
+ if (traps[0].left.p1.y < traps[0].left.p2.y) {
+ render_reference_x = _cairo_fixed_integer_floor (traps[0].left.p1.x);
+ render_reference_y = _cairo_fixed_integer_floor (traps[0].left.p1.y);
+ } else {
+ render_reference_x = _cairo_fixed_integer_floor (traps[0].left.p2.x);
+ render_reference_y = _cairo_fixed_integer_floor (traps[0].left.p2.y);
+ }
+
+ render_src_x = src_x + render_reference_x - dst_x;
+ render_src_y = src_y + render_reference_y - dst_y;
+
/* XXX: The XTrapezoid cast is evil and needs to go away somehow. */
status = _cairo_xcb_surface_set_attributes (src, &attributes);
if (status == CAIRO_STATUS_SUCCESS)
@@ -982,6 +981,7 @@ _cairo_xcb_surface_set_clip_region (void
surface->clip_rects = NULL;
}
+ surface->have_clip_rects = FALSE;
surface->num_clip_rects = 0;
if (region == NULL) {
@@ -1021,6 +1021,7 @@ _cairo_xcb_surface_set_clip_region (void
rects[i].height = boxes[i].y2 - boxes[i].y1;
}
+ surface->have_clip_rects = TRUE;
surface->clip_rects = rects;
surface->num_clip_rects = n_boxes;
@@ -1129,6 +1130,7 @@ _cairo_xcb_surface_create_internal (xcb_
surface->height = height;
surface->depth = depth;
+ surface->have_clip_rects = FALSE;
surface->clip_rects = NULL;
surface->num_clip_rects = 0;
More information about the cairo-commit
mailing list