3

xcb を使用してウィンドウの疑似透過性を説明したい (ウィンドウの背景にルート ウィンドウのピックスマップの一部をコピーする)

そのために、私は以下を使用します:

ルート 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 を使用していますが、この最後のリクエストにはエラーがないようです。

次に、カイロを使用してウィンドウに要素を描画します。

問題は、要素がカイロによって描画された白いウィンドウが表示されることです。カイロ要素がなくても、ウィンドウのコピーされたピックスマップを表示できません。

私を助けるアイデアはありますか?ありがとう

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 に答える