Enlightenment CVS committal Author : kwo Project : e16 Module : e
Dir : e16/e/src Modified Files: ecompmgr.c Log Message: Avoid creating/destroying regions - continued. =================================================================== RCS file: /cvs/e/e16/e/src/ecompmgr.c,v retrieving revision 1.149 retrieving revision 1.150 diff -u -3 -r1.149 -r1.150 --- ecompmgr.c 22 Apr 2007 14:15:22 -0000 1.149 +++ ecompmgr.c 25 Apr 2007 18:41:54 -0000 1.150 @@ -196,6 +196,7 @@ XserverRegion damage; char got_damage; XserverRegion rgn_screen; + XserverRegion rgn_clip; int shadow_mode; double opac_blur; /* 0. -> 1. */ double opac_sharp; /* 0. -> 1. */ @@ -240,11 +241,26 @@ /* * Regions */ +#define DEBUG_REGIONS 0 + +#if DEBUG_REGIONS +static int n_rgn_c = 0; +static int n_rgn_d = 0; +#endif static XserverRegion ERegionCreate(void) { - return XFixesCreateRegion(disp, NULL, 0); + XserverRegion rgn; + + rgn = XFixesCreateRegion(disp, NULL, 0); + +#if DEBUG_REGIONS + n_rgn_c++; + Eprintf("%s: %#lx %d %d %d\n", __func__, rgn, + n_rgn_c - n_rgn_d, n_rgn_c, n_rgn_d); +#endif + return rgn; } static XserverRegion @@ -259,6 +275,11 @@ rct.height = h; rgn = XFixesCreateRegion(disp, &rct, 1); +#if DEBUG_REGIONS + n_rgn_c++; + Eprintf("%s: %#lx %d %d %d\n", __func__, rgn, + n_rgn_c - n_rgn_d, n_rgn_c, n_rgn_d); +#endif return rgn; } @@ -266,14 +287,32 @@ static XserverRegion ERegionCreateFromRects(XRectangle * rectangles, int nrectangles) { - return XFixesCreateRegion(disp, rectangles, nrectangles); + XserverRegion rgn; + + rgn = XFixesCreateRegion(disp, rectangles, nrectangles); + +#if DEBUG_REGIONS + n_rgn_c++; + Eprintf("%s: %#lx %d %d %d\n", __func__, rgn, + n_rgn_c - n_rgn_d, n_rgn_c, n_rgn_d); +#endif + return rgn; } #endif static XserverRegion ERegionCreateFromWindow(Window win) { - return XFixesCreateRegionFromWindow(disp, win, WindowRegionBounding); + XserverRegion rgn; + + rgn = XFixesCreateRegionFromWindow(disp, win, WindowRegionBounding); + +#if DEBUG_REGIONS + n_rgn_c++; + Eprintf("%s: %#lx %d %d %d\n", __func__, rgn, + n_rgn_c - n_rgn_d, n_rgn_c, n_rgn_d); +#endif + return rgn; } static XserverRegion @@ -297,10 +336,21 @@ static void ERegionDestroy(XserverRegion rgn) { +#if DEBUG_REGIONS + n_rgn_d++; + Eprintf("%s: %#lx %d %d %d\n", __func__, rgn, + n_rgn_c - n_rgn_d, n_rgn_c, n_rgn_d); +#endif XFixesDestroyRegion(disp, rgn); } static void +ERegionEmpty(XserverRegion rgn) +{ + XFixesSetRegion(disp, rgn, NULL, 0); +} + +static void ERegionSetRect(XserverRegion rgn, int x, int y, int w, int h) { XRectangle rct; @@ -1792,7 +1842,7 @@ EObj ** last, Desk * dsk, XserverRegion clip) { EObj *eo, *eo_prev, *eo_first; - int i, stop, destroy_clip; + int i, stop; ECmWinInfo *cw; D1printf("ECompMgrDetermineOrder %d\n", dsk->num); @@ -1800,13 +1850,9 @@ lst = EobjListStackGet(&num); if (clip == None) { - destroy_clip = 1; ECompMgrDestroyClip(); - clip = ERegionCreate(); - } - else - { - destroy_clip = 0; + clip = Mode_compmgr.rgn_clip; + ERegionEmpty(clip); } /* Determine overall paint order, top to bottom */ @@ -1942,8 +1988,6 @@ *first = eo_first; *last = eo_prev; - if (destroy_clip) - ERegionDestroy(clip); Mode_compmgr.reorder = 0; return stop; } @@ -2202,17 +2246,19 @@ /* Screen region */ Mode_compmgr.rgn_screen = ERegionCreateRect(0, 0, w, h); + + /* Overall clip region used while recalculating window clip regions */ + Mode_compmgr.rgn_clip = ERegionCreate(); } static void ECompMgrRootBufferDestroy(void) { - /* Root buffer picture and pixmap */ PICTURE_DESTROY(rootBuffer); PIXMAP_DESTROY(VRoot.pmap); - /* Screen region */ REGION_DESTROY(Mode_compmgr.rgn_screen); + REGION_DESTROY(Mode_compmgr.rgn_clip); } static void ------------------------------------------------------------------------- This SF.net email is sponsored by DB2 Express Download DB2 Express C - the FREE version of DB2 express and take control of your XML. No limits. Just data. Click to get it now. http://sourceforge.net/powerbar/db2/ _______________________________________________ enlightenment-cvs mailing list enlightenment-cvs@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/enlightenment-cvs