Xft可以在Pixmaps上绘制矩形,但不能在文本上绘制矩形

时间:2016-11-21 11:38:53

标签: c x11 xlib

我正在尝试使用Xft渲染一些文本,并将结果Pixmap设置为X根背景。

尽管与X有一些外交,但我的代码很简单:

#include <stdio.h>
#include <unistd.h>

#include <X11/Xlib.h>
#include <X11/Xft/Xft.h>

int main()
{
    char font[] = "helvetica:size=11";
    char buf[] = "Lorem Ipsum";
    int s, x = 12;
    XRenderColor color = {0xFFFF, 0, 0, 0xFFFF};
    Display * d;
    Window r;
    Pixmap p;
    XftFont * f;
    XftDraw * drw;
    XftColor xftc;

    d = XOpenDisplay(NULL);
    s = DefaultScreen(d);
    r = RootWindow(d, s);
    if (!(f = XftFontOpenName(d, s, font))) printf("could not open font\n");
    if(!(p = XCreatePixmap(d, r, 1600, 900, DefaultDepth(d, s)))) printf("could not create pixmap\n");

    drw = XftDrawCreateAlpha(d, p, DefaultDepth(d, s));
    XftColorAllocValue(d, DefaultVisual(d, s), DefaultColormap(d, s), &color, &xftc);
    XftDrawStringUtf8(drw, &xftc, f, 100, 100, (XftChar8 *)buf, x);
    XftDrawRect(drw, &xftc, 10, 10, 50, 50);

    XSetWindowBackgroundPixmap(d, r, p);
    XFlush(d);

    XCloseDisplay(d);

    return 0;
}

这在根背景处仅显示(10,10)处的红色矩形而不是预期的红色&#34; Lorem Ipsum&#34;在Helvetica(100,100):

root window 1

如果我删除Pixmap,则调用XftDrawCreateAlphaXSetWindowBackgroundPixmap并直接在窗口上绘图,如

drw = XftDrawCreate(d, r, DefaultVisual(d, s), DefaultColormap(d, s));
XftColorAllocValue(d, DefaultVisual(d, s), DefaultColormap(d, s), &color, &xftc);

while(1) {
    XftDrawStringUtf8(drw, &xftc, f, 100, 100, (XftChar8 *)buf, x);
    XftDrawRect(drw, &xftc, 10, 10, 50, 50);

    XFlush(d);
    sleep(1);
}

结果如预期:

root window 2

当我使用PixmapXftDrawCreateAlpha时,我无法理解为什么文字渲染不起作用。可能是什么原因?

0 个答案:

没有答案