我需要一些代码来制作我的窗口(最好是所有小部件)半透明。 我知道我可以使用gtk_window_set_opacity(),但只有在复合管理器运行时它才有效,但如果没有呢? 我搜索过很多,发现很多代码甚至不能编译,不起作用或只是一个概念证明。没有充实的解决方案。我不想搞乱X11 Xlib糟糕的API(我只是没时间学习它)。
从哪里获取此类库/代码段?
答案 0 :(得分:3)
对此没有好的答案(这是合成管理者发明原因的一个很好的部分)。如果你已经可以做到这一点,那么人们就不会发明整个合成管理器机制。
旧的“透明终端”等中使用的唯一答案是基于窗口下方的内容截图,然后在您自己的窗口中绘制屏幕截图。这是一个涉及Xlib的混乱,很难获得大部分正确,不可能完全正确,并且效率低下。不过,你也许可以这样做。看看支持透明度的终端的旧版本,我认为VTE曾经有过这个代码,ZVT小部件肯定做到了。例如,Enlightenment终端也是如此。
但真正的方法是回归到没有CM的用户没有透明度。
答案 1 :(得分:2)
虽然现代X11服务器确实支持RGBA视觉效果,但这并不意味着,它们会进行alpha混合。 X11在模型上运行,窗口是单个共享帧缓冲区的掩码。 Z排序可能会剪切窗口的某些部分,因此根本不会绘制这些区域。
要启用透明度,合成管理器必须将窗口重定向到屏幕外渲染,然后从屏幕外渲染的部分组合您在屏幕上看到的最终图像。 XDamage扩展用于跟踪哪些窗口需要重新合成。