Gtk + / X11: полупрозрачные окна с и без составных менеджеров? - PullRequest
1 голос
/ 11 февраля 2011

Мне нужен код для того, чтобы сделать мое окно (и желательно все виджеты на нем) полупрозрачным. Я знаю, что могу поиграть с gtk_window_set_opacity (), но он работает только тогда, когда работает композитный менеджер, но что если нет? Я много гуглил, нашел много кода, который в основном даже не компилируется, не работает или просто доказательство концепции. Нет удовлетворительного решения. Я не хочу связываться с ужасным API X11 Xlib (у меня просто нет времени на его изучение).

Где взять такую ​​библиотеку / фрагмент кода?

Ответы [ 2 ]

3 голосов
/ 11 февраля 2011

Нет хорошего ответа на этот вопрос (что является хорошей частью того, почему были изобретены менеджеры композитинга). Если бы вы уже могли это сделать, люди бы не изобрели весь механизм менеджера композитинга.

Единственный ответ, используемый в старых «прозрачных терминалах» и т. П., Основан на создании снимков экрана под окном, а затем создании снимка экрана в вашем собственном окне. Это беспорядок, связанный с Xlib, который трудно понять в основном правильно, невозможно сделать полностью правильным и неэффективным. Тем не менее, вы могли бы сделать это, возможно. Посмотрите на старые версии терминалов, поддерживающих прозрачность, я думаю, что у VTE был этот код, виджет ZVT, конечно, имел. Например, терминал Просветления.

Но на самом деле путь заключается в том, чтобы просто отказаться от прозрачности для пользователей без CM.

2 голосов
/ 11 февраля 2011

Хотя современные серверы X11 поддерживают визуальные эффекты RGBA, это не значит, что они будут выполнять альфа-смешивание. X11 работает на модели, окно является маской на одном общем кадровом буфере. Z-порядок может обрезать части окна, поэтому эти области вообще не рисуются.

Чтобы включить прозрачность, менеджер компоновки должен перенаправить окна для рендеринга за пределами экрана, а затем скомпоновать окончательное изображение, которое вы видите на экране из этих закадровых отрендеренных частей. Расширение XDamage используется для отслеживания того, какие окна нужно перекомпоновать.

...