diff options
Diffstat (limited to 'src/cairo-xcb-connection-render.c')
-rw-r--r-- | src/cairo-xcb-connection-render.c | 716 |
1 files changed, 41 insertions, 675 deletions
diff --git a/src/cairo-xcb-connection-render.c b/src/cairo-xcb-connection-render.c index 63eb59d..b44e363 100644 --- a/src/cairo-xcb-connection-render.c +++ b/src/cairo-xcb-connection-render.c @@ -35,9 +35,6 @@ #include <xcb/xcbext.h> -#define X_RenderSpans 99 -#define XLIB_COORD_MAX 32767 - void _cairo_xcb_connection_render_create_picture (cairo_xcb_connection_t *connection, xcb_render_picture_t picture, @@ -46,34 +43,8 @@ _cairo_xcb_connection_render_create_picture (cairo_xcb_connection_t *connection uint32_t value_mask, uint32_t *value_list) { - struct { - uint8_t major; - uint8_t minor; - uint16_t length; - uint32_t picture; - uint32_t drawable; - uint32_t format; - uint32_t mask; - } req; - struct iovec vec[2]; - int len = _cairo_popcount (value_mask) * 4; - - COMPILE_TIME_ASSERT (sizeof (req) == 20); - - req.major = connection->render->major_opcode; - req.minor = 4; - req.length = (sizeof (req) + len) >> 2; - req.picture = picture; - req.drawable = drawable; - req.format = format; - req.mask = value_mask; - - vec[0].iov_base = &req; - vec[0].iov_len = sizeof (req); - vec[1].iov_base = value_list; - vec[1].iov_len = len; - - _cairo_xcb_connection_write (connection, vec, 1 + (len != 0)); + xcb_render_create_picture (connection->xcb_connection, picture, drawable, + format, value_mask, value_list); } void @@ -82,30 +53,8 @@ _cairo_xcb_connection_render_change_picture (cairo_xcb_connection_t *connect uint32_t value_mask, uint32_t *value_list) { - struct { - uint8_t major; - uint8_t minor; - uint16_t length; - uint32_t picture; - uint32_t mask; - } req; - struct iovec vec[2]; - int len = _cairo_popcount (value_mask) * 4; - - COMPILE_TIME_ASSERT (sizeof (req) == 12); - - req.major = connection->render->major_opcode; - req.minor = 5; - req.length = (sizeof (req) + len) >> 2; - req.picture = picture; - req.mask = value_mask; - - vec[0].iov_base = &req; - vec[0].iov_len = sizeof (req); - vec[1].iov_base = value_list; - vec[1].iov_len = len; - - _cairo_xcb_connection_write (connection, vec, 2); + xcb_render_change_picture (connection->xcb_connection, picture, + value_mask, value_list); } void @@ -116,58 +65,16 @@ _cairo_xcb_connection_render_set_picture_clip_rectangles (cairo_xcb_connection_t uint32_t rectangles_len, xcb_rectangle_t *rectangles) { - struct { - uint8_t major; - uint8_t minor; - uint16_t length; - uint32_t picture; - uint16_t x; - uint16_t y; - } req; - struct iovec vec[2]; - int len = sizeof (xcb_rectangle_t) * rectangles_len; - - COMPILE_TIME_ASSERT (sizeof (req) == 12); - assert ((len + sizeof (req)) >> 2 < connection->root->maximum_request_length); - - req.major = connection->render->major_opcode; - req.minor = 6; - req.length = (sizeof (req) + len) >> 2; - req.picture = picture; - req.x = clip_x_origin; - req.y = clip_y_origin; - - vec[0].iov_base = &req; - vec[0].iov_len = sizeof (req); - vec[1].iov_base = rectangles; - vec[1].iov_len = len; - - _cairo_xcb_connection_write (connection, vec, 2); + xcb_render_set_picture_clip_rectangles (connection->xcb_connection, picture, + clip_x_origin, clip_y_origin, + rectangles_len, rectangles); } void _cairo_xcb_connection_render_free_picture (cairo_xcb_connection_t *connection, xcb_render_picture_t picture) { - struct { - uint8_t major; - uint8_t minor; - uint16_t length; - uint32_t picture; - } req; - struct iovec vec[1]; - - COMPILE_TIME_ASSERT (sizeof (req) == 8); - - req.major = connection->render->major_opcode; - req.minor = 7; - req.length = sizeof (req) >> 2; - req.picture = picture; - - vec[0].iov_base = &req; - vec[0].iov_len = sizeof (req); - - _cairo_xcb_connection_write (connection, vec, 1); + xcb_render_free_picture (connection->xcb_connection, picture); _cairo_xcb_connection_put_xid (connection, picture); } @@ -186,49 +93,8 @@ _cairo_xcb_connection_render_composite (cairo_xcb_connection_t *connection, uint16_t width, uint16_t height) { - struct { - uint8_t major; - uint8_t minor; - uint16_t length; - uint8_t op; - uint8_t pad1; - uint16_t pad2; - uint32_t src; - uint32_t mask; - uint32_t dst; - int16_t src_x; - int16_t src_y; - int16_t mask_x; - int16_t mask_y; - int16_t dst_x; - int16_t dst_y; - uint16_t width; - uint16_t height; - } req; - struct iovec vec[1]; - - COMPILE_TIME_ASSERT (sizeof (req) == 36); - - req.major = connection->render->major_opcode; - req.minor = 8; - req.length = sizeof (req) >> 2; - req.op = op; - req.src = src; - req.mask = mask; - req.dst = dst; - req.src_x = src_x; - req.src_y = src_y; - req.mask_x = mask_x; - req.mask_y = mask_y; - req.dst_x = dst_x; - req.dst_y = dst_y; - req.width = width; - req.height = height; - - vec[0].iov_base = &req; - vec[0].iov_len = sizeof (req); - - _cairo_xcb_connection_write (connection, vec, 1); + xcb_render_composite (connection->xcb_connection, op, src, mask, dst, + src_x, src_y, mask_x, mask_y, dst_x, dst_y, width, height); } void @@ -242,56 +108,8 @@ _cairo_xcb_connection_render_trapezoids (cairo_xcb_connection_t *connection, uint32_t traps_len, xcb_render_trapezoid_t *traps) { - struct { - uint8_t major; - uint8_t minor; - uint16_t length; - uint8_t op; - uint8_t pad1; - uint16_t pad2; - uint32_t src; - uint32_t dst; - uint32_t mask_format; - int16_t src_x; - int16_t src_y; - } req; - struct iovec vec[3]; - uint32_t prefix[2]; - uint32_t len = (sizeof (req) + traps_len * sizeof (xcb_render_trapezoid_t)) >> 2; - - COMPILE_TIME_ASSERT (sizeof (req) == 24); - - req.major = connection->render->major_opcode; - req.minor = 10; - req.length = 0; - req.op = op; - req.src = src; - req.dst = dst; - req.mask_format = mask_format; - req.src_x = src_x; - req.src_y = src_y; - - if (len < connection->root->maximum_request_length) { - req.length = len; - - vec[0].iov_base = &req; - vec[0].iov_len = sizeof (req); - vec[1].iov_base = traps; - vec[1].iov_len = traps_len * sizeof (xcb_render_trapezoid_t); - - _cairo_xcb_connection_write (connection, vec, 2); - } else { - prefix[0] = *(uint32_t *) &req; - prefix[1] = len + 1; - vec[0].iov_base = prefix; - vec[0].iov_len = sizeof (prefix); - vec[1].iov_base = (uint32_t *) &req + 1; - vec[1].iov_len = sizeof (req) - 4; - vec[2].iov_base = traps; - vec[2].iov_len = traps_len * sizeof (xcb_render_trapezoid_t); - - _cairo_xcb_connection_write (connection, vec, 3); - } + xcb_render_trapezoids (connection->xcb_connection, op, src, dst, + mask_format, src_x, src_y, traps_len, traps); } void @@ -305,6 +123,10 @@ _cairo_xcb_connection_render_spans (cairo_xcb_connection_t *connection, uint32_t num_spans, uint16_t *spans) { + ASSERT_NOT_REACHED; +#if 0 +#define X_RenderSpans 99 + struct { uint8_t major; uint8_t minor; @@ -360,6 +182,7 @@ _cairo_xcb_connection_render_spans (cairo_xcb_connection_t *connection, _cairo_xcb_connection_write (connection, vec, 3); } +#endif } void @@ -367,52 +190,14 @@ _cairo_xcb_connection_render_create_glyph_set (cairo_xcb_connection_t *connectio xcb_render_glyphset_t id, xcb_render_pictformat_t format) { - struct { - uint8_t major; - uint8_t minor; - uint16_t length; - uint32_t gsid; - uint32_t format; - } req; - struct iovec vec[1]; - - COMPILE_TIME_ASSERT (sizeof (req) == 12); - - req.major = connection->render->major_opcode; - req.minor = 17; - req.length = sizeof (req) >> 2; - req.gsid = id; - req.format = format; - - vec[0].iov_base = &req; - vec[0].iov_len = sizeof (req); - - _cairo_xcb_connection_write (connection, vec, 1); + xcb_render_create_glyph_set (connection->xcb_connection, id, format); } void _cairo_xcb_connection_render_free_glyph_set (cairo_xcb_connection_t *connection, xcb_render_glyphset_t glyphset) { - struct { - uint8_t major; - uint8_t minor; - uint16_t length; - uint32_t gsid; - } req; - struct iovec vec[1]; - - COMPILE_TIME_ASSERT (sizeof (req) == 8); - - req.major = connection->render->major_opcode; - req.minor = 19; - req.length = sizeof (req) >> 2; - req.gsid = glyphset; - - vec[0].iov_base = &req; - vec[0].iov_len = sizeof (req); - - _cairo_xcb_connection_write (connection, vec, 1); + xcb_render_free_glyph_set (connection->xcb_connection, glyphset); _cairo_xcb_connection_put_xid (connection, glyphset); } @@ -425,57 +210,8 @@ _cairo_xcb_connection_render_add_glyphs (cairo_xcb_connection_t *con uint32_t data_len, uint8_t *data) { - struct { - uint8_t major; - uint8_t minor; - uint16_t length; - uint32_t gsid; - uint32_t num_glyphs; - } req; - struct iovec vec[5]; - uint32_t prefix[2]; - uint32_t len = (sizeof (req) + num_glyphs * (sizeof (uint32_t) + sizeof (xcb_render_glyphinfo_t)) + data_len) >> 2; - int cnt; - - COMPILE_TIME_ASSERT (sizeof (req) == 12); - - req.major = connection->render->major_opcode; - req.minor = 20; - req.length = 0; - req.gsid = glyphset; - req.num_glyphs = num_glyphs; - - if (len < connection->root->maximum_request_length) { - req.length = len; - - vec[0].iov_base = &req; - vec[0].iov_len = sizeof (req); - - cnt = 1; - } else { - prefix[0] = *(uint32_t *) &req; - prefix[1] = len + 1; - vec[0].iov_base = prefix; - vec[0].iov_len = sizeof (prefix); - vec[1].iov_base = (uint32_t *) &req + 1; - vec[1].iov_len = sizeof (req) - 4; - - cnt = 2; - } - - vec[cnt].iov_base = glyphs_id; - vec[cnt].iov_len = num_glyphs * sizeof (uint32_t); - cnt++; - - vec[cnt].iov_base = glyphs; - vec[cnt].iov_len = num_glyphs * sizeof (xcb_render_glyphinfo_t); - cnt++; - - vec[cnt].iov_base = data; - vec[cnt].iov_len = data_len; - cnt++; - - _cairo_xcb_connection_write (connection, vec, cnt); + xcb_render_add_glyphs (connection->xcb_connection, glyphset, num_glyphs, + glyphs_id, glyphs, data_len, data); } void @@ -484,28 +220,7 @@ _cairo_xcb_connection_render_free_glyphs (cairo_xcb_connection_t *connec uint32_t num_glyphs, xcb_render_glyph_t *glyphs) { - struct { - uint8_t major; - uint8_t minor; - uint16_t length; - uint32_t gsid; - } req; - struct iovec vec[2]; - - COMPILE_TIME_ASSERT (sizeof (req) == 8); - assert ( (sizeof (req) + num_glyphs * sizeof (uint32_t)) >> 2 < connection->root->maximum_request_length); - - req.major = connection->render->major_opcode; - req.minor = 22; - req.length = (sizeof (req) + num_glyphs * sizeof (uint32_t)) >> 2; - req.gsid = glyphset; - - vec[0].iov_base = &req; - vec[0].iov_len = sizeof (req); - vec[1].iov_base = glyphs; - vec[1].iov_len = num_glyphs * sizeof (uint32_t); - - _cairo_xcb_connection_write (connection, vec, 2); + xcb_render_free_glyphs (connection->xcb_connection, glyphset, num_glyphs, glyphs); } void @@ -520,61 +235,8 @@ _cairo_xcb_connection_render_composite_glyphs_8 (cairo_xcb_connection_t * uint32_t glyphcmds_len, uint8_t *glyphcmds) { - struct { - uint8_t major; - uint8_t minor; - uint16_t length; - uint8_t op; - uint8_t pad1; - uint16_t pad2; - uint32_t src; - uint32_t dst; - uint32_t mask_format; - uint32_t glyphset; - int16_t src_x; - int16_t src_y; - } req; - struct iovec vec[3]; - uint32_t prefix[2]; - int len; - - COMPILE_TIME_ASSERT (sizeof (req) == 28); - - req.major = connection->render->major_opcode; - req.minor = 23; - req.length = 0; - req.op = op; - req.src = src; - req.dst = dst; - req.mask_format = mask_format; - req.glyphset = glyphset; - req.src_x = src_x; - req.src_y = src_y; - - len = (sizeof (req) + glyphcmds_len) >> 2; - if (len < connection->root->maximum_request_length) { - req.length = len; - - vec[0].iov_base = &req; - vec[0].iov_len = sizeof (req); - - len = 1; - } else { - prefix[0] = *(uint32_t *) &req; - prefix[1] = len + 1; - vec[0].iov_base = prefix; - vec[0].iov_len = sizeof (prefix); - vec[1].iov_base = (uint32_t *) &req + 1; - vec[1].iov_len = sizeof (req) - 4; - - len = 2; - } - - vec[len].iov_base = glyphcmds; - vec[len].iov_len = glyphcmds_len; - len++; - - _cairo_xcb_connection_write (connection, vec, len); + xcb_render_composite_glyphs_8 (connection->xcb_connection, op, src, dst, mask_format, + glyphset, src_x, src_y, glyphcmds_len, glyphcmds); } void @@ -589,61 +251,8 @@ _cairo_xcb_connection_render_composite_glyphs_16 (cairo_xcb_connection_t uint32_t glyphcmds_len, uint8_t *glyphcmds) { - struct { - uint8_t major; - uint8_t minor; - uint16_t length; - uint8_t op; - uint8_t pad1; - uint16_t pad2; - uint32_t src; - uint32_t dst; - uint32_t mask_format; - uint32_t glyphset; - int16_t src_x; - int16_t src_y; - } req; - struct iovec vec[3]; - uint32_t prefix[2]; - int len; - - COMPILE_TIME_ASSERT (sizeof (req) == 28); - - req.major = connection->render->major_opcode; - req.minor = 24; - req.length = 0; - req.op = op; - req.src = src; - req.dst = dst; - req.mask_format = mask_format; - req.glyphset = glyphset; - req.src_x = src_x; - req.src_y = src_y; - - len = (sizeof (req) + glyphcmds_len) >> 2; - if (len < connection->root->maximum_request_length) { - req.length = len; - - vec[0].iov_base = &req; - vec[0].iov_len = sizeof (req); - - len = 1; - } else { - prefix[0] = *(uint32_t *) &req; - prefix[1] = len + 1; - vec[0].iov_base = prefix; - vec[0].iov_len = sizeof (prefix); - vec[1].iov_base = (uint32_t *) &req + 1; - vec[1].iov_len = sizeof (req) - 4; - - len = 2; - } - - vec[len].iov_base = glyphcmds; - vec[len].iov_len = glyphcmds_len; - len++; - - _cairo_xcb_connection_write (connection, vec, len); + xcb_render_composite_glyphs_16 (connection->xcb_connection, op, src, dst, mask_format, + glyphset, src_x, src_y, glyphcmds_len, glyphcmds); } void @@ -658,61 +267,8 @@ _cairo_xcb_connection_render_composite_glyphs_32 (cairo_xcb_connection_t uint32_t glyphcmds_len, uint8_t *glyphcmds) { - struct { - uint8_t major; - uint8_t minor; - uint16_t length; - uint8_t op; - uint8_t pad1; - uint16_t pad2; - uint32_t src; - uint32_t dst; - uint32_t mask_format; - uint32_t glyphset; - int16_t src_x; - int16_t src_y; - } req; - struct iovec vec[2]; - uint32_t prefix[2]; - int len; - - COMPILE_TIME_ASSERT (sizeof (req) == 28); - - req.major = connection->render->major_opcode; - req.minor = 25; - req.length = 0; - req.op = op; - req.src = src; - req.dst = dst; - req.mask_format = mask_format; - req.glyphset = glyphset; - req.src_x = src_x; - req.src_y = src_y; - - len = (sizeof (req) + glyphcmds_len) >> 2; - if (len < connection->root->maximum_request_length) { - req.length = len; - - vec[0].iov_base = &req; - vec[0].iov_len = sizeof (req); - - len = 1; - } else { - prefix[0] = *(uint32_t *) &req; - prefix[1] = len + 1; - vec[0].iov_base = prefix; - vec[0].iov_len = sizeof (prefix); - vec[1].iov_base = (uint32_t *) &req + 1; - vec[1].iov_len = sizeof (req) - 4; - - len = 2; - } - - vec[len].iov_base = glyphcmds; - vec[len].iov_len = glyphcmds_len; - len++; - - _cairo_xcb_connection_write (connection, vec, len); + xcb_render_composite_glyphs_32 (connection->xcb_connection, op, src, dst, mask_format, + glyphset, src_x, src_y, glyphcmds_len, glyphcmds); } void @@ -723,52 +279,8 @@ _cairo_xcb_connection_render_fill_rectangles (cairo_xcb_connection_t *conne uint32_t num_rects, xcb_rectangle_t *rects) { - struct { - uint8_t major; - uint8_t minor; - uint16_t length; - uint8_t op; - uint8_t pad1; - uint16_t pad2; - uint32_t dst; - xcb_render_color_t color; - } req; - struct iovec vec[3]; - uint32_t prefix[2]; - uint32_t len; - - COMPILE_TIME_ASSERT (sizeof (req) == 20); - - req.major = connection->render->major_opcode; - req.minor = 26; - req.op = op; - req.dst = dst; - req.color = color; - - len = (sizeof (req) + num_rects * sizeof (xcb_rectangle_t)) >> 2; - if (len < connection->root->maximum_request_length) { - req.length = len; - - vec[0].iov_base = &req; - vec[0].iov_len = sizeof (req); - - len = 1; - } else { - prefix[0] = *(uint32_t *) &req; - prefix[1] = len + 1; - vec[0].iov_base = prefix; - vec[0].iov_len = sizeof (prefix); - vec[1].iov_base = (uint32_t *) &req + 1; - vec[1].iov_len = sizeof (req) - 4; - - len = 2; - } - - vec[len].iov_base = rects; - vec[len].iov_len = num_rects * sizeof (xcb_rectangle_t); - len++; - - _cairo_xcb_connection_write (connection, vec, len); + xcb_render_fill_rectangles (connection->xcb_connection, op, dst, color, + num_rects, rects); } void @@ -776,25 +288,7 @@ _cairo_xcb_connection_render_set_picture_transform (cairo_xcb_connection_t xcb_render_picture_t picture, xcb_render_transform_t *transform) { - struct { - uint8_t major; - uint8_t minor; - uint16_t length; - uint32_t picture; - } req; - struct iovec vec[2]; - - req.major = connection->render->major_opcode; - req.minor = 28; - req.length = (sizeof (req) + sizeof (xcb_render_transform_t)) >> 2; - req.picture = picture; - - vec[0].iov_base = &req; - vec[0].iov_len = sizeof (req); - vec[1].iov_base = transform; - vec[1].iov_len = sizeof (xcb_render_transform_t); - - _cairo_xcb_connection_write (connection, vec, 2); + xcb_render_set_picture_transform (connection->xcb_connection, picture, *transform); } void @@ -803,30 +297,8 @@ _cairo_xcb_connection_render_set_picture_filter (cairo_xcb_connection_t uint16_t filter_len, char *filter) { - struct { - uint8_t major; - uint8_t minor; - uint16_t length; - uint32_t picture; - uint16_t nbytes; - uint16_t pad; - } req; - struct iovec vec[2]; - - req.nbytes = filter_len; - filter_len = (filter_len + 3) & ~3; - - req.major = connection->render->major_opcode; - req.minor = 30; - req.length = (sizeof (req) + filter_len) >> 2; - req.picture = picture; - - vec[0].iov_base = &req; - vec[0].iov_len = sizeof (req); - vec[1].iov_base = filter; - vec[1].iov_len = filter_len; - - _cairo_xcb_connection_write (connection, vec, 2); + xcb_render_set_picture_filter (connection->xcb_connection, picture, + filter_len, filter, 0, NULL); } void @@ -834,27 +306,7 @@ _cairo_xcb_connection_render_create_solid_fill (cairo_xcb_connection_t *conn xcb_render_picture_t picture, xcb_render_color_t color) { - struct { - uint8_t major; - uint8_t minor; - uint16_t length; - uint32_t picture; - xcb_render_color_t color; - } req; - struct iovec vec[1]; - - COMPILE_TIME_ASSERT (sizeof (req) == 16); - - req.major = connection->render->major_opcode; - req.minor = 33; - req.length = sizeof (req) >> 2; - req.picture = picture; - req.color = color; - - vec[0].iov_base = &req; - vec[0].iov_len = sizeof (req); - - _cairo_xcb_connection_write (connection, vec, 1); + xcb_render_create_solid_fill (connection->xcb_connection, picture, color); } void @@ -866,35 +318,8 @@ _cairo_xcb_connection_render_create_linear_gradient (cairo_xcb_connection_t xcb_render_fixed_t *stops, xcb_render_color_t *colors) { - struct { - uint8_t major; - uint8_t minor; - uint16_t length; - uint32_t picture; - xcb_render_pointfix_t p1, p2; - uint32_t num_stops; - } req; - struct iovec vec[3]; - - COMPILE_TIME_ASSERT (sizeof (req) == 28); - assert((sizeof (req) + num_stops * (sizeof (xcb_render_fixed_t) + sizeof (xcb_render_color_t))) >> 2 < connection->root->maximum_request_length); - - req.major = connection->render->major_opcode; - req.minor = 34; - req.length = (sizeof (req) + num_stops * (sizeof (xcb_render_fixed_t) + sizeof (xcb_render_color_t))) >> 2; - req.picture = picture; - req.p1 = p1; - req.p2 = p2; - req.num_stops = num_stops; - - vec[0].iov_base = &req; - vec[0].iov_len = sizeof (req); - vec[1].iov_base = stops; - vec[1].iov_len = num_stops * sizeof (xcb_render_fixed_t); - vec[2].iov_base = colors; - vec[2].iov_len = num_stops * sizeof (xcb_render_color_t); - - _cairo_xcb_connection_write (connection, vec, 3); + xcb_render_create_linear_gradient (connection->xcb_connection, picture, + p1, p2, num_stops, stops, colors); } void @@ -908,40 +333,9 @@ _cairo_xcb_connection_render_create_radial_gradient (cairo_xcb_connection_t xcb_render_fixed_t *stops, xcb_render_color_t *colors) { - struct { - uint8_t major; - uint8_t minor; - uint16_t length; - uint32_t picture; - xcb_render_pointfix_t inner; - xcb_render_pointfix_t outer; - xcb_render_fixed_t inner_radius; - xcb_render_fixed_t outer_radius; - uint32_t num_stops; - } req; - struct iovec vec[3]; - - COMPILE_TIME_ASSERT (sizeof (req) == 36); - assert((sizeof (req) + num_stops * (sizeof (xcb_render_fixed_t) + sizeof (xcb_render_color_t))) >> 2 < connection->root->maximum_request_length); - - req.major = connection->render->major_opcode; - req.minor = 35; - req.length = (sizeof (req) + num_stops * (sizeof (xcb_render_fixed_t) + sizeof (xcb_render_color_t))) >> 2; - req.picture = picture; - req.inner = inner; - req.outer = outer; - req.inner_radius = inner_radius; - req.outer_radius = outer_radius; - req.num_stops = num_stops; - - vec[0].iov_base = &req; - vec[0].iov_len = sizeof (req); - vec[1].iov_base = stops; - vec[1].iov_len = num_stops * sizeof (xcb_render_fixed_t); - vec[2].iov_base = colors; - vec[2].iov_len = num_stops * sizeof (xcb_render_color_t); - - _cairo_xcb_connection_write (connection, vec, 3); + xcb_render_create_radial_gradient (connection->xcb_connection, picture, + inner, outer, inner_radius, outer_radius, + num_stops, stops, colors); } void @@ -953,34 +347,6 @@ _cairo_xcb_connection_render_create_conical_gradient (cairo_xcb_connection_t xcb_render_fixed_t *stops, xcb_render_color_t *colors) { - struct { - uint8_t major; - uint8_t minor; - uint16_t length; - uint32_t picture; - xcb_render_pointfix_t center; - xcb_render_fixed_t angle; - uint32_t num_stops; - } req; - struct iovec vec[3]; - - COMPILE_TIME_ASSERT (sizeof (req) == 24); - assert((sizeof (req) + num_stops * (sizeof (xcb_render_fixed_t) + sizeof (xcb_render_color_t))) >> 2 < connection->root->maximum_request_length); - - req.major = connection->render->major_opcode; - req.minor = 36; - req.length = (sizeof (req) + num_stops * (sizeof (xcb_render_fixed_t) + sizeof (xcb_render_color_t))) >> 2; - req.picture = picture; - req.center = center; - req.angle = angle; - req.num_stops = num_stops; - - vec[0].iov_base = &req; - vec[0].iov_len = sizeof (req); - vec[1].iov_base = stops; - vec[1].iov_len = num_stops * sizeof (xcb_render_fixed_t); - vec[2].iov_base = colors; - vec[2].iov_len = num_stops * sizeof (xcb_render_color_t); - - _cairo_xcb_connection_write (connection, vec, 3); + xcb_render_create_conical_gradient (connection->xcb_connection, picture, + center, angle, num_stops, stops, colors); } |