Enlightenment CVS committal

Author  : raster
Project : e17
Module  : libs/imlib2

Dir     : e17/libs/imlib2/src/modules/loaders


Modified Files:
        loader_bmp.c 


Log Message:


patches for imlib2 and e.

===================================================================
RCS file: /cvs/e/e17/libs/imlib2/src/modules/loaders/loader_bmp.c,v
retrieving revision 1.8
retrieving revision 1.9
diff -u -3 -r1.8 -r1.9
--- loader_bmp.c        9 Apr 2007 12:55:29 -0000       1.8
+++ loader_bmp.c        30 May 2007 14:35:26 -0000      1.9
@@ -38,7 +38,11 @@
    if (fread(b, sizeof(unsigned char), 2, file) != 2)
       return 0;
 
-   *ret = (b[1] << 8) | b[0];
+#ifdef WORDS_BIGENDIAN
+   *ret = (b[0] << 8) | b[1];   
+#else
+   *ret = (b[1] << 8) | b[0];   
+#endif
    return 1;
 }
 
@@ -50,7 +54,11 @@
    if (fread(b, sizeof(unsigned char), 4, file) != 4)
       return 0;
 
+#ifdef WORDS_BIGENDIAN
    *ret = (b[3] << 24) | (b[2] << 16) | (b[1] << 8) | b[0];
+#else
+   *ret = (b[0] << 24) | (b[1] << 16) | (b[2] << 8) | b[3];
+#endif
    return 1;
 }
 
@@ -71,12 +79,21 @@
 {
    int rc;
 
+#ifdef WORDS_BIGENDIAN
    rc = fputc ((int) (val & 0xff), file);
    if (rc == EOF)
       return 0;
    rc = fputc ((int) ((val >> 8) & 0xff), file);
    if (rc == EOF)
       return 0;
+#else
+   rc = fputc ((int) ((val >> 8) & 0xff), file);
+   if (rc == EOF)
+      return 0;
+   rc = fputc ((int) (val & 0xff), file);
+   if (rc == EOF)
+      return 0;
+#endif
 
    return 1;
 }
@@ -86,6 +103,7 @@
 {
    int rc;
 
+#ifdef WORDS_BIGENDIAN
    rc = fputc ((int) (val & 0xff), file);
    if (rc == EOF)
       return 0;
@@ -98,6 +116,20 @@
    rc = fputc ((int) ((val >> 24) & 0xff), file);
    if (rc == EOF)
       return 0;
+#else
+   rc = fputc ((int) ((val >> 24) & 0xff), file);
+   if (rc == EOF)
+      return 0;
+   rc = fputc ((int) ((val >> 16) & 0xff), file);
+   if (rc == EOF)
+      return 0;
+   rc = fputc ((int) ((val >> 8) & 0xff), file);
+   if (rc == EOF)
+      return 0;
+   rc = fputc ((int) (val & 0xff), file);
+   if (rc == EOF)
+      return 0;
+#endif
 
    return 1;
 }
@@ -120,6 +152,7 @@
    RGBQUAD             rgbQuads[256];
    unsigned long       rmask = 0xff, gmask = 0xff, bmask = 0xff;
    unsigned long       rshift = 0, gshift = 0, bshift = 0;
+   unsigned long       rleftshift = 0, gleftshift = 0, bleftshift = 0;
 
    /*
     * 21.3.2006:
@@ -221,16 +254,28 @@
              {
                 int                 bit;
 
-                ReadleLong(f, &bmask);
-                ReadleLong(f, &gmask);
                 ReadleLong(f, &rmask);
+                ReadleLong(f, &gmask);
+                ReadleLong(f, &bmask);
                 for (bit = bitcount - 1; bit >= 0; bit--)
                   {
                      if (bmask & (1 << bit)) bshift = bit;
                      if (gmask & (1 << bit)) gshift = bit;
                      if (rmask & (1 << bit)) rshift = bit;
                   }
-             }
+                while(((((0xffffL & bmask) >> bshift) << bleftshift) & 0x80) 
== 0)
+                  {
+                     bleftshift++;
+                  }
+                while(((((0xffffL & gmask) >> gshift) << gleftshift) & 0x80) 
== 0)
+                  {
+                     gleftshift++;
+                  }
+                while(((((0xffffL & rmask) >> rshift) << rleftshift) & 0x80) 
== 0)
+                  {
+                     rleftshift++;
+                  }
+              }
            else if (bitcount == 16)
              {
                 rmask = 0x7C00;
@@ -239,6 +284,7 @@
                 rshift = 10;
                 gshift = 5;
                 bshift = 0;
+                rleftshift = gleftshift = bleftshift = 3;
              }
            else if (bitcount == 32)
              {
@@ -656,13 +702,10 @@
                         *   bshift;
                         * *ptr++ = 0xff000000 | (r << 16) | (g << 8) | b;
                         */
-                       /* TODO: I don't know if [rgb]shift are calculated 
correctly, because we
-                        * 16 bit depth losses some values (bits).
-                        */
                        unsigned short pix = *(unsigned short *)buffer_ptr;
-                       *ptr++ = 0xff000000 | (((pix & rmask) >> rshift) << 16) 
|
-                                             (((pix & gmask) >> gshift) <<  8) 
|
-                                             (((pix & bmask) >> bshift)      ) 
;
+                       *ptr++ = 0xff000000 | ((((pix & rmask) >> rshift) << 
rleftshift) << 16) |
+                                             ((((pix & gmask) >> gshift) << 
gleftshift) <<  8) |
+                                             ((((pix & bmask) >> bshift) << 
bleftshift)      ) ;
                        buffer_ptr += 2;
                     }
                   ptr -= w * 2;



-------------------------------------------------------------------------
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

Reply via email to