fix some bugs
authorTimo Kreuzer <timo.kreuzer@reactos.org>
Fri, 30 Nov 2007 04:12:23 +0000 (04:12 +0000)
committerTimo Kreuzer <timo.kreuzer@reactos.org>
Fri, 30 Nov 2007 04:12:23 +0000 (04:12 +0000)
svn path=/trunk/; revision=30914

reactos/subsystems/win32/win32k/objects/dc.c

index 15e1c02..d579686 100644 (file)
@@ -2055,6 +2055,9 @@ NtGdiSelectBitmap(
     PBITMAPOBJ pBmp;
     HRGN hVisRgn;
     BOOLEAN bFailed;
+    PGDIBRUSHOBJ pBrush;
+
+    if (hDC == NULL || hBmp == NULL) return NULL;
 
     pDC = DC_LockDc(hDC);
     if (!pDC)
@@ -2096,11 +2099,27 @@ NtGdiSelectBitmap(
     }
 
     /* Regenerate the XLATEOBJs. */
-    EngDeleteXlate(pDC->XlateBrush);
-    pDC->XlateBrush = IntGdiCreateBrushXlate(pDC, pDc_Attr->hbrush, &bFailed);
+    pBrush = BRUSHOBJ_LockBrush(pDc_Attr->hbrush);
+    if (pBrush)
+    {
+        if (pDC->XlateBrush)
+        {
+            EngDeleteXlate(pDC->XlateBrush);
+        }
+        pDC->XlateBrush = IntGdiCreateBrushXlate(pDC, pBrush, &bFailed);
+        BRUSHOBJ_UnlockBrush(pBrush);
+    }
 
-    EngDeleteXlate(pDC->XlatePen);
-    pDC->XlatePen = IntGdiCreateBrushXlate(pDC, pDc_Attr->hpen, &bFailed);
+    pBrush = PENOBJ_LockPen(pDc_Attr->hpen);
+    if (pBrush)
+    {
+        if (pDC->XlatePen)
+        {
+            EngDeleteXlate(pDC->XlatePen);
+        }
+        pDC->XlatePen = IntGdiCreateBrushXlate(pDC, pBrush, &bFailed);
+        PENOBJ_UnlockPen(pBrush);
+    }
 
     DC_UnlockDc(pDC);
 
@@ -2128,6 +2147,8 @@ NtGdiSelectBrush(
     XLATEOBJ *XlateObj;
     BOOLEAN bFailed;
 
+    if (hDC == NULL || hBrush == NULL) return NULL;
+
     pDC = DC_LockDc(hDC);
     if (!pDC)
     {
@@ -2176,6 +2197,8 @@ NtGdiSelectFont(
     PDC_ATTR pDc_Attr;
     HFONT hOrgFont = NULL;
 
+    if (hDC == NULL || hFont == NULL) return NULL;
+
     pDC = DC_LockDc(hDC);
     if (!pDC)
     {
@@ -2213,6 +2236,8 @@ NtGdiSelectPen(
     XLATEOBJ *XlateObj;
     BOOLEAN bFailed;
 
+    if (hDC == NULL || hPen == NULL) return NULL;
+
     pDC = DC_LockDc(hDC);
     if (!pDC)
     {