Enlightenment CVS committal Author : raster Project : e17 Module : libs/evas
Dir : e17/libs/evas/src/lib/engines/common Modified Files: evas_draw_main.c evas_pipe.c evas_rectangle_main.c evas_scale_sample.c evas_scale_smooth.c Log Message: pager urgent popup patch - good evas clipouts less allocs patch - definite spedusp for when it's used heavily! =================================================================== RCS file: /cvs/e/e17/libs/evas/src/lib/engines/common/evas_draw_main.c,v retrieving revision 1.20 retrieving revision 1.21 diff -u -3 -r1.20 -r1.21 --- evas_draw_main.c 15 Nov 2006 16:44:34 -0000 1.20 +++ evas_draw_main.c 4 Apr 2007 09:55:39 -0000 1.21 @@ -1,5 +1,57 @@ #include "evas_common.h" +EAPI Cutout_Rects* +evas_common_draw_context_cutouts_new() +{ + Cutout_Rects *rects; + + rects = malloc(sizeof(Cutout_Rects)); + rects->rects = NULL; + rects->active = 0; + rects->max = 0; + + return rects; +} + +EAPI void +evas_common_draw_context_cutouts_free(Cutout_Rects* rects) +{ + rects->active = 0; +} + +EAPI Cutout_Rect* +evas_common_draw_context_cutouts_add(Cutout_Rects* rects, + int x, int y, int w, int h) +{ + Cutout_Rect* rect; + + if (rects->max < rects->active + 1) { + rects->max += 8; + rects->rects = realloc(rects->rects, sizeof(Cutout_Rect) * rects->max); + } + + rect = rects->rects + rects->active++; + rect->x = x; + rect->y = y; + rect->w = w; + rect->h = h; + + return rect; +} + +EAPI void +evas_common_draw_context_cutouts_del(Cutout_Rects* rects, + int index) +{ + if (index >= 0 && index < rects->active) + { + Cutout_Rect* rect = rects->rects + index; + + memmove(rect, rect + 1, sizeof (Cutout_Rect) * (rects->active - index - 1)); + rects->active--; + } +} + void evas_common_init(void) { @@ -43,10 +95,17 @@ EAPI void evas_common_draw_context_free(RGBA_Draw_Context *dc) { + evas_common_draw_context_apply_clean_cutouts(&dc->cutout); free(dc); } EAPI void +evas_common_draw_context_clear_cutouts(RGBA_Draw_Context *dc) +{ + evas_common_draw_context_apply_clean_cutouts(&dc->cutout); +} + +EAPI void evas_common_draw_context_font_ext_set(RGBA_Draw_Context *dc, void *data, void *(*gl_new) (void *data, RGBA_Font_Glyph *fg), @@ -115,113 +174,34 @@ EAPI void evas_common_draw_context_add_cutout(RGBA_Draw_Context *dc, int x, int y, int w, int h) { - Cutout_Rect *r; - - r = calloc(1, sizeof(Cutout_Rect)); - r->x = x; - r->y = y; - r->w = w; - r->h = h; - dc->cutout.rects = evas_object_list_append(dc->cutout.rects, r); -} - -EAPI void -evas_common_draw_context_clear_cutouts(RGBA_Draw_Context *dc) -{ - evas_common_draw_context_apply_free_cutouts(dc->cutout.rects); - dc->cutout.rects = NULL; -} - -EAPI Cutout_Rect * -evas_common_draw_context_apply_cutouts(RGBA_Draw_Context *dc) -{ - Cutout_Rect *r, *rects; - Evas_Object_List *l; - - if (!dc->clip.use) return NULL; - if ((dc->clip.w <= 0) || (dc->clip.h <= 0)) return NULL; - r = calloc(1, sizeof(Cutout_Rect)); - r->x = dc->clip.x; - r->y = dc->clip.y; - r->w = dc->clip.w; - r->h = dc->clip.h; - rects = r; - for (l = (Evas_Object_List *)dc->cutout.rects; l; l = l->next) - { - r = (Cutout_Rect *)l; - rects = evas_common_draw_context_cutouts_split(rects, r); - } - return rects; + evas_common_draw_context_cutouts_add(&dc->cutout, x, y, w, h); } -EAPI void -evas_common_draw_context_apply_free_cutouts(Cutout_Rect *rects) -{ - while (rects) - { - Cutout_Rect *r; - - r = rects; - rects = evas_object_list_remove(rects, rects); - free(r); - } -} - -EAPI Cutout_Rect * -evas_common_draw_context_cutouts_split(Cutout_Rect *in, Cutout_Rect *split) -{ - /* multiple rect in, multiple out */ - Cutout_Rect *out; - Evas_Object_List *l; - - out = NULL; - for (l = (Evas_Object_List *)in; l; l = l->next) - { - Cutout_Rect *r; - - r = (Cutout_Rect *)l; - r = evas_common_draw_context_cutout_split(r, split); - while (r) - { - Cutout_Rect *r2; - - r2 = r; - r = evas_object_list_remove(r, r); - out = evas_object_list_append(out, r2); - } - } - evas_common_draw_context_apply_free_cutouts(in); - return out; -} - -EAPI Cutout_Rect * -evas_common_draw_context_cutout_split(Cutout_Rect *in, Cutout_Rect *split) +int +evas_common_draw_context_cutout_split(Cutout_Rects* res, int index, Cutout_Rect *split) { /* 1 input rect, multiple out */ - Cutout_Rect *out; - Cutout_Rect *r; + Cutout_Rect in = res->rects[index]; /* this is to save me a LOT of typing */ -#define INX1 (in->x) -#define INX2 (in->x + in->w) +#define INX1 (in.x) +#define INX2 (in.x + in.w) #define SPX1 (split->x) #define SPX2 (split->x + split->w) -#define INY1 (in->y) -#define INY2 (in->y + in->h) +#define INY1 (in.y) +#define INY2 (in.y + in.h) #define SPY1 (split->y) #define SPY2 (split->y + split->h) -#define X1_IN (in->x < split->x) -#define X2_IN ((in->x + in->w) > (split->x + split->w)) -#define Y1_IN (in->y < split->y) -#define Y2_IN ((in->y + in->h) > (split->y + split->h)) -#define R_NEW(_r, _x, _y, _w, _h) {(_r) = calloc(1, sizeof(Cutout_Rect)); (_r)->x = (_x); (_r)->y = (_y); (_r)->w = (_w); (_r)->h = (_h);} - out = NULL; - if (!RECTS_INTERSECT(in->x, in->y, in->w, in->h, +#define X1_IN (in.x < split->x) +#define X2_IN ((in.x + in.w) > (split->x + split->w)) +#define Y1_IN (in.y < split->y) +#define Y2_IN ((in.y + in.h) > (split->y + split->h)) +#define R_NEW(_r, _x, _y, _w, _h) { evas_common_draw_context_cutouts_add(_r, _x, _y, _w, _h); } + if (!RECTS_INTERSECT(in.x, in.y, in.w, in.h, split->x, split->y, split->w, split->h)) { - R_NEW(r, in->x, in->y, in->w, in->h); - out = evas_object_list_append(out, r); - return out; + /* No colision => no clipping, don't touch it. */ + return 1; } /* S = split (ie cut out rect) */ @@ -237,15 +217,13 @@ */ if (X1_IN && X2_IN && Y1_IN && Y2_IN) { - R_NEW(r, in->x, in->y, in->w, SPY1 - in->y); - out = evas_object_list_append(out, r); - R_NEW(r, in->x, SPY1, SPX1 - in->x, SPY2 - SPY1); - out = evas_object_list_append(out, r); - R_NEW(r, SPX2, SPY1, INX2 - SPX2, SPY2 - SPY1); - out = evas_object_list_append(out, r); - R_NEW(r, in->x, SPY2, in->w, INY2 - SPY2); - out = evas_object_list_append(out, r); - return out; + R_NEW(res, in.x, in.y, in.w, SPY1 - in.y); + R_NEW(res, in.x, SPY1, SPX1 - in.x, SPY2 - SPY1); + R_NEW(res, SPX2, SPY1, INX2 - SPX2, SPY2 - SPY1); + /* out => (in.x, SPY2, in.w, INY2 - SPY2) */ + res->rects[index].h = INY2 - SPY2; + res->rects[index].y = SPY2; + return 1; } /* SSSSSSS * S+---+S @@ -257,7 +235,8 @@ */ if (!X1_IN && !X2_IN && !Y1_IN && !Y2_IN) { - return NULL; + evas_common_draw_context_cutouts_del(res, index); + return 0; } /* SSS * S+---+ @@ -269,9 +248,10 @@ */ if (!X1_IN && X2_IN && !Y1_IN && !Y2_IN) { - R_NEW(r, SPX2, in->y, INX2 - SPX2, in->h); - out = evas_object_list_append(out, r); - return out; + /* in => (SPX2, in.y, INX2 - SPX2, in.h) */ + res->rects[index].w = INX2 - SPX2; + res->rects[index].x = SPX2; + return 1; } /* S * +---+ @@ -283,11 +263,11 @@ */ if (X1_IN && X2_IN && !Y1_IN && !Y2_IN) { - R_NEW(r, in->x, in->y, SPX1 - in->x, in->h); - out = evas_object_list_append(out, r); - R_NEW(r, SPX2, in->y, INX2 - SPX2, in->h); - out = evas_object_list_append(out, r); - return out; + R_NEW(res, in.x, in.y, SPX1 - in.x, in.h); + /* in => (SPX2, in.y, INX2 - SPX2, in.h) */ + res->rects[index].w = INX2 - SPX2; + res->rects[index].x = SPX2; + return 1; } /* SSS * +---+S @@ -299,9 +279,9 @@ */ if (X1_IN && !X2_IN && !Y1_IN && !Y2_IN) { - R_NEW(r, in->x, in->y, SPX1 - in->x, in->h); - out = evas_object_list_append(out, r); - return out; + /* in => (in.x, in.y, SPX1 - in.x, in.h) */ + res->rects[index].w = SPX1 - in.x; + return 1; } /* SSSSSSS * S+---+S @@ -313,9 +293,10 @@ */ if (!X1_IN && !X2_IN && !Y1_IN && Y2_IN) { - R_NEW(r, in->x, SPY2, in->w, INY2 - SPY2); - out = evas_object_list_append(out, r); - return out; + /* in => (in.x, SPY2, in.w, INY2 - SPY2) */ + res->rects[index].h = INY2 - SPY2; + res->rects[index].y = SPY2; + return 1; } /* * +---+ @@ -327,11 +308,10 @@ */ if (!X1_IN && !X2_IN && Y1_IN && Y2_IN) { - R_NEW(r, in->x, in->y, in->w, SPY1 - in->y); - out = evas_object_list_append(out, r); - R_NEW(r, in->x, SPY2, in->w, INY2 - SPY2); - out = evas_object_list_append(out, r); - return out; + R_NEW(res, in.x, SPY2, in.w, INY2 - SPY2); + /* in => (in.x, in.y, in.w, SPY1 - in.y) */ + res->rects[index].h = SPY1 - in.y; + return 1; } /* * +---+ @@ -343,9 +323,9 @@ */ if (!X1_IN && !X2_IN && Y1_IN && !Y2_IN) { - R_NEW(r, in->x, in->y, in->w, SPY1 - in->y); - out = evas_object_list_append(out, r); - return out; + /* in => (in.x, in.y, in.w, SPY1 - in.y) */ + res->rects[index].h = SPY1 - in.y; + return 1; } /* SSS * S+---+ @@ -357,11 +337,11 @@ */ if (!X1_IN && X2_IN && !Y1_IN && Y2_IN) { - R_NEW(r, SPX2, in->y, INX2 - SPX2, SPY2 - in->y); - out = evas_object_list_append(out, r); - R_NEW(r, in->x, SPY2, in->w, INY2 - SPY2); - out = evas_object_list_append(out, r); - return out; + R_NEW(res, SPX2, in.y, INX2 - SPX2, SPY2 - in.y); + /* in => (in.x, SPY2, in.w, INY2 - SPY2) */ + res->rects[index].h = INY2 - SPY2; + res->rects[index].y = SPY2; + return 1; } /* S * +---+ @@ -373,13 +353,12 @@ */ if (X1_IN && X2_IN && !Y1_IN && Y2_IN) { - R_NEW(r, in->x, in->y, SPX1 - in->x, SPY2 - in->y); - out = evas_object_list_append(out, r); - R_NEW(r, SPX2, in->y, INX2 - SPX2, SPY2 - in->y); - out = evas_object_list_append(out, r); - R_NEW(r, in->x, SPY2, in->w, INY2 - SPY2); - out = evas_object_list_append(out, r); - return out; + R_NEW(res, in.x, in.y, SPX1 - in.x, SPY2 - in.y); + R_NEW(res, SPX2, in.y, INX2 - SPX2, SPY2 - in.y); + /* in => (in.x, SPY2, in.w, INY2 - SPY2) */ + res->rects[index].h = INY2 - SPY2; + res->rects[index].y = SPY2; + return 1; } /* SSS * +---+S @@ -391,11 +370,11 @@ */ if (X1_IN && !X2_IN && !Y1_IN && Y2_IN) { - R_NEW(r, in->x, in->y, SPX1 - in->x, SPY2 - in->y); - out = evas_object_list_append(out, r); - R_NEW(r, in->x, SPY2, in->w, INY2 - SPY2); - out = evas_object_list_append(out, r); - return out; + R_NEW(res, in.x, in.y, SPX1 - in.x, SPY2 - in.y); + /* in => (in.x, SPY2, in.w, INY2 - SPY2) */ + res->rects[index].h = INY2 - SPY2; + res->rects[index].y = SPY2; + return 1; } /* * +---+ @@ -407,13 +386,11 @@ */ if (!X1_IN && X2_IN && Y1_IN && Y2_IN) { - R_NEW(r, in->x, in->y, in->w, SPY1 - in->y); - out = evas_object_list_append(out, r); - R_NEW(r, SPX2, SPY1, INX2 - SPX2, SPY2 - SPY1); - out = evas_object_list_append(out, r); - R_NEW(r, in->x, SPY2, in->w, INY2 - SPY2); - out = evas_object_list_append(out, r); - return out; + R_NEW(res, in.x, SPY2, in.w, INY2 - SPY2); + R_NEW(res, SPX2, SPY1, INX2 - SPX2, SPY2 - SPY1); + /* in => (in.x, SPY2, in.w, INY2 - SPY2) */ + res->rects[index].h = SPY1 - in.y; + return 1; } /* * +---+ @@ -425,13 +402,11 @@ */ if (X1_IN && !X2_IN && Y1_IN && Y2_IN) { - R_NEW(r, in->x, in->y, in->w, SPY1 - in->y); - out = evas_object_list_append(out, r); - R_NEW(r, in->x, SPY1, SPX1 - in->x, SPY2 - SPY1); - out = evas_object_list_append(out, r); - R_NEW(r, in->x, SPY2, in->w, INY2 - SPY2); - out = evas_object_list_append(out, r); - return out; + R_NEW(res, in.x, SPY2, in.w, INY2 - SPY2); + R_NEW(res, in.x, SPY1, SPX1 - in.x, SPY2 - SPY1); + /* in => (in.x, in.y, in.w, SPY1 - in.y) */ + res->rects[index].h = SPY1 - in.y; + return 1; } /* * +---+ @@ -443,11 +418,10 @@ */ if (!X1_IN && X2_IN && Y1_IN && !Y2_IN) { - R_NEW(r, in->x, in->y, in->w, SPY1 - in->y); - out = evas_object_list_append(out, r); - R_NEW(r, SPX2, SPY1, INX2 - SPX2, INY2 - SPY1); - out = evas_object_list_append(out, r); - return out; + R_NEW(res, SPX2, SPY1, INX2 - SPX2, INY2 - SPY1); + /* in => (in.x, in.y, in.w, SPY1 - in.y) */ + res->rects[index].h = SPY1 - in.y; + return 1; } /* * +---+ @@ -459,13 +433,11 @@ */ if (X1_IN && X2_IN && Y1_IN && !Y2_IN) { - R_NEW(r, in->x, in->y, in->w, SPY1 - in->y); - out = evas_object_list_append(out, r); - R_NEW(r, in->x, SPY1, SPX1 - in->x, INY2 - SPY1); - out = evas_object_list_append(out, r); - R_NEW(r, SPX2, SPY1, INX2 - SPX2, INY2 - SPY1); - out = evas_object_list_append(out, r); - return out; + R_NEW(res, in.x, SPY1, SPX1 - in.x, INY2 - SPY1); + R_NEW(res, SPX2, SPY1, INX2 - SPX2, INY2 - SPY1); + /* in => (in.x, in.y, in.w, SPY1 - in.y) */ + res->rects[index].h = SPY1 - in.y; + return 1; } /* * +---+ @@ -477,13 +449,13 @@ */ if (X1_IN && !X2_IN && Y1_IN && !Y2_IN) { - R_NEW(r, in->x, in->y, in->w, SPY1 - in->y); - out = evas_object_list_append(out, r); - R_NEW(r, in->x, SPY1, SPX1 - in->x, INY2 - SPY1); - out = evas_object_list_append(out, r); - return out; + R_NEW(res, in.x, SPY1, SPX1 - in.x, INY2 - SPY1); + /* in => (in.x, in.y, in.w, SPY1 - in.y) */ + res->rects[index].h = SPY1 - in.y; + return 1; } - return NULL; + evas_common_draw_context_cutouts_del(res, index); + return 0; #undef INX1 #undef INX2 #undef SPX1 @@ -499,32 +471,49 @@ #undef R_NEW } -EAPI Cutout_Rect * -evas_common_draw_context_cutout_merge(Cutout_Rect *in, Cutout_Rect *merge) +EAPI Cutout_Rects* +evas_common_draw_context_apply_cutouts(RGBA_Draw_Context *dc) { - /* 1 input rect, multiple out */ - Cutout_Rect *out; - Cutout_Rect *r; - Evas_Object_List *l; + Cutout_Rects* res; + int i; + int j; - for (l = (Evas_Object_List *)in; l; l = l->next) - { - r = (Cutout_Rect *)l; + if (!dc->clip.use) return NULL; + if ((dc->clip.w <= 0) || (dc->clip.h <= 0)) return NULL; - merge = evas_common_draw_context_cutouts_split(merge, r); - if (!merge) return in; - } - r = merge; - out = in; - while (r) + res = evas_common_draw_context_cutouts_new(); + evas_common_draw_context_cutouts_add(res, dc->clip.x, dc->clip.y, dc->clip.w, dc->clip.h); + + for (i = 0; i < dc->cutout.active; ++i) { - Cutout_Rect *r2; + /* Don't loop on the element just added to the list as they are already correctly clipped. */ + int active = res->active; - r2 = r; - r = evas_object_list_remove(r, r); - out = evas_object_list_append(out, r2); + for (j = 0; j < active; ) + { + if (evas_common_draw_context_cutout_split(res, j, dc->cutout.rects + i)) + ++j; + else + active--; + } } - return out; + return res; +} + +EAPI void +evas_common_draw_context_apply_clear_cutouts(Cutout_Rects* rects) +{ + evas_common_draw_context_apply_clean_cutouts(rects); + free(rects); +} + +EAPI void +evas_common_draw_context_apply_clean_cutouts(Cutout_Rects* rects) +{ + free(rects->rects); + rects->rects = NULL; + rects->active = 0; + rects->max = 0; } EAPI void =================================================================== RCS file: /cvs/e/e17/libs/evas/src/lib/engines/common/evas_pipe.c,v retrieving revision 1.6 retrieving revision 1.7 diff -u -3 -r1.6 -r1.7 --- evas_pipe.c 28 Dec 2006 12:40:42 -0000 1.6 +++ evas_pipe.c 4 Apr 2007 09:55:39 -0000 1.7 @@ -38,27 +38,16 @@ evas_common_pipe_draw_context_copy(RGBA_Draw_Context *dc, RGBA_Pipe_Op *op) { Cutout_Rect *r, *r2; - + memcpy(&(op->context), dc, sizeof(RGBA_Draw_Context)); - op->context.cutout.rects = NULL; - for (r = dc->cutout.rects; r; r = (Cutout_Rect *)((Evas_Object_List *)r)->next) - { - r2 = calloc(1, sizeof(Cutout_Rect)); - if (r2) - { - r2->x = r->x; - r2->y = r->y; - r2->w = r->w; - r2->h = r->h; - op->context.cutout.rects = evas_object_list_append(op->context.cutout.rects, r2); - } - } + op->context.cutout.rects = malloc(sizeof(Cutout_Rect) * op->context.cutout.active); + memcpy(op->context.cutout.rects, dc->cutout.rects, sizeof(Cutout_Rect) * op->context.cutout.active); } static void evas_common_pipe_op_free(RGBA_Pipe_Op *op) { - evas_common_draw_context_apply_free_cutouts(op->context.cutout.rects); + evas_common_draw_context_apply_clean_cutouts(&op->context.cutout); } /* main api calls */ =================================================================== RCS file: /cvs/e/e17/libs/evas/src/lib/engines/common/evas_rectangle_main.c,v retrieving revision 1.6 retrieving revision 1.7 diff -u -3 -r1.6 -r1.7 --- evas_rectangle_main.c 15 Nov 2006 16:44:34 -0000 1.6 +++ evas_rectangle_main.c 4 Apr 2007 09:55:39 -0000 1.7 @@ -10,9 +10,10 @@ EAPI void evas_common_rectangle_draw(RGBA_Image *dst, RGBA_Draw_Context *dc, int x, int y, int w, int h) { - int c, cx, cy, cw, ch; - Cutout_Rect *rects, *r; - Evas_Object_List *l; + Cutout_Rects *rects; + Cutout_Rect *r; + int c, cx, cy, cw, ch; + int i; /* handle cutouts here! */ if ((w <= 0) || (h <= 0)) return; @@ -35,13 +36,13 @@ return; } rects = evas_common_draw_context_apply_cutouts(dc); - for (l = (Evas_Object_List *)rects; l; l = l->next) + for (i = 0; i < rects->active; ++i) { - r = (Cutout_Rect *)l; + r = rects->rects + i; evas_common_draw_context_set_clip(dc, r->x, r->y, r->w, r->h); rectangle_draw_internal(dst, dc, x, y, w, h); } - evas_common_draw_context_apply_free_cutouts(rects); + evas_common_draw_context_apply_clear_cutouts(rects); /* restore clip info */ dc->clip.use = c; dc->clip.x = cx; dc->clip.y = cy; dc->clip.w = cw; dc->clip.h = ch; } =================================================================== RCS file: /cvs/e/e17/libs/evas/src/lib/engines/common/evas_scale_sample.c,v retrieving revision 1.8 retrieving revision 1.9 diff -u -3 -r1.8 -r1.9 --- evas_scale_sample.c 15 Nov 2006 16:44:34 -0000 1.8 +++ evas_scale_sample.c 4 Apr 2007 09:55:39 -0000 1.9 @@ -30,9 +30,10 @@ int dst_region_x, int dst_region_y, int dst_region_w, int dst_region_h) { - int c, cx, cy, cw, ch; - Cutout_Rect *rects, *r; - Evas_Object_List *l; + Cutout_Rects *rects; + Cutout_Rect *r; + int c, cx, cy, cw, ch; + int i; /* handle cutouts here! */ if ((dst_region_w <= 0) || (dst_region_h <= 0)) return; @@ -59,9 +60,9 @@ return; } rects = evas_common_draw_context_apply_cutouts(dc); - for (l = (Evas_Object_List *)rects; l; l = l->next) + for (i = 0; i < rects->active; ++i) { - r = (Cutout_Rect *)l; + r = rects->rects + i; evas_common_draw_context_set_clip(dc, r->x, r->y, r->w, r->h); scale_rgba_in_to_out_clip_sample_internal(src, dst, dc, src_region_x, src_region_y, @@ -70,7 +71,7 @@ dst_region_w, dst_region_h); } - evas_common_draw_context_apply_free_cutouts(rects); + evas_common_draw_context_apply_clear_cutouts(rects); /* restore clip info */ dc->clip.use = c; dc->clip.x = cx; dc->clip.y = cy; dc->clip.w = cw; dc->clip.h = ch; } =================================================================== RCS file: /cvs/e/e17/libs/evas/src/lib/engines/common/evas_scale_smooth.c,v retrieving revision 1.15 retrieving revision 1.16 diff -u -3 -r1.15 -r1.16 --- evas_scale_smooth.c 30 Sep 2006 10:18:32 -0000 1.15 +++ evas_scale_smooth.c 4 Apr 2007 09:55:39 -0000 1.16 @@ -447,9 +447,10 @@ # ifdef BUILD_MMX int mmx, sse, sse2; # endif - int c, cx, cy, cw, ch; - Cutout_Rect *rects, *r; - Evas_Object_List *l; + Cutout_Rects *rects; + Cutout_Rect *r; + int c, cx, cy, cw, ch; + int i; /* handle cutouts here! */ if ((dst_region_w <= 0) || (dst_region_h <= 0)) return; @@ -490,9 +491,9 @@ return; } rects = evas_common_draw_context_apply_cutouts(dc); - for (l = (Evas_Object_List *)rects; l; l = l->next) + for (i = 0; i < rects->active; ++i) { - r = (Cutout_Rect *)l; + r = rects->rects + i; evas_common_draw_context_set_clip(dc, r->x, r->y, r->w, r->h); # ifdef BUILD_MMX if (mmx) @@ -511,7 +512,7 @@ dst_region_w, dst_region_h); # endif } - evas_common_draw_context_apply_free_cutouts(rects); + evas_common_draw_context_apply_clear_cutouts(rects); /* restore clip info */ dc->clip.use = c; dc->clip.x = cx; dc->clip.y = cy; dc->clip.w = cw; dc->clip.h = ch; } ------------------------------------------------------------------------- Take Surveys. Earn Cash. Influence the Future of IT Join SourceForge.net's Techsay panel and you'll get the chance to share your opinions on IT & business topics through brief surveys-and earn cash http://www.techsay.com/default.php?page=join.php&p=sourceforge&CID=DEVDEV _______________________________________________ enlightenment-cvs mailing list enlightenment-cvs@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/enlightenment-cvs