svn path=/trunk/; revision=30374
This commit is contained in:
James Tabor 2007-11-12 06:43:44 +00:00
parent 98f75aa494
commit f0e8f2df37
6 changed files with 59 additions and 52 deletions

View file

@ -505,9 +505,7 @@ typedef struct _DC
DC_ATTR Dc_Attr; DC_ATTR Dc_Attr;
HDC hNext; HDC hNext;
HDC hPrev; HDC hPrev;
// Old tymerz! Cant code? So just Haxzorcise it!
// How many pointers to devices do we need?
PGDIINFO GDIInfo; // In GDIDEVICE
UNICODE_STRING DriverName; UNICODE_STRING DriverName;
CLIPOBJ *CombinedClip; CLIPOBJ *CombinedClip;

View file

@ -36,16 +36,25 @@ typedef struct _GDIPOINTER /* should stay private to ENG */
typedef struct typedef struct
{ {
HANDLE Handle; HANDLE Handle;
PVOID pvEntry;
ULONG lucExcLock;
ULONG Tid;
PERESOURCE_XP hsemDevLock;
PVOID pfnSync;
DHPDEV PDev; DHPDEV PDev;
DEVMODEW DMW; DEVMODEW DMW;
HSURF FillPatterns[HS_DDI_MAX]; HSURF FillPatterns[HS_DDI_MAX];
DEVINFO DevInfo; DEVINFO DevInfo;
GDIINFO GDIInfo; GDIINFO GDIInfo;
PFILE_OBJECT VideoFileObject; HANDLE hSpooler;
BOOLEAN PreparedDriver;
ULONG DisplayNumber; ULONG DisplayNumber;
PFILE_OBJECT VideoFileObject;
BOOLEAN PreparedDriver;
GDIPOINTER Pointer; GDIPOINTER Pointer;
/* Stuff to keep track of software cursors; win32k gdi part */ /* Stuff to keep track of software cursors; win32k gdi part */

View file

@ -167,8 +167,8 @@ UserGetSystemMetrics(ULONG Index)
ScreenDC = DC_LockDc(ScreenDCHandle); ScreenDC = DC_LockDc(ScreenDCHandle);
if (NULL != ScreenDC) if (NULL != ScreenDC)
{ {
Width = ScreenDC->GDIInfo->ulHorzRes; Width = ((PGDIDEVICE)ScreenDC->pPDev)->GDIInfo.ulHorzRes;
Height = ScreenDC->GDIInfo->ulVertRes; Height = ((PGDIDEVICE)ScreenDC->pPDev)->GDIInfo.ulVertRes;
DC_UnlockDc(ScreenDC); DC_UnlockDc(ScreenDC);
} }
NtGdiDeleteObjectApp(ScreenDCHandle); NtGdiDeleteObjectApp(ScreenDCHandle);

View file

@ -451,7 +451,7 @@ IntGetSystemPaletteEntries(HDC hDC,
} }
else else
{ {
Ret = dc->GDIInfo->ulNumPalReg; Ret = ((PGDIDEVICE)dc->pPDev)->GDIInfo.ulNumPalReg;
} }
} }

View file

