branch update for HEAD-2003021201
[reactos.git] / subsys / win32k / objects / dc.c
index 9c28ef1..7727c29 100644 (file)
@@ -7,6 +7,7 @@
 #undef WIN32_LEAN_AND_MEAN
 #include <windows.h>
 #include <ddk/ntddk.h>
+#include <ddk/ntddvid.h>
 
 #include <win32k/bitmaps.h>
 #include <win32k/coord.h>
@@ -22,6 +23,8 @@
 //#define NDEBUG
 #include <win32k/debug1.h>
 
+static GDIDEVICE PrimarySurface;
+static BOOL PrimarySurfaceCreated = FALSE;
 
 /* FIXME: DCs should probably be thread safe  */
 
@@ -156,8 +159,6 @@ HDC STDCALL  W32kCreateCompatableDC(HDC  hDC)
     NewDC->vportExtY = OrigDC->vportExtY;
   }
 
-  DC_InitDC(hNewDC);
-
   /* Create default bitmap */
   if (!(hBitmap = W32kCreateBitmap( 1, 1, 1, 1, NULL )))
   {
@@ -178,15 +179,11 @@ HDC STDCALL  W32kCreateCompatableDC(HDC  hDC)
   }
   DC_ReleasePtr( hDC );
   DC_ReleasePtr( hNewDC );
+  DC_InitDC(hNewDC);
 
   return  hNewDC;
 }
 
-#include <ddk/ntddvid.h>
-
-static GDIDEVICE PrimarySurface;
-static BOOL PrimarySurfaceCreated = FALSE;
-
 BOOL STDCALL W32kCreatePrimarySurface(LPCWSTR Driver,
                                      LPCWSTR Device)
 {
@@ -338,13 +335,13 @@ HDC STDCALL  W32kCreateDC(LPCWSTR  Driver,
 
   DPRINT("Bits per pel: %u\n", NewDC->w.bitsPerPixel);
 
+  NewDC->w.hVisRgn = W32kCreateRectRgn(0, 0, 640, 480);
+  DC_ReleasePtr( hNewDC );
+
   /*  Initialize the DC state  */
   DC_InitDC(hNewDC);
-
-  NewDC->w.hVisRgn = W32kCreateRectRgn(0, 0, 640, 480);
   W32kSetTextColor(hNewDC, RGB(0, 0, 0));
   W32kSetTextAlign(hNewDC, TA_TOP);
-  DC_ReleasePtr( hNewDC );
 
   return hNewDC;
 }
@@ -960,7 +957,9 @@ HGDIOBJ STDCALL W32kSelectObject(HDC  hDC, HGDIOBJ  hGDIObj)
          if( PalGDI ){
        XlateObj = (PXLATEOBJ)EngCreateXlate(PalGDI->Mode, PAL_RGB, dc->w.hPalette, NULL);
        pen = GDIOBJ_LockObj(dc->w.hPen, GO_PEN_MAGIC);
-       pen->logpen.lopnColor = XLATEOBJ_iXlate(XlateObj, pen->logpen.lopnColor);
+               if( pen ){
+               pen->logpen.lopnColor = XLATEOBJ_iXlate(XlateObj, pen->logpen.lopnColor);
+               }
                GDIOBJ_UnlockObj( dc->w.hPen, GO_PEN_MAGIC);
          }
       break;
@@ -973,8 +972,9 @@ HGDIOBJ STDCALL W32kSelectObject(HDC  hDC, HGDIOBJ  hGDIObj)
          if( PalGDI ){
        XlateObj = (PXLATEOBJ)EngCreateXlate(PalGDI->Mode, PAL_RGB, dc->w.hPalette, NULL);
        brush = GDIOBJ_LockObj(dc->w.hBrush, GO_BRUSH_MAGIC);
-       brush->iSolidColor = XLATEOBJ_iXlate(XlateObj,
-                                            brush->logbrush.lbColor);
+               if( brush ){
+               brush->iSolidColor = XLATEOBJ_iXlate(XlateObj, brush->logbrush.lbColor);
+               }
                GDIOBJ_UnlockObj( dc->w.hBrush, GO_BRUSH_MAGIC);
          }
       break;
@@ -1217,20 +1217,19 @@ HDC  DC_FindOpenDC(LPCWSTR  Driver)
   return NULL;
 }
 
+/*!
+ * Initialize some common fields in the Device Context structure.
+*/
 void  DC_InitDC(HDC  DCHandle)
 {
 //  W32kRealizeDefaultPalette(DCHandle);
-  PDC DCToInit;
-  if( (DCToInit = DC_HandleToPtr( DCHandle ) ) ){
-         W32kSetTextColor(DCHandle, DCToInit->w.textColor);
-         W32kSetBkColor(DCHandle, DCToInit->w.backgroundColor);
-         W32kSelectObject(DCHandle, DCToInit->w.hPen);
-         W32kSelectObject(DCHandle, W32kGetStockObject( GRAY_BRUSH )); //FIXME: default should be WHITE_BRUSH
-         W32kSelectObject(DCHandle, DCToInit->w.hFont);
-  }
-  else
-  DPRINT("DC_InitDC: can't get dc for handle %d\n", DCHandle );
+
+  W32kSelectObject(DCHandle, W32kGetStockObject( WHITE_BRUSH ));
+  //W32kSelectObject(DCHandle, hPen);
+  //W32kSelectObject(DCHandle, hFont);
+
 //  CLIPPING_UpdateGCRegion(DCToInit);
+
 }
 
 void  DC_FreeDC(HDC  DCToFree)