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

3
我的问题是如何在Linux上使用X11或一些工具包如Gtk创建和定位分层窗口。当我说分层窗口时,我的意思是其形状和透明度由包含rgb和alpha(透明度)通道的像素数据定义的窗口。请参见下面的屏幕截图。在Windows上,我广泛使用简单的UpdateLayeredWindow API,想知道如何在Linux上做同样的事情。谢谢。
3个回答

2

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

如果您想要抗锯齿透明度,则可能最简单的方法是使用cairo工具包。示例可以在这里找到。


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

https://dev59.com/G2855IYBdhLWcg3w-JbR#9215724


0

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

  1. 创建32位深度的窗口(创建窗口时需要指定32位可视化、背景像素、颜色映射和边框像素)
  2. 在窗口表面上绘制ARGB图片(或者在创建带有背景像素的窗口像素图上)。请注意,您需要使用预乘的ARGB(a=128,r=255,g=255,b=255是不透明的白色,a=128,r=128,g=128,b=128是半透明的白色)。您可以使用标准绘图命令、XRender或只需使用PutImage请求发送ARGB位图。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接