Я пытаюсь создать программу для системного трея для Linux (тестирование на alpine и debian на двух разных машинах с разными мониторами и разными видеодрайверами).
// parse a color
XColor parsed;
parsed.flags = 0;
// input is white #FFFFFF
int found_color = XParseColor(dpy, wa.colormap, "#FFFFFF", &parsed);
// the above fails, but the following succeeds
// int found_color = XParseColor(dpy, wa.colormap, "#FF00FF", &parsed);
printf("found color: %x\n", found_color);
printf("parsed pixel: %d %d %d\n", parsed.red, parsed.green, parsed.blue);
if(XAllocColor(dpy,wa.colormap,&parsed) == 0){
printf("Failed to allocate color\n");
return 1;
}
printf("cm: %lx\n", wa.colormap);
printf("pp: %lu\n", parsed.pixel);
win = XCreateSimpleWindow(dpy, root, 0, 0, width, height, 0, 0, parsed.pixel);
это выдает следующее:
найденный цвет: 1
проанализированный пиксель: 65280 65280 65280
см: 22 * 1011 *
pp. 16777215
Xlib находит цвет, определенный кодом #FFFFFF, возвращает соответствующие уровни цвета u16, а затем десятичное значение 16777215, которое равно 0xFFFFFF.
Так что все до конца здесь выглядит хорошо.Но окно просто прозрачно в моей панели задач.Как упоминалось в закомментированном вызове XParseColor, если я изменю значение на FF00FF, на моей панели задач появится симпатичный маленький пурпурный квадрат.
По некоторым причинам, некоторые значения просто не отображаются для меня.Другой пример - # 0000FF.100% синего не будет отображаться, однако # 0100FF будет!
Я думаю, что мне просто не хватает чего-то маленького в слое управления цветом, но я прошел весь API и не могу понятьчто мне не хватает.
Я переводю цвет в точный XColor, затем я получаю приблизительный цвет, поддерживаемый моим оборудованием, когда я вызываю XAllocColor.
(Полный код доступен здесь )