2010-04-17 5 views
0

J'écris du code de bas niveau pour la plate-forme X11. Pour obtenir les meilleures performances de copie de données, j'utilise les extensions XFixes/XDamage.comment effacer les régions XFixes

Comment effacer le contenu de la région XFixes après un cycle de rafraîchissement? Ou se nettoient-ils après avoir utilisé XFixesSetPictureClipRegion?

Mon code est quelque chose comme ça:

Display xdpy; 
XShamPixmap pixmap_; 
XFixesRegion region_; 

damage_event_callback(damage_geometry_t geometry, XDamage damage,...) { 
    unsigned curr_region = XFixesCreateRegion(xdpy, 0, 0); 
    XDamageSubtract(xdpy, damage, None, curr_region); 
    XFixesTranslateRegion(xdpy, curr_region, geometry.left(), geometry.top()); 
    XFixesUnionRegion (xdpy, region_, region_, curr_region); 
    }  

process_damage_events(...) { 
    XFixesSetPictureClipRegion(xdpy, pixmap_, 0, 0, region_); 
    XCopyArea (xdpy, window_->id(), 
       pixmap_, XDefaultGC(xdpy, XDefaultScreen(xdpy)), 
       0,0,width(),height(),0,0); 
    /*Should clear region_ here 
    */ 

    ... 
    } 

Actuellement, j'effacer la région en supprimant et en recréant, mais je suppose que ce n'est pas la meilleure façon de le faire.

Répondre

1

Je ne suis pas sûr de ce que vous voulez dire en effaçant la région; Voulez-vous dire annuler le clip sur votre photo, ou libérer la région?

Pour désélectionner le clip je suppose que vous souhaitez définir la région de clip Aucun

Pour libérer la région XFixesDestroyRegion()

Pour la région vide, vous pouvez probablement XFixesSetRegion (dpy, région, NULL , 0) mais je ne suis pas sûr que cela va changer le clip sur l'image sauf si vous XFixesSetPictureClipRegion à nouveau.