【发布时间】:2012-05-11 14:03:39
【问题描述】:
我的问题通常是如何使用 X11 或 Gtk 等工具包在 Linux 上创建和定位分层窗口。当我说分层窗口时,我的意思是一个窗口,其形状和透明度由包含 rgb 和 alpha(透明度)通道的像素数据定义。请参阅下面的屏幕截图。
我已经使用足够简单的 UpdateLayeredWindow API 在 Windows 上广泛使用它们,我想知道如何在 Linux 上做同样的事情。
谢谢。
【问题讨论】:
我的问题通常是如何使用 X11 或 Gtk 等工具包在 Linux 上创建和定位分层窗口。当我说分层窗口时,我的意思是一个窗口,其形状和透明度由包含 rgb 和 alpha(透明度)通道的像素数据定义。请参阅下面的屏幕截图。
我已经使用足够简单的 UpdateLayeredWindow API 在 Windows 上广泛使用它们,我想知道如何在 Linux 上做同样的事情。
谢谢。
【问题讨论】:
X11 最初只支持一位透明(需要 SHAPE 扩展,但现在几乎所有 X11 服务器都实现了它)。使用XShapeCombineMask 或gtk_widget_shape_combine_mask 函数。
如果您想要抗锯齿透明度,那么可能最简单的方法是使用 cairo 工具包。一个例子可以在here找到。
【讨论】:
在 X11 中,有两种可能的方法:通过 SHAPE 扩展进行简单的位图遮罩(甚至适用于非常旧的 X 服务器),或使用 ARGB 视觉效果和合成器。我在这个答案中提供了在 ARGB 可视窗口上执行 OpenGL 渲染的示例代码:
【讨论】:
要在 X11 中使用透明度,您需要
【讨论】: