all repos — tint2 @ e1211a929fbf1c07815112ee109f3258f5547c1e

fork of the tint2 desktop panel for my custom setup - only minimized windows across all desktops for the taskbar

do not draw text with cairo directly on xlib pixmap (workaround for intel graphics bug, see emacs implementation)
Chris Lee @klee93
commit

e1211a929fbf1c07815112ee109f3258f5547c1e

parent

00f0bbd354b655ed997ddb93c8e7da8617aba8ac

3 files changed, 20 insertions(+), 2 deletions(-)

jump to
M src/util/area.csrc/util/area.c

@@ -478,14 +478,14 @@ } else {

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); }
M src/util/common.csrc/util/common.c

@@ -1229,3 +1229,19 @@ g_free(source_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); +}
M src/util/common.hsrc/util/common.h

@@ -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); \