Commit e1211a92 authored by Chris Lee's avatar Chris Lee

do not draw text with cairo directly on xlib pixmap (workaround for intel...

do not draw text with cairo directly on xlib pixmap (workaround for intel graphics bug, see emacs implementation)
parent 00f0bbd3
......@@ -478,14 +478,14 @@ void draw(Area *a)
a->_clear(a);
}
cairo_surface_t *cs = cairo_xlib_surface_create(server.display, a->pix, server.visual, a->width, a->height);
cairo_surface_t *cs = cairo_image_surface_create(CAIRO_FORMAT_ARGB32, a->width, a->height);
cairo_t *c = cairo_create(cs);
draw_background(a, c);
if (a->_draw_foreground)
a->_draw_foreground(a, c);
draw_cairo_surface_to_xpixmap(cs, a->pix);
cairo_destroy(c);
cairo_surface_destroy(cs);
}
......
......@@ -1229,3 +1229,19 @@ void dump_image_data(const char *file_name, const char *name)
imlib_free_image();
}
void draw_cairo_surface_to_xpixmap(cairo_surface_t *cs, Pixmap pix)
{
int w = cairo_image_surface_get_width(cs);
int h = cairo_image_surface_get_height(cs);
cairo_surface_t *cs_xlib = cairo_xlib_surface_create(server.display, pix, server.visual, w, h);
cairo_xlib_surface_set_size(cs_xlib, w, h);
cairo_t *c_xlib = cairo_create(cs_xlib);
cairo_set_source_surface(c_xlib, cs, 0, 0);
cairo_paint(c_xlib);
cairo_surface_flush(cs_xlib);
cairo_destroy(c_xlib);
cairo_surface_destroy(cs_xlib);
}
......@@ -154,6 +154,8 @@ void get_image_mean_color(const Imlib_Image image, Color *mean_color);
void dump_image_data(const char *file_name, const char *name);
void draw_cairo_surface_to_xpixmap(cairo_surface_t *cs, Pixmap pix);
#define free_and_null(p) \
{ \
free(p); \
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment