Huw Davies : gdi32: Move the query info code to a separate function.

Alexandre Julliard julliard at winehq.org
Fri Jul 15 11:45:21 CDT 2011


Module: wine
Branch: master
Commit: ff17abc695c66dc4f6b20fd9a9df2470ec7f0978
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=ff17abc695c66dc4f6b20fd9a9df2470ec7f0978

Author: Huw Davies <huw at codeweavers.com>
Date:   Fri Jul 15 14:19:10 2011 +0100

gdi32: Move the query info code to a separate function.

---

 dlls/gdi32/dib.c |  100 ++++++++++++++++++++++++++++--------------------------
 1 files changed, 52 insertions(+), 48 deletions(-)

diff --git a/dlls/gdi32/dib.c b/dlls/gdi32/dib.c
index cebe474..ed68a90 100644
--- a/dlls/gdi32/dib.c
+++ b/dlls/gdi32/dib.c
@@ -444,6 +444,57 @@ static const DWORD bit_fields_888[3] = {0xff0000, 0x00ff00, 0x0000ff};
 static const DWORD bit_fields_565[3] = {0xf800, 0x07e0, 0x001f};
 static const DWORD bit_fields_555[3] = {0x7c00, 0x03e0, 0x001f};
 
+static int fill_query_info( BITMAPINFO *info, BITMAPOBJ *bmp )
+{
+    BITMAPINFOHEADER header;
+
+    header.biSize   = info->bmiHeader.biSize; /* Ensure we don't overwrite the original size when we copy back */
+    header.biWidth  = bmp->bitmap.bmWidth;
+    header.biHeight = bmp->bitmap.bmHeight;
+    header.biPlanes = 1;
+
+    if (bmp->dib)
+    {
+        header.biBitCount = bmp->dib->dsBm.bmBitsPixel;
+        switch (bmp->dib->dsBm.bmBitsPixel)
+        {
+        case 16:
+        case 32:
+            header.biCompression = BI_BITFIELDS;
+            break;
+        default:
+            header.biCompression = BI_RGB;
+            break;
+        }
+    }
+    else
+    {
+        header.biCompression = (bmp->bitmap.bmBitsPixel > 8) ? BI_BITFIELDS : BI_RGB;
+        header.biBitCount = bmp->bitmap.bmBitsPixel;
+    }
+
+    header.biSizeImage = DIB_GetDIBImageBytes( bmp->bitmap.bmWidth,
+                                               bmp->bitmap.bmHeight,
+                                               bmp->bitmap.bmBitsPixel );
+    header.biXPelsPerMeter = 0;
+    header.biYPelsPerMeter = 0;
+    header.biClrUsed       = 0;
+    header.biClrImportant  = 0;
+
+    if ( info->bmiHeader.biSize == sizeof(BITMAPCOREHEADER) )
+    {
+        BITMAPCOREHEADER *coreheader = (BITMAPCOREHEADER *)info;
+
+        coreheader->bcWidth    = header.biWidth;
+        coreheader->bcHeight   = header.biHeight;
+        coreheader->bcPlanes   = header.biPlanes;
+        coreheader->bcBitCount = header.biBitCount;
+    }
+    else
+        info->bmiHeader = header;
+
+    return abs(bmp->bitmap.bmHeight);
+}
 
 /************************************************************************
  *      copy_color_info
@@ -519,7 +570,6 @@ INT WINAPI GetDIBits(
     BITMAPOBJ * bmp;
     int i;
     int bitmap_type;
-    BOOL core_header;
     LONG width;
     LONG height;
     WORD planes, bpp;
@@ -535,7 +585,6 @@ INT WINAPI GetDIBits(
         ERR("Invalid bitmap format\n");
         return 0;
     }
-    core_header = (bitmap_type == 0);
     if (!(dc = get_dc_ptr( hdc )))
     {
         SetLastError( ERROR_INVALID_PARAMETER );
@@ -551,55 +600,10 @@ INT WINAPI GetDIBits(
 
     if (bpp == 0) /* query bitmap info only */
     {
-        if (core_header)
-        {
-            BITMAPCOREHEADER* coreheader = (BITMAPCOREHEADER*) info;
-            coreheader->bcWidth = bmp->bitmap.bmWidth;
-            coreheader->bcHeight = bmp->bitmap.bmHeight;
-            coreheader->bcPlanes = 1;
-            coreheader->bcBitCount = bmp->bitmap.bmBitsPixel;
-        }
-        else
-        {
-            info->bmiHeader.biWidth = bmp->bitmap.bmWidth;
-            info->bmiHeader.biHeight = bmp->bitmap.bmHeight;
-            info->bmiHeader.biPlanes = 1;
-            info->bmiHeader.biSizeImage =
-                DIB_GetDIBImageBytes( bmp->bitmap.bmWidth,
-                                      bmp->bitmap.bmHeight,
-                                      bmp->bitmap.bmBitsPixel );
-            if (bmp->dib)
-            {
-                info->bmiHeader.biBitCount = bmp->dib->dsBm.bmBitsPixel;
-                switch (bmp->dib->dsBm.bmBitsPixel)
-                {
-                case 16:
-                case 32:
-                    info->bmiHeader.biCompression = BI_BITFIELDS;
-                    break;
-                default:
-                    info->bmiHeader.biCompression = BI_RGB;
-                    break;
-                }
-            }
-            else
-            {
-                info->bmiHeader.biCompression = (bmp->bitmap.bmBitsPixel > 8) ? BI_BITFIELDS : BI_RGB;
-                info->bmiHeader.biBitCount = bmp->bitmap.bmBitsPixel;
-            }
-            info->bmiHeader.biXPelsPerMeter = 0;
-            info->bmiHeader.biYPelsPerMeter = 0;
-            info->bmiHeader.biClrUsed = 0;
-            info->bmiHeader.biClrImportant = 0;
-
-            /* Windows 2000 doesn't touch the additional struct members if
-               it's a BITMAPV4HEADER or a BITMAPV5HEADER */
-        }
-        lines = abs(bmp->bitmap.bmHeight);
+        lines = fill_query_info( info, bmp );
         goto done;
     }
 
-
     /* Since info may be a BITMAPCOREINFO or any of the larger BITMAPINFO structures, we'll use our
        own copy and transfer the colour info back at the end */
 




More information about the wine-cvs mailing list