[ros-diffs] [jimtabor] 38101: - Implement DIB section attribute flag support. - Fix height negativity being passed to NtGdiCreateCompatibleBitmap. See bug 3947.

jimtabor at svn.reactos.org jimtabor at svn.reactos.org
Mon Dec 15 06:25:32 CET 2008


Author: jimtabor
Date: Sun Dec 14 23:25:31 2008
New Revision: 38101

URL: http://svn.reactos.org/svn/reactos?rev=38101&view=rev
Log:
- Implement DIB section attribute flag support.
- Fix height negativity being passed to NtGdiCreateCompatibleBitmap. See bug 3947.

Modified:
    trunk/reactos/subsystems/win32/win32k/objects/dibobj.c

Modified: trunk/reactos/subsystems/win32/win32k/objects/dibobj.c
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/subsystems/win32/win32k/objects/dibobj.c?rev=38101&r1=38100&r2=38101&view=diff
==============================================================================
--- trunk/reactos/subsystems/win32/win32k/objects/dibobj.c [iso-8859-1] (original)
+++ trunk/reactos/subsystems/win32/win32k/objects/dibobj.c [iso-8859-1] Sun Dec 14 23:25:31 2008
@@ -1018,8 +1018,9 @@
        return 0;
    }
 
-   hBitmap = NtGdiCreateCompatibleBitmap(hDC, BitsInfo->bmiHeader.biWidth,
-                                         BitsInfo->bmiHeader.biHeight);
+   hBitmap = NtGdiCreateCompatibleBitmap( hDC,
+                                          BitsInfo->bmiHeader.biWidth,
+                                      abs(BitsInfo->bmiHeader.biHeight));
    if (hBitmap == NULL)
    {
        DPRINT1("NtGdiCreateCompatibleBitmap fail create bitmap\n");
@@ -1302,14 +1303,19 @@
 
 HBITMAP APIENTRY
 DIB_CreateDIBSection(
-  PDC dc, BITMAPINFO *bmi, UINT usage,
-  LPVOID *bits, HANDLE section,
-  DWORD offset, DWORD ovr_pitch)
+  PDC dc,
+  BITMAPINFO *bmi,
+  UINT usage,
+  LPVOID *bits,
+  HANDLE section,
+  DWORD offset,
+  DWORD ovr_pitch)
 {
   HBITMAP res = 0;
   BITMAPOBJ *bmp = NULL;
   DIBSECTION *dib = NULL;
   void *mapBits = NULL;
+  PDC_ATTR pDc_Attr;
 
   // Fill BITMAP32 structure with DIB data
   BITMAPINFOHEADER *bi = &bmi->bmiHeader;
@@ -1328,6 +1334,9 @@
   {
     return (HBITMAP)NULL;
   }
+
+  pDc_Attr = dc->pDc_Attr;
+  if ( !pDc_Attr ) pDc_Attr = &dc->Dc_Attr;
 
   effHeight = bi->biHeight >= 0 ? bi->biHeight : -bi->biHeight;
   bm.bmType = 0;
@@ -1523,6 +1532,8 @@
       *bits = bm.bmBits;
   }
 
+  if (res) pDc_Attr->ulDirty_ |= DC_DIBSECTION;
+
   return res;
 }
 



More information about the Ros-diffs mailing list