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

Reply via email to