Enlightenment CVS committal Author : raster Project : e17 Module : libs/evas
Dir : e17/libs/evas/src/lib/engines/buffer Modified Files: evas_engine.h evas_outbuf.c Log Message: buffer engine fixes =================================================================== RCS file: /cvsroot/enlightenment/e17/libs/evas/src/lib/engines/buffer/evas_engine.h,v retrieving revision 1.3 retrieving revision 1.4 diff -u -3 -r1.3 -r1.4 --- evas_engine.h 9 Apr 2003 06:52:14 -0000 1.3 +++ evas_engine.h 8 Jan 2005 18:23:41 -0000 1.4 @@ -31,6 +31,10 @@ void * (*new_update_region) (int x, int y, int w, int h, int *row_bytes); void (*free_update_region) (int x, int y, int w, int h, void *data); } func; + + struct { + RGBA_Image *back_buf; + } priv; }; /****/ =================================================================== RCS file: /cvsroot/enlightenment/e17/libs/evas/src/lib/engines/buffer/evas_outbuf.c,v retrieving revision 1.5 retrieving revision 1.6 diff -u -3 -r1.5 -r1.6 --- evas_outbuf.c 20 Oct 2004 16:33:48 -0000 1.5 +++ evas_outbuf.c 8 Jan 2005 18:23:41 -0000 1.6 @@ -10,6 +10,10 @@ void evas_buffer_outbuf_buf_free(Outbuf *buf) { + if (buf->priv.back_buf) + { + evas_common_image_free(buf->priv.back_buf); + } free(buf); } @@ -37,6 +41,19 @@ buf->func.new_update_region = new_update_region; buf->func.free_update_region = free_update_region; + + if ((buf->depth == OUTBUF_DEPTH_RGB_32BPP_888_8888) && + (buf->dest) && (buf->dest_row_bytes == (buf->w * sizeof(DATA32)))) + { + buf->priv.back_buf = evas_common_image_new(); + buf->priv.back_buf->image = evas_common_image_surface_new(); + buf->priv.back_buf->image->w = w; + buf->priv.back_buf->image->h = h; + buf->priv.back_buf->image->data = buf->dest; + buf->priv.back_buf->image->no_free = 1; + buf->priv.back_buf->flags |= RGBA_IMAGE_HAS_ALPHA; + } + return buf; } @@ -45,12 +62,34 @@ { RGBA_Image *im; - *cx = 0; *cy = 0; *cw = w; *ch = h; - im = evas_common_image_create(w, h); - if (im) + if (buf->priv.back_buf) { - im->flags |= RGBA_IMAGE_HAS_ALPHA; - memset(im->image->data, 0, w * h * sizeof(DATA32)); + int xx, yy; + + *cx = x; *cy = y; *cw = w; *ch = h; + for (yy = 0; yy < h; yy++) + { + DATA32 *ptr; + + ptr = buf->priv.back_buf->image->data + + (y * buf->priv.back_buf->image->w) + x; + for (xx = 0; xx < w; xx++) + { + A_VAL(ptr) = 0; + ptr++; + } + } + return buf->priv.back_buf; + } + else + { + *cx = 0; *cy = 0; *cw = w; *ch = h; + im = evas_common_image_create(w, h); + if (im) + { + im->flags |= RGBA_IMAGE_HAS_ALPHA; + memset(im->image->data, 0, w * h * sizeof(DATA32)); + } } return im; } @@ -58,7 +97,7 @@ void evas_buffer_outbuf_buf_free_region_for_update(Outbuf *buf, RGBA_Image *update) { - evas_common_image_free(update); + if (update != buf->priv.back_buf) evas_common_image_free(update); } void @@ -198,8 +237,14 @@ } break; case OUTBUF_DEPTH_RGB_32BPP_888_8888: - /* simple memcpy */ - /* FIXME: write this */ + if (!buf->priv.back_buf) + { + /* simple memcpy */ + /* FIXME: write this */ + } + else + { + } break; case OUTBUF_DEPTH_BGR_32BPP_888_8888: /* simple memcpy */ ------------------------------------------------------- The SF.Net email is sponsored by: Beat the post-holiday blues Get a FREE limited edition SourceForge.net t-shirt from ThinkGeek. It's fun and FREE -- well, almost....http://www.thinkgeek.com/sfshirt _______________________________________________ enlightenment-cvs mailing list enlightenment-cvs@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/enlightenment-cvs