3

我想用 xcb 说明 windows 的伪透明度(在窗口背景上复制根窗口 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的根像素图时):

获取根像素图:

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 元素,我也无法显示窗口的复制像素图。

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

4

1 回答 1

5

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

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

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

即使我不确定这是最好的方法,它也可以工作。

于 2012-04-08T08:26:57.220 回答