Avoid X errors when running against servers which implement XRender < 0.4.

2005-01-18  Matthias Clasen  <mclasen@redhat.com>

	Avoid X errors when running against servers which
	implement XRender < 0.4.  (#164427, Albert Chin)

	* gdk/x11/gdkprivate-x11.h:
	* gdk/x11/gdkdrawable-x11.c (_gdk_x11_have_render_with_trapezoids):
	New function to check for trapezoid support in XRender.
	(gdk_x11_draw_trapezoids, _gdk_x11_drawable_draw_xtrapezoids):
	Use it here.

	* gdk/x11/gdkdisplay-x11.h (struct _GdkDisplayX11): Add a
	separate have_render_with_trapezoids field.

	* gdk/x11/gdkdisplay-x11.c (gdk_display_open): Initialize it.
This commit is contained in:
Matthias Clasen
2005-01-18 15:19:53 +00:00
committed by Matthias Clasen
parent 220946ed7d
commit 014a347f00
7 changed files with 85 additions and 3 deletions

View File

@ -321,6 +321,36 @@ _gdk_x11_have_render (GdkDisplay *display)
return x11display->have_render == GDK_YES;
}
gboolean
_gdk_x11_have_render_with_trapezoids (GdkDisplay *display)
{
Display *xdisplay = GDK_DISPLAY_XDISPLAY (display);
GdkDisplayX11 *x11display = GDK_DISPLAY_X11 (display);
if (x11display->have_render_with_trapezoids == GDK_UNKNOWN)
if (!_gdk_x11_have_render (display))
x11display->have_render_with_trapezoids = GDK_NO;
else
{
/*
* Require protocol >= 0.4 for CompositeTrapezoids support.
*/
int major_version, minor_version;
#define XRENDER_TETRAPEZOIDS_MAJOR 0
#define XRENDER_TETRAPEZOIDS_MINOR 4
if (XRenderQueryVersion (xdisplay, &major_version,
&minor_version))
if ((major_version < XRENDER_TETRAPEZOIDS_MAJOR) ||
((major_version == XRENDER_TETRAPEZOIDS_MAJOR) &&
(minor_version < XRENDER_TETRAPEZOIDS_MINOR)))
x11display->have_render_with_trapezoids = GDK_NO;
}
return x11display->have_render_with_trapezoids == GDK_YES;
}
static XftDraw *
gdk_x11_drawable_get_xft_draw (GdkDrawable *drawable)
{
@ -1496,7 +1526,7 @@ gdk_x11_draw_trapezoids (GdkDrawable *drawable,
XTrapezoid *xtrapezoids;
gint i;
if (!_gdk_x11_have_render (display))
if (!_gdk_x11_have_render_with_trapezoids (display))
{
GdkDrawable *wrapper = GDK_DRAWABLE_IMPL_X11 (drawable)->wrapper;
GDK_DRAWABLE_CLASS (parent_class)->draw_trapezoids (wrapper, gc,
@ -1603,7 +1633,7 @@ _gdk_x11_drawable_draw_xtrapezoids (GdkDrawable *drawable,
XftDraw *draw;
if (!_gdk_x11_have_render (display))
if (!_gdk_x11_have_render_with_trapezoids (display))
{
/* This is the case of drawing the borders of the unknown glyph box
* without render on the display, we need to feed it back to