我正在尝试使用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):
如果我删除Pixmap
,则调用XftDrawCreateAlpha
和XSetWindowBackgroundPixmap
并直接在窗口上绘图,如
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);
}
结果如预期:
当我使用Pixmap
和XftDrawCreateAlpha
时,我无法理解为什么文字渲染不起作用。可能是什么原因?