Intereting Posts
Как изменить символ в строке с помощью указателей? Строгое нарушение псевдонима или нарушение выравнивания с помощью структуры с гибким элементом массива? getchar () в C завершается без нажатия Enter Будет ли сокращенный IF обеспечивать повышение эффективности по сравнению с IF по умолчанию? Как MPI_Gatherv с перемещениями на стороне отправки? sYSMALLOc: Assertion failed – любые идеи по эффективному отладке? Как я могу узнать, включен ли утечка Sanitizer во время компиляции? Зачем использовать xor с литералом вместо инверсии (побитовое) Печать указателей в C Написание большего количества символов, чем malloced. Почему это не подводит? Системный вызов sysinfo не возвращает правильное значение freeram Использование функции «подстановочные знаки» в Android.mk использование указателей для отображения содержимого массива как остановить цикл arduino Vulkan: В чем смысл sType в vk * CreateInfo structs?

Xft может рисовать прямоугольники на пикселях, но не текст

Я пытаюсь сделать некоторый текст с Xft и установить полученный Pixmap качестве фона корня X.

Несмотря на некоторую дипломатию с X, код, который у меня есть, прост:

 #include  #include  #include  #include  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) на корневом фоне, а не ожидаемый красный «Lorem Ipsum» в Helvetica at (100, 100):

корневое окно 1

Если я удалю 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); } 

результат будет таким, как ожидалось:

корневое окно 2

Я не понимаю, почему рендеринг текста не работает, когда я использую Pixmap и XftDrawCreateAlpha . В чем причина?