Xlib проанализировал цвет не рендеринг - PullRequest
0 голосов
/ 05 октября 2018

Я пытаюсь создать программу для системного трея для 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.

(Полный код доступен здесь )

...