Сохранение текста, отображаемого с 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,

0 ответов

Другие вопросы по тегам