Сохранение текста, отображаемого с Xft в корневом окне
Я использую Xft, чтобы нарисовать текст в корневом окне, например
XftDrawStringUtf8(drw, &xftc, f, 50, 50, (XftChar8 *)buf, x);
После этого я хотел бы сохранить текст даже после того, как моя программа убита, аналогично feh
или же xsetroot
поведение. Я посмотрел на их источники, и они оба, кажется,
- сохранить то, что они нарисовали в
Pixmap
состав - встроить это
Atom
которые они хранят на сервере сXChangeProperty
- вызов
XSetCloseDownMode
сRetainPermanent
,
Образец из xsetroot
:
/* Free past incarnation if needed, and retain state if needed. */
static void
FixupState(void)
{
Atom prop, type;
int format;
unsigned long length, after;
unsigned char *data;
if (!(DefaultVisual(dpy, screen)->class & Dynamic))
unsave_past = 0;
if (!unsave_past && !save_colors)
return;
prop = XInternAtom(dpy, "_XSETROOT_ID", False);
if (unsave_past) {
(void)XGetWindowProperty(dpy, root, prop, 0L, 1L, True, AnyPropertyType,
&type, &format, &length, &after, &data);
if ((type == XA_PIXMAP) && (format == 32) &&
(length == 1) && (after == 0))
XKillClient(dpy, *((Pixmap *)data));
else if (type != None)
fprintf(stderr, "%s: warning: _XSETROOT_ID property is garbage\n",
program_name);
}
if (save_colors) {
if (!save_pixmap)
save_pixmap = XCreatePixmap(dpy, root, 1, 1, 1);
XChangeProperty(dpy, root, prop, XA_PIXMAP, 32, PropModeReplace,
(unsigned char *) &save_pixmap, 1);
XSetCloseDownMode(dpy, RetainPermanent);
}
}
Тем не мение, xsetroot
имеет свой Pixmap
структура готова, сохранена с XCopyPlane
до этого. Я не уверен, как сохранить то, что я нарисовал с Xft как Pixmap
,