我想用 xcb 来说明窗口的伪透明(复制窗口背景上的根窗口像素图的一部分)
为此,我使用:
根像素图设置为 feh 然后我启动我的程序(只是代码的一部分):
->初始化连接:
xcb_connect()
Run Code Online (Sandbox Code Playgroud)
-> 创建窗口:
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
Run Code Online (Sandbox Code Playgroud)
-> 抓取 xcb 事件:
xcb_wait_for_event
Run Code Online (Sandbox Code Playgroud)
-> 回答 map_request_event(当它是我们窗口的请求时)或 property_notify(当更改的属性是通过 feh 的根像素图时):
获取根像素图:
xcb_get_property / xcb_get_property_reply / xcb_get_property_value
==> this works
Run Code Online (Sandbox Code Playgroud)
将根像素图的一部分复制到窗口像素图:
xcb_copy_area_checked(backbone.connection,
rootpix,
pixmap,
graphic_context,
x, y,
0, 0,
width, height)
Run Code Online (Sandbox Code Playgroud)
我使用 xcb_request_check 但似乎我对最后一个请求没有错误。
然后我用 cairo 在我的窗口中绘制元素。
问题是我只看到一个带有由 cairo 绘制的元素的白色窗口。即使没有 cairo 元素,我也无法显示窗口的复制像素图。
你有什么想法可以帮我吗?谢谢
由于没有人帮助我,我独自找到了解决方案:
我只需要在我的窗口中复制部分根像素图:
xcb_copy_area_checked(backbone.connection,
rootpix,
my_window,
graphic_context,
x, y,
0, 0,
width, height)
Run Code Online (Sandbox Code Playgroud)
即使我不确定这是最好的方法,它也有效。
| 归档时间: |
|
| 查看次数: |
1572 次 |
| 最近记录: |