diff options
author | Chris Wilson <chris@chris-wilson.co.uk> | 2012-02-22 10:41:37 +0000 |
---|---|---|
committer | Chris Wilson <chris@chris-wilson.co.uk> | 2012-02-22 10:41:37 +0000 |
commit | 3d499ea901b3a76cd765ddce9f4e7d3acebd1bd3 (patch) | |
tree | e49b7204c313bc2f0387a74e8df08f643f0204be /src/cairo-xlib-display.c | |
parent | 73df8eb8db521585f1ac6abb053843b5717cd27e (diff) | |
download | cairo-3d499ea901b3a76cd765ddce9f4e7d3acebd1bd3.tar.gz |
xlib: Replace obsolete disable-xrender with shiny new device debug interface
As prototyped with xcb.
Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
Diffstat (limited to 'src/cairo-xlib-display.c')
-rw-r--r-- | src/cairo-xlib-display.c | 57 |
1 files changed, 50 insertions, 7 deletions
diff --git a/src/cairo-xlib-display.c b/src/cairo-xlib-display.c index fd7253cc2..65cd3fbea 100644 --- a/src/cairo-xlib-display.c +++ b/src/cairo-xlib-display.c @@ -146,6 +146,17 @@ static const cairo_device_backend_t _cairo_xlib_device_backend = { _cairo_xlib_display_destroy, }; + +static void _cairo_xlib_display_select_compositor (cairo_xlib_display_t *display) +{ + if (display->render_major > 0 || display->render_minor >= 4) + display->compositor = _cairo_xlib_traps_compositor_get (); + else if (display->render_major > 0 || display->render_minor >= 0) + display->compositor = _cairo_xlib_mask_compositor_get (); + else + display->compositor = _cairo_xlib_core_compositor_get (); +} + /** * cairo_xlib_device_create: * @dpy: the display to create the device for @@ -221,6 +232,8 @@ _cairo_xlib_device_create (Display *dpy) } } + _cairo_xlib_display_select_compositor (display); + codes = XAddExtension (dpy); if (unlikely (codes == NULL)) { device = _cairo_device_create_in_error (CAIRO_STATUS_NO_MEMORY); @@ -331,13 +344,6 @@ _cairo_xlib_device_create (Display *dpy) display->buggy_pad_reflect = TRUE; } - if (display->render_major > 0 || display->render_minor >= 4) - display->compositor = _cairo_xlib_traps_compositor_get (); - else if (display->render_major > 0 || display->render_minor >= 0) - display->compositor = _cairo_xlib_mask_compositor_get (); - else - display->compositor = _cairo_xlib_core_compositor_get (); - display->next = _cairo_xlib_display_list; _cairo_xlib_display_list = display; @@ -552,6 +558,43 @@ _cairo_xlib_display_has_gradients (cairo_device_t *device) return ! ((cairo_xlib_display_t *) device)->buggy_gradients; } +/** + * cairo_xlib_device_debug_cap_xrender_version: + * @device: a #cairo_device_t for the XCB backend + * @major_version: major version to restrict to + * @minor_version: minor version to restrict to + * + * Restricts all future XCB surfaces for this devices to the specified version + * of the RENDER extension. This function exists solely for debugging purpose. + * It let's you find out how cairo would behave with an older version of + * the RENDER extension. + * + * Use the special values -1 and -1 for disabling the RENDER extension. + **/ +void +cairo_xlib_device_debug_cap_xrender_version (cairo_device_t *device, + int major_version, + int minor_version) +{ + cairo_xlib_display_t *display = (cairo_xlib_display_t *) device; + + if (device == NULL || device->status) + return; + + if (device->backend->type != CAIRO_DEVICE_TYPE_XLIB) + return; + + if (major_version < display->render_major || + (major_version == display->render_major && + minor_version < display->render_minor)) + { + display->render_major = major_version; + display->render_minor = minor_version; + } + + _cairo_xlib_display_select_compositor (display); +} + void cairo_xlib_device_debug_set_precision (cairo_device_t *device, int precision) |