diff --git a/reactos/subsys/win32k/dc/dc.c b/reactos/subsys/win32k/dc/dc.c new file mode 100644 index 00000000000..380e7f63086 --- /dev/null +++ b/reactos/subsys/win32k/dc/dc.c @@ -0,0 +1,131 @@ +/* + * DC.C - Device context functions + * + */ + +#include +#include +#include + +// --------------------------------------------------------- File Statics + +/* FIXME: these should probably be placed in an object in the future */ +HANDLE gDriverHandle = NULL; +DRVENABLEDATA gDED; +typedef struct _DC +{ + DHPDEV PDev; + DEVMODEW DMW; + HSURF FillPatternSurfaces[HS_DDI_MAX]; + GDIINFO GDIInfo; + DEVINFO DevInfo; + HSURF Surface = NULL; +} DC, *PDC; + +DC gSurfaceDC; + +// ----------------------------------------------------- Public Functions + +BOOL W32kCancelDC(HDC DC) +{ + UNIMPLEMENTED; +} + +NTSTATUS W32kCreateDC(HDC *DC, + LPCWSTR Driver, + LPCWSTR Device, + CONST PDEVMODE InitData) +{ + NTSTATUS Status; + UNICODE_STRING DeviceName, ErrorMsg; + OBJECT_ATTRIBUTES ObjectAttributes; + + /* Is this a request for a printer DC? */ + if (wcsicmp(Driver, L"DISPLAY")) + { + UNIMPLEMENTED; + } + + /* Initialize driver pair here on first call for display DC. */ + if (gDriverHandle == NULL) + { + /* FIXME: should get the device name from the registry */ + RtlInitUnicodeString(&DeviceName, L"\\Device\\DISPLAY"); + InitializeObjectAttributes(&ObjectAttributes, + &DeviceName, + 0, + NULL, + NULL); + Status = ZwOpenFile(&gDriverHandle, + FILE_ALL_ACCESS, + &ObjectAttributes, + NULL, + 0, + FILE_SYNCHRONOUS_IO_ALERT); + if (!NT_SUCCESS(Status)) + { + DbgPrint("Failed to open display device\n"); + DbgGetErrorText(Status, &ErrorMsg, 0xf); + DbgPrint("%W\n", &ErrorMsg); + RtlFreeUnicodeString(&ErrorMsg); + + return Status; + } + + /* Call DrvEnableDriver */ + RtlZeroMemory(&gDED, sizeof(gDED)); + if (!DrvEnableDriver(DDI_DRIVER_VERSION, sizeof(gDED), &gDED)) + { + DbgPrint("DrvEnableDriver failed\n"); + + return STATUS_UNSUCCESSFUL; + } + } + + /* Allocate a phyical device handle from the driver */ + if (gSurfaceDC.PDev == NULL) + { + RtlZeroMemory(&gSurfaceDC, sizeof(gSurfaceDC)); + /* FIXME: get mode selection information from somewhere */ + if (Device != NULL) + { + wcsncpy(gDMW.dmDeviceName, Device, DMMAXDEVICENAME); + } + gSurfaceDC.DMW.dmSize = sizeof(gSurfaceDC.DMW); + gSurfaceDC.DMW.dmFields = 0x000fc000; + gSurfaceDC.DMW.dmLogPixels = 96; + gSurfaceDC.DMW.BitsPerPel = 8; + gSurfaceDC.DMW.dmPelsWidth = 640; + gSurfaceDC.DMW.dmPelsHeight = 480; + gSurfaceDC.DMW.dmDisplayFlags = 0; + gSurfaceDC.DMW.dmDisplayFrequency = 0; + gSurfaceDC.PDev = DrvEnablePDEV(&gSurfaceDC.DMW, + L"", + HS_DDI_MAX, + gSurfaceDC.FillPatternSurfaces, + sizeof(gSurfaceDC.GDIInfo), + &gSurfaceDC.GDIInfo, + sizeof(gSurfaceDC.DevInfo), + &gSurfaceDC.DevInfo, + NULL, + L"", + gDriverHandle); + if (gSurfaceDC.PDev == NULL) + { + DbgPrint("DrvEnablePDEV failed\n"); + + return STATUS_UNSUCCESSFUL; + } + DrvCompletePDEV(gSurfaceDC.PDev, gSurfaceDC); + gSurfaceDC.Surface = DrvEnableSurface(gSurfaceDC.PDev); + } + *DC = &SurfaceDC; + + return STATUS_SUCCESS; +} + +NTSTATUS W32kDeleteDC(HDC DC) +{ + UNIMPLEMENTED; +} + diff --git a/reactos/subsys/win32k/main/dllmain.c b/reactos/subsys/win32k/main/dllmain.c index df74248ee82..e4cda178fbf 100644 --- a/reactos/subsys/win32k/main/dllmain.c +++ b/reactos/subsys/win32k/main/dllmain.c @@ -5,9 +5,294 @@ #include #include -WINBOOL STDCALL DllMain(HANDLE hInst, - ULONG ul_reason_for_call, - LPVOID lpReserved) +#include "../include/vectors.h" + +PFN Win32kVectors[] = +{ + (PFN) W32kAbortDoc, + (PFN) W32kAbortPath, + (PFN) W32kAddFontResource, + (PFN) W32kAngleArc, + (PFN) W32kAnimatePalette, + (PFN) W32kArc, + (PFN) W32kArcTo, + (PFN) W32kBeginPath, + (PFN) W32kBitBlt, + (PFN) W32kCancelDC, + (PFN) W32kCheckColorsInGamut, + (PFN) W32kChoosePixelFormat, + (PFN) W32kChord, + (PFN) W32kCloseEnhMetaFile, + (PFN) W32kCloseFigure, + (PFN) W32kCloseMetaFile, + (PFN) W32kColorMatchToTarget, + (PFN) W32kCombineRgn, + (PFN) W32kCombineTransform, + (PFN) W32kCopyEnhMetaFile, + (PFN) W32kCopyMetaFile, + (PFN) W32kCreateBitmap, + (PFN) W32kCreateBitmapIndirect, + (PFN) W32kCreateBrushIndirect, + (PFN) W32kCreateColorSpace, + (PFN) W32kCreateCompatibleBitmap, + (PFN) W32kCreateCompatibleDC, + (PFN) W32kCreateDC, + (PFN) W32kCreateDIBPatternBrush, + (PFN) W32kCreateDIBPatternBrushPt, + (PFN) W32kCreateDIBSection, + (PFN) W32kCreateDIBitmap, + (PFN) W32kCreateDiscardableBitmap, + (PFN) W32kCreateEllipticRgn, + (PFN) W32kCreateEllipticRgnIndirect, + (PFN) W32kCreateEnhMetaFile, + (PFN) W32kCreateFontIndirect, + (PFN) W32kCreateFont, + (PFN) W32kCreateHalftonePalette, + (PFN) W32kCreateHatchBrush, + (PFN) W32kCreateIC, + (PFN) W32kCreateMetaFile, + (PFN) W32kCreatePalette, + (PFN) W32kCreatePatternBrush, + (PFN) W32kCreatePen, + (PFN) W32kCreatePenIndirect, + (PFN) W32kCreatePolyPolygonRgn, + (PFN) W32kCreatePolygonRgn, + (PFN) W32kCreateRectRgn, + (PFN) W32kCreateRectRgnIndirect, + (PFN) W32kCreateRoundRectRgn, + (PFN) W32kCreateScalableFontResource, + (PFN) W32kCreateSolidBrush, + (PFN) W32kDPtoLP, + (PFN) W32kDeleteColorSpace, + (PFN) W32kDeleteDC, + (PFN) W32kDeleteEnhMetaFile, + (PFN) W32kDeleteMetaFile, + (PFN) W32kDeleteObject, + (PFN) W32kDescribePixelFormat, + (PFN) W32kDeviceCapabilitiesEx, + (PFN) W32kDrawEscape, + (PFN) W32kEllipse, + (PFN) W32kEndDoc, + (PFN) W32kEndPage, + (PFN) W32kEndPath, + (PFN) W32kEnumEnhMetaFile, + (PFN) W32kEnumFontFamiliesEx, + (PFN) W32kEnumFontFamilies, + (PFN) W32kEnumFonts, + (PFN) W32kEnumICMProfiles, + (PFN) W32kEnumMetaFile, + (PFN) W32kEnumObjects, + (PFN) W32kEqualRgn, + (PFN) W32kEscape, + (PFN) W32kExcludeClipRect, + (PFN) W32kExtCreatePen, + (PFN) W32kExtCreateRegion, + (PFN) W32kExtEscape, + (PFN) W32kExtFloodFill, + (PFN) W32kExtSelectClipRgn, + (PFN) W32kExtTextOut, + (PFN) W32kFillPath, + (PFN) W32kFillRgn, + (PFN) W32kFixBrushOrgEx, + (PFN) W32kFlattenPath, + (PFN) W32kFloodFill, + (PFN) W32kFrameRgn, + (PFN) W32kGdiComment, + (PFN) W32kGdiFlush, + (PFN) W32kGdiGetBatchLimit, + (PFN) W32kGdiPlayDCScript, + (PFN) W32kGdiPlayJournal, + (PFN) W32kGdiPlayScript, + (PFN) W32kGdiSetBatchLimit, + (PFN) W32kGetArcDirection, + (PFN) W32kGetAspectRatioFilterEx, + (PFN) W32kGetBitmapBits, + (PFN) W32kGetBitmapDimensionEx, + (PFN) W32kGetBkColor, + (PFN) W32kGetBkMode, + (PFN) W32kGetBoundsRect, + (PFN) W32kGetBrushOrgEx, + (PFN) W32kGetCharABCWidthsFloat, + (PFN) W32kGetCharABCWidths, + (PFN) W32kGetCharWidth32, + (PFN) W32kGetCharWidthFloat, + (PFN) W32kGetCharWidth, + (PFN) W32kGetCharacterPlacement, + (PFN) W32kGetClipBox, + (PFN) W32kGetClipRgn, + (PFN) W32kGetColorAdjustment, + (PFN) W32kGetColorSpace, + (PFN) W32kGetCurrentObject, + (PFN) W32kGetCurrentPositionEx, + (PFN) W32kGetDCOrgEx, + (PFN) W32kGetDIBColorTable, + (PFN) W32kGetDIBits, + (PFN) W32kGetDeviceCaps, + (PFN) W32kGetDeviceGammaRamp, + (PFN) W32kGetEnhMetaFileBits, + (PFN) W32kGetEnhMetaFileDescription, + (PFN) W32kGetEnhMetaFileHeader, + (PFN) W32kGetEnhMetaFilePaletteEntries, + (PFN) W32kGetEnhMetaFilePixelFormat, + (PFN) W32kGetEnhMetaFile, + (PFN) W32kGetFontLanguageInfo, + (PFN) W32kGetFontResourceInfo, + (PFN) W32kGetGlyphOutline, + (PFN) W32kGetGlyphOutlineWow, + (PFN) W32kGetGraphicsMode, + (PFN) W32kGetICMProfile, + (PFN) W32kGetKerningPairs, + (PFN) W32kGetLogColorSpace, + (PFN) W32kGetMapMode, + (PFN) W32kGetMetaFileBitsEx, + (PFN) W32kGetMetaFile, + (PFN) W32kGetMetaRgn, + (PFN) W32kGetMiterLimit, + (PFN) W32kGetNearestColor, + (PFN) W32kGetNearestPaletteIndex, + (PFN) W32kGetObjectType, + (PFN) W32kGetObject, + (PFN) W32kGetOutlineTextMetrics, + (PFN) W32kGetPaletteEntries, + (PFN) W32kGetPath, + (PFN) W32kGetPixel, + (PFN) W32kGetPixelFormat, + (PFN) W32kGetPolyFillMode, + (PFN) W32kGetROP2, + (PFN) W32kGetRandomRgn, + (PFN) W32kGetRasterizerCaps, + (PFN) W32kGetRelAbs, + (PFN) W32kGetRgnBox, + (PFN) W32kGetStockObject, + (PFN) W32kGetStretchBltMode, + (PFN) W32kGetSystemPaletteEntries, + (PFN) W32kGetSystemPaletteUse, + (PFN) W32kGetTextAlign, + (PFN) W32kGetTextCharset, + (PFN) W32kGetTextCharsetInfo, + (PFN) W32kGetTextColor, + (PFN) W32kGetTextExtentExPoint, + (PFN) W32kGetTextExtentPoint32, + (PFN) W32kGetTextExtentPoint, + (PFN) W32kGetTextFace, + (PFN) W32kGetTextMetrics, + (PFN) W32kGetViewportExtEx, + (PFN) W32kGetViewportOrgEx, + (PFN) W32kGetWinMetaFileBits, + (PFN) W32kGetWindowExtEx, + (PFN) W32kGetWindowOrgEx, + (PFN) W32kGetWorldTransform, + (PFN) W32kIntersectClipRect, + (PFN) W32kInvertRgn, + (PFN) W32kLPtoDP, + (PFN) W32kLineTo, + (PFN) W32kMaskBlt, + (PFN) W32kModifyWorldTransform, + (PFN) W32kMoveToEx, + (PFN) W32kOffsetClipRgn, + (PFN) W32kOffsetRgn, + (PFN) W32kOffsetViewportOrgEx, + (PFN) W32kOffsetWindowOrgEx, + (PFN) W32kPaintRgn, + (PFN) W32kPatBlt, + (PFN) W32kPathToRegion, + (PFN) W32kPie, + (PFN) W32kPlayEnhMetaFile, + (PFN) W32kPlayEnhMetaFileRecord, + (PFN) W32kPlayMetaFile, + (PFN) W32kPlayMetaFileRecord, + (PFN) W32kPlgBlt, + (PFN) W32kPolyBezier, + (PFN) W32kPolyBezierTo, + (PFN) W32kPolyDraw, + (PFN) W32kPolyPolygon, + (PFN) W32kPolyPolyline, + (PFN) W32kPolyTextOut, + (PFN) W32kPolygon, + (PFN) W32kPolyline, + (PFN) W32kPolylineTo, + (PFN) W32kPtInRegion, + (PFN) W32kPtVisible, + (PFN) W32kRealizePalette, + (PFN) W32kRectInRegion, + (PFN) W32kRectVisible, + (PFN) W32kRectangle, + (PFN) W32kRemoveFontResource, + (PFN) W32kResetDC, + (PFN) W32kResizePalette, + (PFN) W32kRestoreDC, + (PFN) W32kRoundRect, + (PFN) W32kSaveDC, + (PFN) W32kScaleViewportExtEx, + (PFN) W32kScaleWindowExtEx, + (PFN) W32kSelectBrushLocal, + (PFN) W32kSelectClipPath, + (PFN) W32kSelectClipRgn, + (PFN) W32kSelectFontLocal, + (PFN) W32kSelectObject, + (PFN) W32kSelectPalette, + (PFN) W32kSetAbortProc, + (PFN) W32kSetArcDirection, + (PFN) W32kSetBitmapBits, + (PFN) W32kSetBitmapDimensionEx, + (PFN) W32kSetBkColor, + (PFN) W32kSetBkMode, + (PFN) W32kSetBoundsRect, + (PFN) W32kSetBrushOrgEx, + (PFN) W32kSetColorAdjustment, + (PFN) W32kSetColorSpace, + (PFN) W32kSetDIBColorTable, + (PFN) W32kSetDIBits, + (PFN) W32kSetDIBitsToDevice, + (PFN) W32kSetDeviceGammaRamp, + (PFN) W32kSetEnhMetaFileBits, + (PFN) W32kSetFontEnumeration, + (PFN) W32kSetGraphicsMode, + (PFN) W32kSetICMMode, + (PFN) W32kSetICMProfile, + (PFN) W32kSetMapMode, + (PFN) W32kSetMapperFlags, + (PFN) W32kSetMetaFileBitsEx, + (PFN) W32kSetMetaRgn, + (PFN) W32kSetMiterLimit, + (PFN) W32kSetPaletteEntries, + (PFN) W32kSetPixel, + (PFN) W32kSetPixelFormat, + (PFN) W32kSetPixelV, + (PFN) W32kSetPolyFillMode, + (PFN) W32kSetROP2, + (PFN) W32kSetRectRgn, + (PFN) W32kSetRelAbs, + (PFN) W32kSetStretchBltMode, + (PFN) W32kSetSystemPaletteUse, + (PFN) W32kSetTextAlign, + (PFN) W32kSetTextColor, + (PFN) W32kSetTextJustification, + (PFN) W32kSetViewportExtEx, + (PFN) W32kSetViewportOrgEx, + (PFN) W32kSetWinMetaFileBits, + (PFN) W32kSetWindowExtEx, + (PFN) W32kSetWindowOrgEx, + (PFN) W32kSetWorldTransform, + (PFN) W32kStartDoc, + (PFN) W32kStartPage, + (PFN) W32kStretchBlt, + (PFN) W32kStretchDIBits, + (PFN) W32kStrokeAndFillPath, + (PFN) W32kStrokePath, + (PFN) W32kSwapBuffers, + (PFN) W32kTextOut, + (PFN) W32kTranslateCharsetInfo, + (PFN) W32kUnrealizeObject, + (PFN) W32kUpdateColors, + (PFN) W32kUpdateICMRegKey, + (PFN) W32kWidenPath, + (PFN) W32kgdiPlaySpoolStream +}; + +WINBOOL STDCALL DllMain(HANDLE hInst, + ULONG ul_reason_for_call, + LPVOID lpReserved) { DbgPrint("win32k:DllMain(hInst %x, ul_reason_for_call %d)\n", hInst, @@ -16,11 +301,8 @@ WINBOOL STDCALL DllMain(HANDLE hInst, return TRUE; } -#if 0 -HDC GDICreateDC(LPCWSTR Driver, - LPCWSTR Device, - CONST PDEVMODE InitData) +PVOID W32kGetVectors(VOID) { - /* %%% initialize device driver here on first call for display DC. */ + return Win32kVectors; } -#endif + diff --git a/reactos/subsys/win32k/win32k.def b/reactos/subsys/win32k/win32k.def index 70c26fac078..5b778326b6e 100644 --- a/reactos/subsys/win32k/win32k.def +++ b/reactos/subsys/win32k/win32k.def @@ -1,4 +1,4 @@ -; $Id: win32k.def,v 1.2 1999/05/22 23:55:56 rex Exp $ +; $Id: win32k.def,v 1.3 1999/05/27 23:08:13 rex Exp $ ; ; win32k.def ; @@ -6,6 +6,7 @@ ; LIBRARY win32k EXPORTS +W32kGetVectors BRUSHOBJ_pvAllocRbrush BRUSHOBJ_pvGetRbrush BRUSHOBJ_ulGetBrushColor