Введение

Псевдопрозрачность — термин, используемый для клиентов X Window System, которые имитируют эффект полупрозрачности или прозрачности, манипулируя той же пиксельной картой, на которую было произведено рисование на корневом окне, или инструктируя X-сервер о том, что фоновая пиксельная карта должна быть унаследована от родительского окна.

Цель

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

Реализация

Существует три распространенных метода достижения псевдопрозрачности с использованием Xlib, каждый из которых обладает своими преимуществами и недостатками.

Родительский родственник

Метод "родительского окна" использует XSetWindowBackgroundPixmap для наследования фонового изображения родительского окна. К сожалению, при использовании этого метода сервер X допускает выполнение очень ограниченного числа операций с фоновой растровой картой (например, XOR), что не позволяет клиентам реализовать какие-либо продвинутые методы фильтрации изображений.

_XROOTPMAP_ID и ESETROOT_PMAP_ID свойства

Эти свойства используются для того, чтобы сообщить окну, где можно найти растровую карту, используемую в корневом окне. Используя эту информацию, клиент может отрисовать фрагмент изображения (соответствующий размеру и положению окна) на своем фоне, добиваясь эффекта прозрачности. Этот метод требует наибольшего объема памяти, но позволяет клиентам выполнять любые операции с данными изображения, например, изменение оттенка или затенение.

XCopyArea (пространство копирования)

XCopyArea позволяет добиться более реалистичного эффекта прозрачности, включая в него даже перекрытые окна, однако существенным недостатком является то, что он работает только с модальными окнами. Этот метод просто использует функцию XCopyArea для создания частичного скриншота, который затем используется в качестве фонового растрового изображения окна.

Будущее

Недавние технологии, такие как DirectFB, Direct Rendering Infrastructure и аппаратное композитное отображение через OpenGL, позволяют X-клиентским приложениям использовать настоящую альфа-прозрачность.