@ -37,8 +37,8 @@
void FASTCALL void FASTCALL
IntFixIsotropicMapping(PDC dc) IntFixIsotropicMapping(PDC dc)
{ {
ULONG xdim = EngMulDiv(dc->Dc_Attr.szlViewportExt.cx, dc->GDIInfo->ulHorzSize, dc->GDIInfo->ulHorzRes) / dc->Dc_Attr.szlWindowExt.cx; ULONG xdim = EngMulDiv(dc->Dc_Attr.szlViewportExt.cx, ((PGDIDEVICE)dc->pPDev)->GDIInfo.ulHorzSize, ((PGDIDEVICE)dc->pPDev)->GDIInfo.ulHorzRes) / dc->Dc_Attr.szlWindowExt.cx;
ULONG ydim = EngMulDiv(dc->Dc_Attr.szlViewportExt.cy, dc->GDIInfo->ulVertSize, dc->GDIInfo->ulVertRes) / dc->Dc_Attr.szlWindowExt.cy; ULONG ydim = EngMulDiv(dc->Dc_Attr.szlViewportExt.cy, ((PGDIDEVICE)dc->pPDev)->GDIInfo.ulVertSize, ((PGDIDEVICE)dc->pPDev)->GDIInfo.ulVertRes) / dc->Dc_Attr.szlWindowExt.cy;
if (xdim > ydim) if (xdim > ydim)
{ {
@ -639,38 +639,38 @@ IntGdiSetMapMode(PDC dc,
case MM_LOMETRIC: case MM_LOMETRIC:
case MM_ISOTROPIC: case MM_ISOTROPIC:
dc->Dc_Attr.szlWindowExt.cx = dc->GDIInfo->ulHorzSize * 10; dc->Dc_Attr.szlWindowExt.cx = ((PGDIDEVICE)dc->pPDev)->GDIInfo.ulHorzSize * 10;
dc->Dc_Attr.szlWindowExt.cy = dc->GDIInfo->ulVertSize * 10; dc->Dc_Attr.szlWindowExt.cy = ((PGDIDEVICE)dc->pPDev)->GDIInfo.ulVertSize * 10;
dc->Dc_Attr.szlViewportExt.cx = dc->GDIInfo->ulHorzRes; dc->Dc_Attr.szlViewportExt.cx = ((PGDIDEVICE)dc->pPDev)->GDIInfo.ulHorzRes;
dc->Dc_Attr.szlViewportExt.cy = -dc->GDIInfo->ulVertRes; dc->Dc_Attr.szlViewportExt.cy = -((PGDIDEVICE)dc->pPDev)->GDIInfo.ulVertRes;
break; break;
case MM_HIMETRIC: case MM_HIMETRIC:
dc->Dc_Attr.szlWindowExt.cx = dc->GDIInfo->ulHorzSize * 100; dc->Dc_Attr.szlWindowExt.cx = ((PGDIDEVICE)dc->pPDev)->GDIInfo.ulHorzSize * 100;
dc->Dc_Attr.szlWindowExt.cy = dc->GDIInfo->ulVertSize * 100; dc->Dc_Attr.szlWindowExt.cy = ((PGDIDEVICE)dc->pPDev)->GDIInfo.ulVertSize * 100;
dc->Dc_Attr.szlViewportExt.cx = dc->GDIInfo->ulHorzRes; dc->Dc_Attr.szlViewportExt.cx = ((PGDIDEVICE)dc->pPDev)->GDIInfo.ulHorzRes;
dc->Dc_Attr.szlViewportExt.cy = -dc->GDIInfo->ulVertRes; dc->Dc_Attr.szlViewportExt.cy = -((PGDIDEVICE)dc->pPDev)->GDIInfo.ulVertRes;
break; break;
case MM_LOENGLISH: case MM_LOENGLISH:
dc->Dc_Attr.szlWindowExt.cx = EngMulDiv(1000, dc->GDIInfo->ulHorzSize, 254); dc->Dc_Attr.szlWindowExt.cx = EngMulDiv(1000, ((PGDIDEVICE)dc->pPDev)->GDIInfo.ulHorzSize, 254);
dc->Dc_Attr.szlWindowExt.cy = EngMulDiv(1000, dc->GDIInfo->ulVertSize, 254); dc->Dc_Attr.szlWindowExt.cy = EngMulDiv(1000, ((PGDIDEVICE)dc->pPDev)->GDIInfo.ulVertSize, 254);
dc->Dc_Attr.szlViewportExt.cx = dc->GDIInfo->ulHorzRes; dc->Dc_Attr.szlViewportExt.cx = ((PGDIDEVICE)dc->pPDev)->GDIInfo.ulHorzRes;
dc->Dc_Attr.szlViewportExt.cy = -dc->GDIInfo->ulVertRes; dc->Dc_Attr.szlViewportExt.cy = -((PGDIDEVICE)dc->pPDev)->GDIInfo.ulVertRes;
break; break;
case MM_HIENGLISH: case MM_HIENGLISH:
dc->Dc_Attr.szlWindowExt.cx = EngMulDiv(10000, dc->GDIInfo->ulHorzSize, 254); dc->Dc_Attr.szlWindowExt.cx = EngMulDiv(10000, ((PGDIDEVICE)dc->pPDev)->GDIInfo.ulHorzSize, 254);
dc->Dc_Attr.szlWindowExt.cy = EngMulDiv(10000, dc->GDIInfo->ulVertSize, 254); dc->Dc_Attr.szlWindowExt.cy = EngMulDiv(10000, ((PGDIDEVICE)dc->pPDev)->GDIInfo.ulVertSize, 254);
dc->Dc_Attr.szlViewportExt.cx = dc->GDIInfo->ulHorzRes; dc->Dc_Attr.szlViewportExt.cx = ((PGDIDEVICE)dc->pPDev)->GDIInfo.ulHorzRes;
dc->Dc_Attr.szlViewportExt.cy = -dc->GDIInfo->ulVertRes; dc->Dc_Attr.szlViewportExt.cy = -((PGDIDEVICE)dc->pPDev)->GDIInfo.ulVertRes;
break; break;
case MM_TWIPS: case MM_TWIPS:
dc->Dc_Attr.szlWindowExt.cx = EngMulDiv(14400, dc->GDIInfo->ulHorzSize, 254); dc->Dc_Attr.szlWindowExt.cx = EngMulDiv(14400, ((PGDIDEVICE)dc->pPDev)->GDIInfo.ulHorzSize, 254);
dc->Dc_Attr.szlWindowExt.cy = EngMulDiv(14400, dc->GDIInfo->ulVertSize, 254); dc->Dc_Attr.szlWindowExt.cy = EngMulDiv(14400, ((PGDIDEVICE)dc->pPDev)->GDIInfo.ulVertSize, 254);
dc->Dc_Attr.szlViewportExt.cx = dc->GDIInfo->ulHorzRes; dc->Dc_Attr.szlViewportExt.cx = ((PGDIDEVICE)dc->pPDev)->GDIInfo.ulHorzRes;
dc->Dc_Attr.szlViewportExt.cy = -dc->GDIInfo->ulVertRes; dc->Dc_Attr.szlViewportExt.cy = -((PGDIDEVICE)dc->pPDev)->GDIInfo.ulVertRes;
break; break;
case MM_ANISOTROPIC: case MM_ANISOTROPIC:

View file

@ -210,7 +210,7 @@ NtGdiCreateCompatibleDC(HDC hDC)
NewDC->DC_Type = DC_Type; NewDC->DC_Type = DC_Type;
NewDC->PDev = OrigDC->PDev; NewDC->PDev = OrigDC->PDev;
NewDC->GDIInfo = OrigDC->GDIInfo;
NewDC->w.bitsPerPixel = OrigDC->w.bitsPerPixel; NewDC->w.bitsPerPixel = OrigDC->w.bitsPerPixel;
/* DriverName is copied in the AllocDC routine */ /* DriverName is copied in the AllocDC routine */
@ -903,13 +903,13 @@ IntGdiCreateDC(PUNICODE_STRING Driver,
NewDC->DC_Type = DC_TYPE_DIRECT; NewDC->DC_Type = DC_TYPE_DIRECT;
NewDC->IsIC = CreateAsIC; NewDC->IsIC = CreateAsIC;
NewDC->GDIInfo = &PrimarySurface.GDIInfo;
NewDC->PDev = PrimarySurface.PDev; NewDC->PDev = PrimarySurface.PDev;
if(pUMdhpdev) pUMdhpdev = NewDC->PDev; if(pUMdhpdev) pUMdhpdev = NewDC->PDev;
NewDC->pPDev = (PVOID)&PrimarySurface; NewDC->pPDev = (PVOID)&PrimarySurface;
NewDC->w.hBitmap = PrimarySurface.Handle; NewDC->w.hBitmap = PrimarySurface.Handle;
NewDC->w.bitsPerPixel = NewDC->GDIInfo->cBitsPixel * NewDC->GDIInfo->cPlanes; NewDC->w.bitsPerPixel = ((PGDIDEVICE)NewDC->pPDev)->GDIInfo.cBitsPixel *
((PGDIDEVICE)NewDC->pPDev)->GDIInfo.cPlanes;
DPRINT("Bits per pel: %u\n", NewDC->w.bitsPerPixel); DPRINT("Bits per pel: %u\n", NewDC->w.bitsPerPixel);
if (! CreateAsIC) if (! CreateAsIC)
@ -920,8 +920,8 @@ IntGdiCreateDC(PUNICODE_STRING Driver,
DC_UnlockDc( NewDC ); DC_UnlockDc( NewDC );
hVisRgn = NtGdiCreateRectRgn(0, 0, NewDC->GDIInfo->ulHorzRes, hVisRgn = NtGdiCreateRectRgn(0, 0, ((PGDIDEVICE)NewDC->pPDev)->GDIInfo.ulHorzRes,
NewDC->GDIInfo->ulVertRes); ((PGDIDEVICE)NewDC->pPDev)->GDIInfo.ulVertRes);
IntGdiSelectVisRgn(hNewDC, hVisRgn); IntGdiSelectVisRgn(hNewDC, hVisRgn);
NtGdiDeleteObject(hVisRgn); NtGdiDeleteObject(hVisRgn);
@ -1536,43 +1536,43 @@ IntGdiGetDeviceCaps(PDC dc, INT Index)
switch (Index) switch (Index)
{ {
case DRIVERVERSION: case DRIVERVERSION:
ret = dc->GDIInfo->ulVersion; ret = ((PGDIDEVICE)dc->pPDev)->GDIInfo.ulVersion;
break; break;
case TECHNOLOGY: case TECHNOLOGY:
ret = dc->GDIInfo->ulTechnology; ret = ((PGDIDEVICE)dc->pPDev)->GDIInfo.ulTechnology;
break; break;
case HORZSIZE: case HORZSIZE:
ret = dc->GDIInfo->ulHorzSize; ret = ((PGDIDEVICE)dc->pPDev)->GDIInfo.ulHorzSize;
break; break;
case VERTSIZE: case VERTSIZE:
ret = dc->GDIInfo->ulVertSize; ret = ((PGDIDEVICE)dc->pPDev)->GDIInfo.ulVertSize;
break; break;
case HORZRES: case HORZRES:
ret = dc->GDIInfo->ulHorzRes; ret = ((PGDIDEVICE)dc->pPDev)->GDIInfo.ulHorzRes;
break; break;
case VERTRES: case VERTRES:
ret = dc->GDIInfo->ulVertRes; ret = ((PGDIDEVICE)dc->pPDev)->GDIInfo.ulVertRes;
break; break;
case LOGPIXELSX: case LOGPIXELSX:
ret = dc->GDIInfo->ulLogPixelsX; ret = ((PGDIDEVICE)dc->pPDev)->GDIInfo.ulLogPixelsX;
break; break;
case LOGPIXELSY: case LOGPIXELSY:
ret = dc->GDIInfo->ulLogPixelsY; ret = ((PGDIDEVICE)dc->pPDev)->GDIInfo.ulLogPixelsY;
break; break;
case BITSPIXEL: case BITSPIXEL:
ret = dc->GDIInfo->cBitsPixel; ret = ((PGDIDEVICE)dc->pPDev)->GDIInfo.cBitsPixel;
break; break;
case PLANES: case PLANES:
ret = dc->GDIInfo->cPlanes; ret = ((PGDIDEVICE)dc->pPDev)->GDIInfo.cPlanes;
break; break;
case NUMBRUSHES: case NUMBRUSHES:
@ -1588,19 +1588,19 @@ IntGdiGetDeviceCaps(PDC dc, INT Index)
break; break;
case NUMCOLORS: case NUMCOLORS:
ret = dc->GDIInfo->ulNumColors; ret = ((PGDIDEVICE)dc->pPDev)->GDIInfo.ulNumColors;
break; break;
case ASPECTX: case ASPECTX:
ret = dc->GDIInfo->ulAspectX; ret = ((PGDIDEVICE)dc->pPDev)->GDIInfo.ulAspectX;
break; break;
case ASPECTY: case ASPECTY:
ret = dc->GDIInfo->ulAspectY; ret = ((PGDIDEVICE)dc->pPDev)->GDIInfo.ulAspectY;
break; break;
case ASPECTXY: case ASPECTXY:
ret = dc->GDIInfo->ulAspectXY; ret = ((PGDIDEVICE)dc->pPDev)->GDIInfo.ulAspectXY;
break; break;
case PDEVICESIZE: case PDEVICESIZE:
@ -1612,7 +1612,7 @@ IntGdiGetDeviceCaps(PDC dc, INT Index)
break; break;
case SIZEPALETTE: case SIZEPALETTE:
ret = dc->GDIInfo->ulNumPalReg; /* FIXME not sure */ ret = ((PGDIDEVICE)dc->pPDev)->GDIInfo.ulNumPalReg; /* FIXME not sure */
break; break;
case NUMRESERVED: case NUMRESERVED:
@ -1694,7 +1694,7 @@ IntGdiGetDeviceCaps(PDC dc, INT Index)
break; break;
case RASTERCAPS: case RASTERCAPS:
ret = dc->GDIInfo->flRaster; ret = ((PGDIDEVICE)dc->pPDev)->GDIInfo.flRaster;
break; break;
case CURVECAPS: case CURVECAPS:
@ -1710,7 +1710,7 @@ IntGdiGetDeviceCaps(PDC dc, INT Index)
break; break;
case TEXTCAPS: case TEXTCAPS:
ret = dc->GDIInfo->flTextCaps; ret = ((PGDIDEVICE)dc->pPDev)->GDIInfo.flTextCaps;
break; break;
default: default: