在Linux X11 / Gtk上创建一个分层窗口

时间:2012-05-02 05:00:50

标签: c# c++ gtk x11

我的问题一般是如何使用X11或某些工具包(如Gtk)在Linux上创建和定位分层窗口。当我说分层窗口时,我指的是一个窗口,其形状和透明度由包含rgb和alpha(透明度)通道的像素数据定义。请参见下面的屏幕截图。

我使用简单的UpdateLayeredWindow API在Windows上广泛使用它们,我想知道如何在Linux上做同样的事情。

感谢。

Layered butterflies on Windows

3 个答案:

答案 0 :(得分:2)

X11最初只支持一位透明(需要SHAPE扩展,但是现在几乎所有的X11服务器都实现了它)。使用XShapeCombineMaskgtk_widget_shape_combine_mask功能。

如果你想要抗锯齿透明度,那么最简单的方法就是使用cairo工具包。可以找到一个示例here

答案 1 :(得分:0)

要在X11中使用透明度,您需要

  1. create window with 32 bit depth(您需要在创建窗口时指定32位视觉,背像素,色彩映射和borderpixel)
  2. 在窗口表面绘制ARGB图片(如果使用背景像素图创建它,则在窗口像素图上绘制)。请注意,您需要使用预乘的ARGB(a = 128,r = 255,g = 255,b = 255是非透明白色,a = 128,r = 128,g = 128,b = 128是半透明的白色)。您可以使用标准绘图命令,XRender或使用PutImage请求发送ARGB位图。

答案 2 :(得分:0)

在X11中,有两种可能的方法:通过 SHAPE 扩展进行简单的位图屏蔽(甚至可以用于非常老的X服务器),或者使用ARGB视觉效果和合成器。我在这个答案中提供了在ARGB可视窗口上执行OpenGL渲染的示例代码:

https://stackoverflow.com/a/9215724/524368