diff options
author | Jamey Sharp <jamey@minilop.net> | 2006-10-14 19:05:52 -0700 |
---|---|---|
committer | Jamey Sharp <jamey@minilop.net> | 2006-10-14 19:05:52 -0700 |
commit | e09eb3ae2f7f98255ee722cc1c7555ff6f8c7b8b (patch) | |
tree | 92e5c2c9afc4d98c2c4def7e4d1ff696f00fac2e | |
parent | e8cc999b0433aa5b227c5fcc93413ec017d0db8a (diff) |
Simplify xcb_render_util_composite_text, add xcb_render_util_composite_text_checked.
-rw-r--r-- | renderutil/glyph.c | 85 | ||||
-rw-r--r-- | renderutil/xcb_renderutil.h | 11 |
2 files changed, 70 insertions, 26 deletions
diff --git a/renderutil/glyph.c b/renderutil/glyph.c index da8c53f..dc6624f 100644 --- a/renderutil/glyph.c +++ b/renderutil/glyph.c @@ -198,6 +198,18 @@ xcb_render_util_change_glyphset ( stream->current_glyphset = glyphset; } +typedef xcb_void_cookie_t +(*xcb_render_composite_glyphs_func) (xcb_connection_t *c, + uint8_t op, + xcb_render_picture_t src, + xcb_render_picture_t dst, + xcb_render_pictformat_t mask_format, + xcb_render_glyphset_t glyphset, + int16_t src_x, + int16_t src_y, + uint32_t glyphcmds_len, + const uint8_t *glyphcmds); + xcb_void_cookie_t xcb_render_util_composite_text ( @@ -210,45 +222,66 @@ xcb_render_util_composite_text ( int16_t src_y, xcb_render_util_composite_text_stream_t *stream ) { - xcb_void_cookie_t reply = { 0 }; - uint32_t stream_len = CURRENT_LEN(stream); + xcb_render_composite_glyphs_func f; switch (stream->glyph_size) { case 1: - reply = xcb_render_composite_glyphs_8 ( - xc, op, src, dst, mask_format, - stream->initial_glyphset, - src_x, src_y, - stream_len, - (uint8_t *)stream->stream - ); + f = xcb_render_composite_glyphs_8; break; case 2: - reply = xcb_render_composite_glyphs_16 ( - xc, op, src, dst, mask_format, - stream->initial_glyphset, - src_x, src_y, - stream_len, - (uint8_t *)stream->stream - ); + f = xcb_render_composite_glyphs_16; break; case 4: - reply = xcb_render_composite_glyphs_32 ( - xc, op, src, dst, mask_format, - stream->initial_glyphset, - src_x, src_y, - stream_len, - (uint8_t *)stream->stream - ); + f = xcb_render_composite_glyphs_32; break; default: /* uninitialized */ - break; + return xcb_no_operation(xc); } - return reply; + return f( + xc, op, src, dst, mask_format, + stream->initial_glyphset, + src_x, src_y, + CURRENT_LEN(stream), + (uint8_t *)stream->stream + ); } -/* FIXME: xcb_render_util_composite_text_checked */ +xcb_void_cookie_t +xcb_render_util_composite_text_checked ( + xcb_connection_t *xc, + uint8_t op, + xcb_render_picture_t src, + xcb_render_picture_t dst, + xcb_render_pictformat_t mask_format, + int16_t src_x, + int16_t src_y, + xcb_render_util_composite_text_stream_t *stream ) +{ + xcb_render_composite_glyphs_func f; + + switch (stream->glyph_size) + { + case 1: + f = xcb_render_composite_glyphs_8_checked; + break; + case 2: + f = xcb_render_composite_glyphs_16_checked; + break; + case 4: + f = xcb_render_composite_glyphs_32_checked; + break; + default: /* uninitialized */ + return xcb_no_operation_checked(xc); + } + return f( + xc, op, src, dst, mask_format, + stream->initial_glyphset, + src_x, src_y, + CURRENT_LEN(stream), + (uint8_t *)stream->stream + ); +} void xcb_render_util_composite_text_free ( diff --git a/renderutil/xcb_renderutil.h b/renderutil/xcb_renderutil.h index 33592a2..2026585 100644 --- a/renderutil/xcb_renderutil.h +++ b/renderutil/xcb_renderutil.h @@ -125,6 +125,17 @@ xcb_render_util_composite_text ( int16_t src_y, xcb_render_util_composite_text_stream_t *stream ); +xcb_void_cookie_t +xcb_render_util_composite_text_checked ( + xcb_connection_t *xc, + uint8_t op, + xcb_render_picture_t src, + xcb_render_picture_t dst, + xcb_render_pictformat_t mask_format, + int16_t src_x, + int16_t src_y, + xcb_render_util_composite_text_stream_t *stream ); + void xcb_render_util_composite_text_free ( xcb_render_util_composite_text_stream_t *stream ); |