Gtk + / X11:有和没有复合管理器的半透明窗口?

我需要一些代码来制作我的窗口(最好是所有小部件)半透明。 我知道我可以使用gtk_window_set_opacity(),但它只在复合管理器运行时才有效,但如果没有呢? 我已经google了很多,发现很多代码甚至没有编译,不起作用或只是一个概念certificate。 没有充实的解决方案。 我不想乱用X11 Xlib糟糕的API(我只是没时间学习它)。

哪里可以获得这样的库/代码片段?

对此没有好的答案(这是合成管理者发明的一个很好的部分)。 如果你已经可以做到这一点,那么人们就不会发明整个合成管理器机制。

在旧的“透明终端”等中使用的唯一答案是基于在窗口下方制作屏幕截图,然后在您自己的窗口中绘制屏幕截图。 这是一个涉及Xlib的混乱,很难得到大部分正确,不可能完全正确,效率低下。 不过,你也许可以这样做。 看看支持透明度的终端的旧版本,我认为VTE曾经拥有这个代码,ZVT小部件肯定做到了。 例如,启蒙终端也是如此。

但真正的方法是回归到没有CM的用户没有透明度。

虽然现代X11服务器确实支持RGBA视觉效果,但这并不意味着它们会进行alpha混合。 X11在模型上运行,窗口是单个共享帧缓冲区的掩码。 Z排序可能会剪切窗口的某些部分,因此根本不会绘制这些区域。

要启用透明度,合成管理器必须窗口重定向到屏幕外渲染,然后从屏幕外渲染的部分组合您在屏幕上看到的最终图像。 XDamage扩展用于跟踪哪些窗口需要重新合成。