我想用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元素,我也无法显示窗口的复制像素图。
你有什么想法帮助我吗? 感谢
答案 0 :(得分:3)
由于没有人帮助我,我找到了解决方案:
我只需要在我的窗口中复制部分根像素图:
xcb_copy_area_checked(backbone.connection,
rootpix,
my_window,
graphic_context,
x, y,
0, 0,
width, height)
即使我不确定这是最好的方法,它仍然有效。