#include #include #include #include #include #include #include static char glyphdata[4096] = { }; static GlyphSet make_glyphs (Display *dpy) { GlyphSet glyphset; Glyph gid = 1; XGlyphInfo glyphinfo; int i; for (i = 0; i < sizeof (glyphdata); ++i) { glyphdata[i] = i & 0x07; } glyphinfo.width = 64; glyphinfo.height = 64; glyphinfo.x = 0; glyphinfo.y = 0; glyphinfo.xOff = 0; glyphinfo.yOff = 0; glyphset = XRenderCreateGlyphSet ( dpy, XRenderFindStandardFormat (dpy, PictStandardA8)); XRenderAddGlyphs ( dpy, glyphset, &gid, &glyphinfo, 1, glyphdata, 64 * 64); return glyphset; } int main () { Display *dpy = XOpenDisplay (NULL); Window window; Damage damage; int devent, derror; int revent, rerror; Picture dst; Picture src; XRenderPictureAttributes attr; GlyphSet glyphset; XRenderColor color = { 0x8080, 0xffff, 0x3232, 0xefef }; window = XCreateSimpleWindow ( dpy, DefaultRootWindow (dpy), 100, 100, 300, 300, 0, 0, 0); XDamageQueryExtension (dpy, &devent, &derror); XRenderQueryExtension (dpy, &revent, &rerror); damage = XDamageCreate (dpy, window, XDamageReportRawRectangles); XMapWindow (dpy, window); src = XRenderCreateSolidFill (dpy, &color); dst = XRenderCreatePicture ( dpy, window, XRenderFindStandardFormat (dpy, PictStandardRGB24), 0, &attr); glyphset = make_glyphs(dpy); for (;;) { XEvent event; char c = 1; int dstx = rand() % 300; int dsty = rand() % 300; XSync (dpy, False); while (XPending (dpy)) { XNextEvent (dpy, &event); if (event.type == devent + XDamageNotify) printf ("Got damage\n"); } XRenderCompositeString8 (dpy, PictOpOver, src, dst, NULL, glyphset, 0, 0, dstx, dsty, &c, 1); usleep (70000); } return 0; }