2012-04-06 5 views
0

ich die Pseudo-Transparenz von Fenstern mit xcb zu veranschaulichen wollen (Teil der Wurzel Fenster pixmap auf einem Fenster Hintergrund kopieren)xcb illustrieren Pseudo-Transparenz (Kopie des Root-Fenster pixmap auf einem Hintergrund Kinder Fenster)

Dafür I Verwendung:

die Wurzel pixmap wird mit feh dann habe ich mein Programm starten, das zu tun (nur ein Teil des Codes):

-> initialisieren Verbindung:

xcb_connect() 

-> das Fenster erstellen:

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 

-> Greifer xcb Veranstaltung:

xcb_wait_for_event 

-> Antwort auf map_request_event oder property_notify (wenn es der Wunsch unserer Fenster ist) (wenn geändert Eigenschaft ist die Wurzel pixmap über feh):

die Wurzel pixmap erhalten:

xcb_get_property/xcb_get_property_reply/xcb_get_property_value  
==> this works 

kopieren Teil der Wurzel Pixmap Fenster pixmap:

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

Ich benutze xcb_request_check aber es scheint, dass ich keinen Fehler mit diesem letzten Antrag haben.

Dann zeichne ich Elemente in meinem Fenster mit Kairo.

Das Problem ist, dass ich nur ein weißes Fenster mit dem Element zeichnen von Kairo sehen. Auch ohne die cairo-Elemente kann ich die kopierte Pixmap meines Fensters nicht anzeigen.

Haben Sie eine Idee, mir zu helfen? Dank

Antwort

2

Da niemand hilft mir, finde ich die Lösung allein:

Ich habe nur einen Teil der Wurzel pixmap in meinem Fenster kopieren:

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

Es funktioniert auch, wenn ich nicht sicher bin, es ist der beste Weg, es zu tun.

Verwandte Themen