首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >X11/Xlib:创建"GlassPane"-Window

X11/Xlib:创建"GlassPane"-Window
EN

Stack Overflow用户
提问于 2010-12-02 00:28:29
回答 3查看 6K关注 0票数 5

我已经尝试使用C++ & X11创建一个完全透明的窗口。它不应该使用任何事件,而只是将它们转发到下面的窗口。某种类型的GlassPane,因为它是Java-视窗,但全屏。那我想在这个窗子上画画。

使用X11,这是不是可能的?

我的第一个尝试是忽略所有事件,只需使用XGetImage()从根窗口复制图像...但首先,这是相当慢的,因为窗口需要全屏显示。不幸的是,XShmGetImage在这里不是一个选择。

当然,这个窗口不需要任何装饰,但这不是一个大问题。

如何仅使用X11 / Xlib来完成此操作?如果不可能,我还需要什么?

如有任何帮助,我们不胜感激!

PS:XineramaCompiz都被激活了,如果这带来了问题,我可以停用它们。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2010-12-02 03:01:56

可以通过将窗口的输入形状设置为空来创建仅输出窗口。

接口为XFixesSetWindowShapeRegion(),可以单独设置ShapeInputShapeBoundingXFixesCreateRegion()用于获取要传入的地域。

然后你需要一个RGBA (with-alpha-channel)视觉效果,这样你就可以在大部分窗口中绘制透明的像素。

为了使透明度正常工作,需要一个合成窗口管理器。

票数 5
EN

Stack Overflow用户

发布于 2010-12-02 01:13:39

您需要在您的X Server中提供覆盖可视化支持,否则性能将非常糟糕,因为您必须不断地映射/取消映射窗口和/或一直执行get/putimage。

你必须让主/根平面不覆盖,并在其上创建一个覆盖视觉。所有在覆盖平面上清晰的东西都会通过“主屏幕”。

关于如何在“普通X”中做到这一点的文档非常稀少,更简单的方法是通过OpenGL / GLX,http://www.opengl.org/sdk/docs/man/xhtml/glXChooseVisual.xml -简单地尝试:

代码语言:javascript
复制
int query[] = { /* GLX_RGBA, */ GLX_LEVEL, 1, 0 };
overlayVisual = glXChooseVisual(mydisplay, DefaultScreen(mydisplay), query);
myWindow = XCreateWindow(..., overlayVisual, ...);

然后,您应该能够清除窗口以使“主根”可见,并在其中绘制以覆盖它。在“旧时代”,覆盖通常被要求是非RGB(颜色索引/调色板)视觉和色度键控用于透明部分。OpenGL RGBA应该支持通过alpha通道的透明度/混合,但是...

我还没有尝试过,我当前的帧缓冲区不支持覆盖。Nvidia在其X11驱动程序/配置文件的文档中提到了它们,因此我认为它们仍然存在,并且仍然可以以这种方式使用。

票数 4
EN

Stack Overflow用户

发布于 2021-09-16 01:47:04

Xlib/X11有一个原子可以很好地执行这个任务:"_NET_WM_WINDOW_OPACITY“

代码语言:javascript
复制
void ApplyAlpha (Display* display, Window window, byte Alpha)
  {
    int Alpha_;
    //
    Alpha_ = Alpha | Alpha << 8 | Alpha << 16 | Alpha << 24;
    if (Alpha == 0xFF)
      XDeleteProperty (display, window, XInternAtom (display, "_NET_WM_WINDOW_OPACITY", 0));
    else
      XChangeProperty (display, window, XInternAtom (display, "_NET_WM_WINDOW_OPACITY", 0),
                       XA_CARDINAL, 32, PropModeReplace, (byte *) &Alpha_, 1);
  }
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4326534

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档