diff --git a/reactos/drivers/dd/vga/display/main/enable.c b/reactos/drivers/dd/vga/display/main/enable.c index fa4029ac583..3a1703c8e91 100644 --- a/reactos/drivers/dd/vga/display/main/enable.c +++ b/reactos/drivers/dd/vga/display/main/enable.c @@ -1,14 +1,15 @@ /* * entry.c * - * $Revision: 1.24 $ + * $Revision: 1.25 $ * $Author: gvg $ - * $Date: 2003/02/25 23:08:52 $ + * $Date: 2003/03/08 13:16:52 $ * */ #include "gdiinfo.h" #include "../vgavideo/vgavideo.h" +#define NDEBUG #include #define DBG_PREFIX "VGADDI: " diff --git a/reactos/include/ddk/winddi.h b/reactos/include/ddk/winddi.h index 7c697389337..9d18363075f 100644 --- a/reactos/include/ddk/winddi.h +++ b/reactos/include/ddk/winddi.h @@ -1085,7 +1085,7 @@ EngCreateEvent HPALETTE STDCALL EngCreatePalette(IN ULONG Mode, IN ULONG NumColors, - IN PULONG *Colors, + IN ULONG *Colors, IN ULONG Red, IN ULONG Green, IN ULONG Blue); diff --git a/reactos/include/win32k/bitmaps.h b/reactos/include/win32k/bitmaps.h index e504a025a92..8196f14db76 100644 --- a/reactos/include/win32k/bitmaps.h +++ b/reactos/include/win32k/bitmaps.h @@ -48,6 +48,7 @@ int DIB_GetDIBImageBytes (int width, int height, int depth); int DIB_BitmapInfoSize (const BITMAPINFO * info, WORD coloruse); INT BITMAP_GetObject(BITMAPOBJ * bmp, INT count, LPVOID buffer); BOOL Bitmap_InternalDelete( PBITMAPOBJ pBmp ); +HBITMAP BitmapToSurf(PBITMAPOBJ BitmapObj); /* User Entry Points */ BOOL diff --git a/reactos/include/win32k/region.h b/reactos/include/win32k/region.h index 6650718333a..4c7783a27fa 100644 --- a/reactos/include/win32k/region.h +++ b/reactos/include/win32k/region.h @@ -130,6 +130,11 @@ STDCALL W32kRectInRegion(HRGN hRgn, CONST LPRECT rc); +INT +STDCALL +W32kSelectVisRgn(HDC hdc, + HRGN hrgn); + BOOL STDCALL W32kSetRectRgn(HRGN hRgn, diff --git a/reactos/subsys/win32k/eng/palette.c b/reactos/subsys/win32k/eng/palette.c index 1004b598241..7411167a97c 100644 --- a/reactos/subsys/win32k/eng/palette.c +++ b/reactos/subsys/win32k/eng/palette.c @@ -12,13 +12,13 @@ #include #include "handle.h" -//#define NDEBUG +#define NDEBUG #include HPALETTE STDCALL EngCreatePalette(ULONG Mode, ULONG NumColors, - PULONG *Colors, // FIXME: This was implemented with ULONG *Colors!! + ULONG *Colors, ULONG Red, ULONG Green, ULONG Blue) diff --git a/reactos/subsys/win32k/eng/xlate.c b/reactos/subsys/win32k/eng/xlate.c index 5abd0a032bb..57b5780c3c5 100644 --- a/reactos/subsys/win32k/eng/xlate.c +++ b/reactos/subsys/win32k/eng/xlate.c @@ -175,8 +175,8 @@ static INT CalculateShift(ULONG Mask) return Shift; } -XLATEOBJ *EngCreateXlate(USHORT DestPalType, USHORT SourcePalType, - HPALETTE PaletteDest, HPALETTE PaletteSource) +XLATEOBJ *IntEngCreateXlate(USHORT DestPalType, USHORT SourcePalType, + HPALETTE PaletteDest, HPALETTE PaletteSource) { // FIXME: Add support for BGR conversions diff --git a/reactos/subsys/win32k/include/inteng.h b/reactos/subsys/win32k/include/inteng.h index 02667461d8c..9274b68ec3a 100644 --- a/reactos/subsys/win32k/include/inteng.h +++ b/reactos/subsys/win32k/include/inteng.h @@ -24,4 +24,9 @@ BOOL STDCALL IntEngBitBlt(SURFOBJ *DestObj, POINTL *BrushOrigin, ROP4 rop4); +XLATEOBJ *IntEngCreateXlate(USHORT DestPalType, + USHORT SourcePalType, + HPALETTE PaletteDest, + HPALETTE PaletteSource); + #endif diff --git a/reactos/subsys/win32k/ntuser/windc.c b/reactos/subsys/win32k/ntuser/windc.c index e11fb5ad7d0..67f31854398 100644 --- a/reactos/subsys/win32k/ntuser/windc.c +++ b/reactos/subsys/win32k/ntuser/windc.c @@ -1,4 +1,4 @@ -/* $Id: windc.c,v 1.7 2003/03/08 00:46:14 gvg Exp $ +/* $Id: windc.c,v 1.8 2003/03/08 13:16:51 gvg Exp $ * * COPYRIGHT: See COPYING in the top level directory * PROJECT: ReactOS kernel @@ -13,6 +13,7 @@ #include #include +#include #include #include #include diff --git a/reactos/subsys/win32k/ntuser/window.c b/reactos/subsys/win32k/ntuser/window.c index aa63cb18058..069680c1d69 100644 --- a/reactos/subsys/win32k/ntuser/window.c +++ b/reactos/subsys/win32k/ntuser/window.c @@ -1,4 +1,4 @@ -/* $Id: window.c,v 1.26 2003/03/07 05:38:02 rcampbell Exp $ +/* $Id: window.c,v 1.27 2003/03/08 13:16:51 gvg Exp $ * * COPYRIGHT: See COPYING in the top level directory * PROJECT: ReactOS kernel @@ -24,7 +24,7 @@ #include #include -//#define NDEBUG +#define NDEBUG #include /* FUNCTIONS *****************************************************************/ diff --git a/reactos/subsys/win32k/objects/bitmaps.c b/reactos/subsys/win32k/objects/bitmaps.c index 81615040c50..aa63a089400 100644 --- a/reactos/subsys/win32k/objects/bitmaps.c +++ b/reactos/subsys/win32k/objects/bitmaps.c @@ -82,7 +82,7 @@ BOOL STDCALL W32kBitBlt(HDC hDCDest, PalDestGDI = (PPALGDI)AccessInternalObject(DestPalette); PalSourceGDI = (PPALGDI)AccessInternalObject(SourcePalette); - XlateObj = (PXLATEOBJ)EngCreateXlate(PalDestGDI->Mode, PalSourceGDI->Mode, DestPalette, SourcePalette); + XlateObj = (PXLATEOBJ)IntEngCreateXlate(PalDestGDI->Mode, PalSourceGDI->Mode, DestPalette, SourcePalette); } // Perform the bitblt operation diff --git a/reactos/subsys/win32k/objects/cliprgn.c b/reactos/subsys/win32k/objects/cliprgn.c index 8ec98acf96a..0b00d4e8b21 100644 --- a/reactos/subsys/win32k/objects/cliprgn.c +++ b/reactos/subsys/win32k/objects/cliprgn.c @@ -8,7 +8,7 @@ #include #include -// #define NDEBUG +#define NDEBUG #include VOID @@ -54,7 +54,7 @@ HRGN WINAPI SaveVisRgn(HDC hdc) return copy; } -INT WINAPI +INT STDCALL W32kSelectVisRgn(HDC hdc, HRGN hrgn) { int retval; diff --git a/reactos/subsys/win32k/objects/color.c b/reactos/subsys/win32k/objects/color.c index c56e4476fce..5e82373b2b2 100644 --- a/reactos/subsys/win32k/objects/color.c +++ b/reactos/subsys/win32k/objects/color.c @@ -4,11 +4,14 @@ #include #include #include +#include #include #include +#include #include "../eng/handle.h" +#include -// #define NDEBUG +#define NDEBUG #include int COLOR_gapStart = 256; @@ -58,12 +61,16 @@ ULONG W32kGetSysColor(int nIndex) HPEN STDCALL W32kGetSysColorPen(int nIndex) { - return(W32kCreatePen(PS_SOLID, 1, COLOR_sysPalTemplate[nIndex])); + COLORREF Col; + memcpy(&Col, COLOR_sysPalTemplate + nIndex, sizeof(COLORREF)); + return(W32kCreatePen(PS_SOLID, 1, Col)); } HBRUSH STDCALL W32kGetSysColorBrush(int nIndex) { - return(W32kCreateSolidBrush(COLOR_sysPalTemplate[nIndex])); + COLORREF Col; + memcpy(&Col, COLOR_sysPalTemplate + nIndex, sizeof(COLORREF)); + return(W32kCreateSolidBrush(Col)); } //forward declarations @@ -331,7 +338,7 @@ UINT STDCALL W32kRealizePalette(HDC hDC) if(dc->w.flags != DC_MEMORY) { // Device managed DC - palPtr->logicalToSystem = EngCreateXlate(sysGDI->Mode, palGDI->Mode, systemPalette, dc->w.hPalette); + palPtr->logicalToSystem = IntEngCreateXlate(sysGDI->Mode, palGDI->Mode, systemPalette, dc->w.hPalette); } // GDI_ReleaseObj(dc->w.hPalette); diff --git a/reactos/subsys/win32k/objects/dc.c b/reactos/subsys/win32k/objects/dc.c index 4e8262d074d..d88c501e764 100644 --- a/reactos/subsys/win32k/objects/dc.c +++ b/reactos/subsys/win32k/objects/dc.c @@ -1,4 +1,4 @@ -/* $Id: dc.c,v 1.49 2003/03/06 00:57:44 gvg Exp $ +/* $Id: dc.c,v 1.50 2003/03/08 13:16:51 gvg Exp $ * * DC.C - Device context functions * @@ -19,6 +19,7 @@ #include #include #include "../eng/handle.h" +#include #define NDEBUG #include @@ -100,7 +101,6 @@ HDC STDCALL W32kCreateCompatableDC(HDC hDC) { PDC NewDC, OrigDC = NULL; HBITMAP hBitmap; - SIZEL onebyone; HDC hNewDC; OrigDC = DC_HandleToPtr(hDC); @@ -137,11 +137,6 @@ HDC STDCALL W32kCreateCompatableDC(HDC hDC) NewDC->DevInfo = OrigDC->DevInfo; } - // Create a 1x1 monochrome bitmap surface - onebyone.cx = 1; - onebyone.cy = 1; - NewDC->Surface = EngCreateBitmap(onebyone, 1, BMF_1BPP, 0, NULL); - /* DriverName is copied in the AllocDC routine */ if(OrigDC == NULL) { NewDC->DeviceDriver = DRIVER_FindMPDriver(NewDC->DriverName); @@ -160,7 +155,7 @@ HDC STDCALL W32kCreateCompatableDC(HDC hDC) /* Create default bitmap */ if (!(hBitmap = W32kCreateBitmap( 1, 1, 1, 1, NULL ))) { - DC_ReleasePtr( hNewDC ); + DC_ReleasePtr( hNewDC ); DC_FreeDC( hNewDC ); return NULL; } @@ -168,6 +163,7 @@ HDC STDCALL W32kCreateCompatableDC(HDC hDC) NewDC->w.bitsPerPixel = 1; NewDC->w.hBitmap = hBitmap; NewDC->w.hFirstBitmap = hBitmap; + NewDC->Surface = BitmapToSurf(BITMAPOBJ_HandleToPtr(hBitmap)); if(OrigDC != NULL) { @@ -355,8 +351,10 @@ BOOL STDCALL W32kCreatePrimarySurface(LPCWSTR Driver, PrimarySurface.Handle = PrimarySurface.DriverFunctions.EnableSurface(PrimarySurface.PDev); - SurfObj = (PSURFOBJ)AccessUserObject(PrimarySurface.Handle); + SurfObj = (PSURFOBJ)AccessUserObject((ULONG) PrimarySurface.Handle); SurfObj->dhpdev = PrimarySurface.PDev; + + return TRUE; } HDC STDCALL W32kCreateDC(LPCWSTR Driver, @@ -367,7 +365,6 @@ HDC STDCALL W32kCreateDC(LPCWSTR Driver, HDC hNewDC; PDC NewDC; HDC hDC = NULL; - PSURFOBJ SurfObj; PSURFGDI SurfGDI; /* Check for existing DC object */ @@ -413,7 +410,7 @@ HDC STDCALL W32kCreateDC(LPCWSTR Driver, /* FIXME: get mode selection information from somewhere */ NewDC->DMW.dmLogPixels = 96; - SurfGDI = (PSURFGDI)AccessInternalObject(PrimarySurface.Handle); + SurfGDI = (PSURFGDI)AccessInternalObject((ULONG) PrimarySurface.Handle); NewDC->DMW.dmBitsPerPel = SurfGDI->BitsPerPixel; NewDC->DMW.dmPelsWidth = SurfGDI->SurfObj.sizlBitmap.cx; NewDC->DMW.dmPelsHeight = SurfGDI->SurfObj.sizlBitmap.cy; @@ -497,6 +494,7 @@ BOOL STDCALL W32kDeleteDC(HDC DCHandle) W32kSelectObject (DCHandle, STOCK_WHITE_BRUSH); W32kSelectObject (DCHandle, STOCK_SYSTEM_FONT); DC_LockDC (DCHandle); W32kSelectObject does not recognize stock objects yet */ + BITMAPOBJ_ReleasePtr(DCToDelete->w.hBitmap); if (DCToDelete->w.flags & DC_MEMORY) { W32kDeleteObject (DCToDelete->w.hFirstBitmap); @@ -1021,8 +1019,6 @@ HGDIOBJ STDCALL W32kSelectObject(HDC hDC, HGDIOBJ hGDIObj) { HGDIOBJ objOrg; BITMAPOBJ *pb; - PSURFOBJ surfobj; - PSURFGDI surfgdi; PDC dc; PPENOBJ pen; PBRUSHOBJ brush; @@ -1046,9 +1042,9 @@ HGDIOBJ STDCALL W32kSelectObject(HDC hDC, HGDIOBJ hGDIObj) dc->w.hPen = hGDIObj; // Convert the color of the pen to the format of the DC - PalGDI = (PPALGDI)AccessInternalObject(dc->w.hPalette); + PalGDI = (PPALGDI)AccessInternalObject((ULONG) dc->w.hPalette); if( PalGDI ){ - XlateObj = (PXLATEOBJ)EngCreateXlate(PalGDI->Mode, PAL_RGB, dc->w.hPalette, NULL); + XlateObj = (PXLATEOBJ)IntEngCreateXlate(PalGDI->Mode, PAL_RGB, dc->w.hPalette, NULL); pen = GDIOBJ_LockObj(dc->w.hPen, GO_PEN_MAGIC); if( pen ){ pen->logpen.lopnColor = XLATEOBJ_iXlate(XlateObj, pen->logpen.lopnColor); @@ -1061,9 +1057,9 @@ HGDIOBJ STDCALL W32kSelectObject(HDC hDC, HGDIOBJ hGDIObj) dc->w.hBrush = (HBRUSH) hGDIObj; // Convert the color of the brush to the format of the DC - PalGDI = (PPALGDI)AccessInternalObject(dc->w.hPalette); + PalGDI = (PPALGDI)AccessInternalObject((ULONG) dc->w.hPalette); if( PalGDI ){ - XlateObj = (PXLATEOBJ)EngCreateXlate(PalGDI->Mode, PAL_RGB, dc->w.hPalette, NULL); + XlateObj = (PXLATEOBJ)IntEngCreateXlate(PalGDI->Mode, PAL_RGB, dc->w.hPalette, NULL); brush = GDIOBJ_LockObj(dc->w.hBrush, GO_BRUSH_MAGIC); if( brush ){ brush->iSolidColor = XLATEOBJ_iXlate(XlateObj, brush->logbrush.lbColor); @@ -1080,10 +1076,11 @@ HGDIOBJ STDCALL W32kSelectObject(HDC hDC, HGDIOBJ hGDIObj) if (!(dc->w.flags & DC_MEMORY)) return NULL; objOrg = (HGDIOBJ)dc->w.hBitmap; - // setup mem dc for drawing into bitmap - pb = BITMAPOBJ_HandleToPtr (hGDIObj); - dc->w.hBitmap = BitmapToSurf(pb); - dc->Surface = dc->w.hBitmap; + /* Release the old bitmap, lock the new one and convert it to a SURF */ + BITMAPOBJ_ReleasePtr(objOrg); + dc->w.hBitmap = hGDIObj; + pb = BITMAPOBJ_HandleToPtr(hGDIObj); + dc->Surface = BitmapToSurf(pb); // if we're working with a DIB, get the palette [fixme: only create if the selected palette is null] if(pb->dib) @@ -1103,7 +1100,7 @@ HGDIOBJ STDCALL W32kSelectObject(HDC hDC, HGDIOBJ hGDIObj) pb->ColorMap[Index].rgbGreen, pb->ColorMap[Index].rgbBlue); } - dc->w.hPalette = EngCreatePalette(PAL_INDEXED, NumColors, ColorMap, 0, 0, 0); + dc->w.hPalette = EngCreatePalette(PAL_INDEXED, NumColors, (ULONG *) ColorMap, 0, 0, 0); ExFreePool(ColorMap); } else if(16 == pb->dib->dsBmih.biBitCount) diff --git a/reactos/subsys/win32k/objects/dib.c b/reactos/subsys/win32k/objects/dib.c index 04bf86d4b3e..93a0af4caa3 100644 --- a/reactos/subsys/win32k/objects/dib.c +++ b/reactos/subsys/win32k/objects/dib.c @@ -5,6 +5,7 @@ #include #include "../eng/handle.h" #include +#include #define NDEBUG #include @@ -132,7 +133,7 @@ INT STDCALL W32kSetDIBits(HDC hDC, DIB_Palette = BuildDIBPalette(bmi, &DIB_Palette_Type); // Determine XLATEOBJ for color translation - XlateObj = EngCreateXlate(DDB_Palette_Type, DIB_Palette_Type, DDB_Palette, DIB_Palette); + XlateObj = IntEngCreateXlate(DDB_Palette_Type, DIB_Palette_Type, DDB_Palette, DIB_Palette); // Zero point ZeroPoint.x = 0; diff --git a/reactos/subsys/win32k/objects/text.c b/reactos/subsys/win32k/objects/text.c index ae59128fb0d..47475774f70 100644 --- a/reactos/subsys/win32k/objects/text.c +++ b/reactos/subsys/win32k/objects/text.c @@ -3,6 +3,7 @@ #undef WIN32_LEAN_AND_MEAN #include #include +#include #include #include #include @@ -12,7 +13,7 @@ #include -// #define NDEBUG +#define NDEBUG #include FT_Library library; @@ -654,7 +655,7 @@ W32kTextOut(HDC hDC, // Create the brush PalDestGDI = (PPALGDI)AccessInternalObject(dc->w.hPalette); - XlateObj = (PXLATEOBJ)EngCreateXlate(PalDestGDI->Mode, PAL_RGB, dc->w.hPalette, NULL); + XlateObj = (PXLATEOBJ)IntEngCreateXlate(PalDestGDI->Mode, PAL_RGB, dc->w.hPalette, NULL); hBrush = W32kCreateSolidBrush(XLATEOBJ_iXlate(XlateObj, dc->w.textColor)); Brush = BRUSHOBJ_LockBrush(hBrush); EngDeleteXlate(XlateObj);