Псевдопрозрачность в X Window System: методы и ограничения
Pseudo-transparency
Псевдопрозрачность в X Window System: имитация прозрачности окон для улучшения внешнего вида и интеграции с темами рабочего стола. Методы и особенности.
Сравнивайте с английским: нажмите на абзац — оригинал откроется в окне. Кнопка EN под абзацем показывает его прямо в тексте.
Содержание
Введение
Псевдопрозрачность — термин, используемый для клиентов X Window System, которые имитируют эффект полупрозрачности или прозрачности, манипулируя той же пиксельной картой, на которую было произведено рисование на корневом окне, или инструктируя X-сервер о том, что фоновая пиксельная карта должна быть унаследована от родительского окна.
Pseudo transparency is a term used for X Window System clients that simulate the appearance of translucency or transparency by manipulating the same pixmap that has been drawn on the root window, or by instructing the X Server that the Background Pixmap should be inherited from the window's parent.
Цель
Традиционно система X Window отставала от других оконных систем в добавлении чисто декоративных или эстетических функций, таких как прозрачность окон. Это стимулировало разработчиков создавать обходные решения для преодоления этого ограничения. Эта псевдопрозрачность, названная так потому, что видна фоновая пиксельная карта корневого окна (аналогично обоям рабочего стола), а не содержимое скрытых окон, позволяет пользователям делать окна менее громоздкими (например, эмуляторы терминалов, которые обычно занимают большие области текста), и гармонично сочетать их внешний вид с темами оформления рабочего стола.
Traditionally, the X Window System has lagged behind other windowing systems in adding purely eye candy or aesthetic features, such as window translucency. This has encouraged developers to develop kludges to overcome this limitation. This pseudo transparency, so called as the background pixmap of the root window is visible (analogous to desktop wallpaper) rather than any obscured windows, allows users to make windows look less imposing (such as Terminal emulators, which usually comprise large chunks of text), and to integrate the appearance of windows with their desktop themes.
Реализация
Существует три распространенных метода достижения псевдопрозрачности с использованием Xlib, каждый из которых обладает своими преимуществами и недостатками.
There are three common methods for achieving pseudo transparency using Xlib, each with its own advantages and drawbacks.
Родительский родственник
Метод "родительского окна" использует XSetWindowBackgroundPixmap для наследования фонового изображения родительского окна. К сожалению, при использовании этого метода сервер X допускает выполнение очень ограниченного числа операций с фоновой растровой картой (например, XOR), что не позволяет клиентам реализовать какие-либо продвинутые методы фильтрации изображений.
The "parental relative" method uses XSetWindowBackgroundPixmap to inherit the parent window's background image. Unfortunately, using this method, the X server permits very few operations to be performed on the background pixmap (such as XOR), preventing clients from implementing any sort of advanced image filtering.
_XROOTPMAP_ID и ESETROOT_PMAP_ID свойства
Эти свойства используются для того, чтобы сообщить окну, где можно найти растровую карту, используемую в корневом окне. Используя эту информацию, клиент может отрисовать фрагмент изображения (соответствующий размеру и положению окна) на своем фоне, добиваясь эффекта прозрачности. Этот метод требует наибольшего объема памяти, но позволяет клиентам выполнять любые операции с данными изображения, например, изменение оттенка или затенение.
These properties are used to inform the window where it can find the pixmap used on the root window. Using this information, a client can paint a section of the image (corresponding to the size and position of the window) onto its background, achieving the effect of transparency. This method uses the most memory, but has the advantage of allowing clients to perform any operation, such as tinting or shading, on the image data.
XCopyArea (пространство копирования)
XCopyArea позволяет добиться более реалистичного эффекта прозрачности, включая в него даже перекрытые окна, однако существенным недостатком является то, что он работает только с модальными окнами. Этот метод просто использует функцию XCopyArea для создания частичного скриншота, который затем используется в качестве фонового растрового изображения окна.
XCopyArea can achieve a more realistic transparency effect in that it can include obscured windows, but with the significant disadvantage that it is only usable with modal windows. This method simply uses the XCopyArea function to take a partial screenshot for use as the window's background pixmap.
Будущее
Недавние технологии, такие как DirectFB, Direct Rendering Infrastructure и аппаратное композитное отображение через OpenGL, позволяют X-клиентским приложениям использовать настоящую альфа-прозрачность.
Recent technologies such as DirectFB, Direct Rendering Infrastructure, and hardware compositing via OpenGL allow X client applications to utilize true alpha transparency.