xcb说明伪透明度(根窗口像素图复制到子窗口背景)

时间:2012-04-06 07:02:25

标签: xcb

我想用xcb来说明windows的伪透明度(在窗口背景上复制root windows pixmap的一部分)

为此,我使用:

root pixmap设置为feh 然后我启动我的程序(只是代码的一部分):

- >初始化连接:

xcb_connect()

- >创建窗口:

xcb_create_window()
xcb_create_pixmap( connection,screen->root_depth, pixmap, screen->root, width, height)
xcb_create_gc( connection, graphic_context, pixmap, XCB_GC_FOREGROUND | XCB_GC_BACKGROUND, gc_values_mask)
xcb_map_window

- >抓住xcb事件:

xcb_wait_for_event

- >回答map_request_event(当它是我们窗口的请求时)或 property_notify(当更改属性是通过feh的根pixmap时):

获取根pixmap:

xcb_get_property / xcb_get_property_reply / xcb_get_property_value     
==> this works

将根像素图的一部分复制到窗口像素图:

xcb_copy_area_checked(backbone.connection,
              rootpix,
              pixmap,
              graphic_context,
              x, y,
              0, 0,
              width, height)

我使用的是xcb_request_check,但似乎我的最后一个请求没有错误。

然后我用cairo在窗口中绘制元素。

问题是我只看到一个带有cairo绘制元素的白色窗口。即使没有cairo元素,我也无法显示窗口的复制像素图。

你有什么想法帮助我吗? 感谢

1 个答案:

答案 0 :(得分:3)

由于没有人帮助我,我找到了解决方案:

我只需要在我的窗口中复制部分根像素图:

xcb_copy_area_checked(backbone.connection,
          rootpix,
          my_window,
          graphic_context,
          x, y,
          0, 0,
          width, height)

即使我不确定这是最好的方法,它仍然有效。