HANDLE hspool = NULL;
+ if ( !ghSpooler && !LoadTheSpoolerDrv())
+ {
+ DPRINT1("WinSpooler.Drv Did not load!\n");
+ }
+ else
+ {
+ DPRINT("WinSpooler.Drv Loaded! hMod -> 0x%x\n", ghSpooler);
+ }
+
if ((!lpwszDevice) && (!lpwszDriver))
{
Default = FALSE; // Ask Win32k to set Default device.
}
else
{
- if (lpwszDevice) // First
+ if ((lpwszDevice) && (wcslen(lpwszDevice) != 0)) // First
{
if (!_wcsnicmp(lpwszDevice, L"\\\\.\\DISPLAY",11)) Display = TRUE;
RtlInitUnicodeString(&Device, lpwszDevice);
(PDEVMODEW) lpInitData,
(lpwszOutput ? &Output : NULL),
iType, // DCW 0 and ICW 1.
+ Display,
hspool,
(PVOID) NULL, // NULL for now.
(PVOID) &UMdhpdev );
* @implemented
*/
HDC
-STDCALL
+WINAPI
CreateCompatibleDC ( HDC hdc)
{
HDC rhDC;
* @implemented
*/
HDC
-STDCALL
+WINAPI
CreateDCA (
LPCSTR lpszDriver,
LPCSTR lpszDevice,
* @implemented
*/
HDC
-STDCALL
+WINAPI
CreateDCW (
LPCWSTR lpwszDriver,
LPCWSTR lpwszDevice,
* @implemented
*/
HDC
-STDCALL
+WINAPI
CreateICW(
LPCWSTR lpszDriver,
LPCWSTR lpszDevice,
* @implemented
*/
HDC
-STDCALL
+WINAPI
CreateICA(
LPCSTR lpszDriver,
LPCSTR lpszDevice,
* @implemented
*/
BOOL
-STDCALL
+WINAPI
DeleteDC(HDC hDC)
{
BOOL Ret = TRUE;
-#if 0
- PDC_ATTR Dc_Attr;
- PLDC pLDC;
+ PLDC pLDC = NULL;
+ HANDLE hPrinter = NULL;
+ ULONG hType = GDI_HANDLE_GET_TYPE(hDC);
- if (!GdiGetHandleUserData((HGDIOBJ) hDC, GDI_OBJECT_TYPE_DC, (PVOID) &Dc_Attr)) return FALSE;
+ pLDC = GdiGetLDC(hDC);
- if ( Dc_Attr )
- {
- pLDC = Dc_Attr->pvLDC;
+ if (hType != GDILoObjType_LO_DC_TYPE)
+ {
+
+ if ( !pLDC || hType == GDILoObjType_LO_METADC16_TYPE)
+ {
+ SetLastError(ERROR_INVALID_HANDLE);
+ return FALSE;
+ }
+ if (pLDC->Flags & LDC_INIT_DOCUMENT) AbortDoc(hDC);
+ if (pLDC->hPrinter)
+ {
+ DocumentEventEx(NULL, pLDC->hPrinter, hDC, DOCUMENTEVENT_DELETEDC, 0, NULL, 0, NULL);
+ hPrinter = pLDC->hPrinter;
+ pLDC->hPrinter = NULL;
+ }
+ }
- if ( pLDC )
- {
- DPRINT1("Delete the Local DC structure\n");
- LocalFree( pLDC );
- }
- }
-#endif
Ret = NtGdiDeleteObjectApp(hDC);
+ if (Ret && pLDC )
+ {
+ DPRINT1("Delete the Local DC structure\n");
+ LocalFree( pLDC );
+ }
+ if (hPrinter) fpClosePrinter(hPrinter);
return Ret;
}
* @implemented
*/
BOOL
-STDCALL
+WINAPI
DeleteObject(HGDIOBJ hObject)
{
UINT Type = 0;
}
INT
-STDCALL
+WINAPI
GetArcDirection( HDC hdc )
{
return GetDCDWord( hdc, GdiGetArcDirection, 0);
INT
-STDCALL
+WINAPI
SetArcDirection( HDC hdc, INT nDirection )
{
return GetAndSetDCDWord( hdc, GdiGetSetArcDirection, nDirection, 0, 0, 0 );
HGDIOBJ
-STDCALL
+WINAPI
GetDCObject( HDC hDC, INT iType)
{
if((iType == GDI_OBJECT_TYPE_BRUSH) ||
*
*/
HGDIOBJ
-STDCALL
+WINAPI
GetCurrentObject(HDC hdc,
UINT uObjectType)
{
return GetDCObject(hdc, uObjectType);
}
+/*
+ * @implemented
+ *
+ */
+int
+WINAPI
+GetDeviceCaps(HDC hDC,
+ int i)
+{
+ PDC_ATTR Dc_Attr;
+ PLDC pLDC;
+ PDEVCAPS pDevCaps = GdiDevCaps; // Primary display device capabilities.
+ DPRINT("Device CAPS1\n");
+
+ if (GDI_HANDLE_GET_TYPE(hDC) != GDI_OBJECT_TYPE_DC)
+ {
+ if (GDI_HANDLE_GET_TYPE(hDC) == GDI_OBJECT_TYPE_METADC)
+ {
+ if ( i == TECHNOLOGY) return DT_METAFILE;
+ return 0;
+ }
+ else
+ {
+ pLDC = GdiGetLDC(hDC);
+ if ( !pLDC )
+ {
+ SetLastError(ERROR_INVALID_HANDLE);
+ return 0;
+ }
+ if (!(pLDC->Flags & LDC_DEVCAPS))
+ {
+ if (!NtGdiGetDeviceCapsAll(hDC, &pLDC->DevCaps))
+ SetLastError(ERROR_INVALID_PARAMETER);
+ pLDC->Flags |= LDC_DEVCAPS;
+ }
+ pDevCaps = &pLDC->DevCaps;
+ }
+ }
+ else
+ {
+ if (!GdiGetHandleUserData((HGDIOBJ) hDC, GDI_OBJECT_TYPE_DC, (PVOID) &Dc_Attr))
+ return 0;
+ if (!(Dc_Attr->ulDirty_ & DC_PRIMARY_DISPLAY) )
+ return NtGdiGetDeviceCaps(hDC,i);
+ }
+ DPRINT("Device CAPS2\n");
+
+ switch (i)
+ {
+ case DRIVERVERSION:
+ return pDevCaps->ulVersion;
+
+ case TECHNOLOGY:
+ return pDevCaps->ulTechnology;
+
+ case HORZSIZE:
+ return pDevCaps->ulHorzSize;
+
+ case VERTSIZE:
+ return pDevCaps->ulVertSize;
+
+ case HORZRES:
+ return pDevCaps->ulHorzRes;
+
+ case VERTRES:
+ return pDevCaps->ulVertRes;
+
+ case LOGPIXELSX:
+ return pDevCaps->ulLogPixelsX;
+
+ case LOGPIXELSY:
+ return pDevCaps->ulLogPixelsY;
+
+ case BITSPIXEL:
+ return pDevCaps->ulBitsPixel;
+
+ case PLANES:
+ return pDevCaps->ulPlanes;
+
+ case NUMBRUSHES:
+ return -1;
+
+ case NUMPENS:
+ return pDevCaps->ulNumPens;
+
+ case NUMFONTS:
+ return pDevCaps->ulNumFonts;
+
+ case NUMCOLORS:
+ return pDevCaps->ulNumColors;
+
+ case ASPECTX:
+ return pDevCaps->ulAspectX;
+
+ case ASPECTY:
+ return pDevCaps->ulAspectY;
+
+ case ASPECTXY:
+ return pDevCaps->ulAspectXY;
+
+ case CLIPCAPS:
+ return CP_RECTANGLE;
+
+ case SIZEPALETTE:
+ return pDevCaps->ulSizePalette;
+
+ case NUMRESERVED:
+ return 20;
+
+ case COLORRES:
+ return pDevCaps->ulColorRes;
+
+ case DESKTOPVERTRES:
+ return pDevCaps->ulVertRes;
+
+ case DESKTOPHORZRES:
+ return pDevCaps->ulHorzRes;
+
+ case BLTALIGNMENT:
+ return pDevCaps->ulBltAlignment;
+
+ case SHADEBLENDCAPS:
+ return pDevCaps->ulShadeBlend;
+
+ case COLORMGMTCAPS:
+ return pDevCaps->ulColorMgmtCaps;
+
+ case PHYSICALWIDTH:
+ return pDevCaps->ulPhysicalWidth;
+
+ case PHYSICALHEIGHT:
+ return pDevCaps->ulPhysicalHeight;
+
+ case PHYSICALOFFSETX:
+ return pDevCaps->ulPhysicalOffsetX;
+
+ case PHYSICALOFFSETY:
+ return pDevCaps->ulPhysicalOffsetY;
+
+ case VREFRESH:
+ return pDevCaps->ulVRefresh;
+
+ case RASTERCAPS:
+ return pDevCaps->ulRasterCaps;
+
+ case CURVECAPS:
+ return (CC_CIRCLES | CC_PIE | CC_CHORD | CC_ELLIPSES | CC_WIDE |
+ CC_STYLED | CC_WIDESTYLED | CC_INTERIORS | CC_ROUNDRECT);
+
+ case LINECAPS:
+ return (LC_POLYLINE | LC_MARKER | LC_POLYMARKER | LC_WIDE |
+ LC_STYLED | LC_WIDESTYLED | LC_INTERIORS);
+
+ case POLYGONALCAPS:
+ return (PC_POLYGON | PC_RECTANGLE | PC_WINDPOLYGON | PC_SCANLINE |
+ PC_WIDE | PC_STYLED | PC_WIDESTYLED | PC_INTERIORS);
+
+ case TEXTCAPS:
+ return pDevCaps->ulTextCaps;
+
+ case PDEVICESIZE:
+ case SCALINGFACTORX:
+ case SCALINGFACTORY:
+ default:
+ return 0;
+ }
+ return 0;
+}
/*
* @implemented
*/
DWORD
-STDCALL
+WINAPI
GetRelAbs(
HDC hdc,
DWORD dwIgnore
/*
* @implemented
*/
-DWORD
-STDCALL
+INT
+WINAPI
SetRelAbs(
HDC hdc,
INT Mode
* @implemented
*/
DWORD
-STDCALL
+WINAPI
GetAndSetDCDWord( HDC hDC, INT u, DWORD dwIn, DWORD Unk1, DWORD Unk2, DWORD Unk3 )
{
BOOL Ret = TRUE;
* @implemented
*/
DWORD
-STDCALL
+WINAPI
GetDCDWord( HDC hDC, INT u, DWORD Result )
{
BOOL Ret = NtGdiGetDCDword( hDC, u, (DWORD*) &u );
* @implemented
*/
BOOL
-STDCALL
+WINAPI
GetAspectRatioFilterEx(
HDC hdc,
LPSIZE lpAspectRatio
* @implemented
*/
BOOL
-STDCALL
+WINAPI
GetDCOrgEx(
HDC hdc,
LPPOINT lpPoint
* @implemented
*/
LONG
-STDCALL
+WINAPI
GetDCOrg(
HDC hdc
)
* @implemented
*/
int
-STDCALL
+WINAPI
GetObjectA(HGDIOBJ hGdiObj, int cbSize, LPVOID lpBuffer)
{
ENUMLOGFONTEXDVW LogFont;
DWORD dwType;
INT Result = 0;
- dwType = GDI_HANDLE_GET_TYPE(hGdiObj);;
+ dwType = GDI_HANDLE_GET_TYPE(hGdiObj);
if(dwType == GDI_OBJECT_TYPE_COLORSPACE) //Stays here, processes struct A
{
* @implemented
*/
int
-STDCALL
+WINAPI
GetObjectW(HGDIOBJ hGdiObj, int cbSize, LPVOID lpBuffer)
{
DWORD dwType = GDI_HANDLE_GET_TYPE(hGdiObj);
}
// Poorly written apps are not ReactOS problem!
// We fix it here if the size is larger than the default size.
- if( cbSize > sizeof(ENUMLOGFONTEXDVW) ) cbSize = sizeof(ENUMLOGFONTEXDVW);
+ if( cbSize > (int)sizeof(ENUMLOGFONTEXDVW) ) cbSize = sizeof(ENUMLOGFONTEXDVW);
Result = NtGdiExtGetObjectW(hGdiObj, cbSize, lpBuffer); // Should handle the copy.
* @implemented
*/
COLORREF
-STDCALL
+WINAPI
GetDCBrushColor(
HDC hdc
)
PDC_ATTR Dc_Attr;
if (!GdiGetHandleUserData((HGDIOBJ) hdc, GDI_OBJECT_TYPE_DC, (PVOID) &Dc_Attr)) return CLR_INVALID;
- return (COLORREF) Dc_Attr->ulPenClr;
+ return (COLORREF) Dc_Attr->ulBrushClr;
}
/*
* @implemented
*/
COLORREF
-STDCALL
+WINAPI
GetDCPenColor(
HDC hdc
)
* @implemented
*/
COLORREF
-STDCALL
+WINAPI
SetDCBrushColor(
HDC hdc,
COLORREF crColor
* @implemented
*/
COLORREF
-STDCALL
+WINAPI
SetDCPenColor(
HDC hdc,
COLORREF crColor
*
*/
COLORREF
-STDCALL
+WINAPI
GetBkColor(HDC hdc)
{
PDC_ATTR Dc_Attr;
* @implemented
*/
COLORREF
-STDCALL
+WINAPI
SetBkColor(
HDC hdc,
COLORREF crColor
if ( Dc_Attr->crBackgroundClr != crColor )
{
- Dc_Attr->ulDirty_ |= DIRTY_LINE;
+ Dc_Attr->ulDirty_ |= (DIRTY_BACKGROUND|DIRTY_LINE|DIRTY_FILL);
Dc_Attr->crBackgroundClr = crColor;
}
return OldColor;
*
*/
int
-STDCALL
+WINAPI
GetBkMode(HDC hdc)
{
PDC_ATTR Dc_Attr;
*
*/
int
-STDCALL
+WINAPI
SetBkMode(HDC hdc,
int iBkMode)
{
*
*/
int
-STDCALL
+WINAPI
GetPolyFillMode(HDC hdc)
{
PDC_ATTR Dc_Attr;
* @unimplemented
*/
int
-STDCALL
+WINAPI
SetPolyFillMode(HDC hdc,
int iPolyFillMode)
{
*
*/
int
-STDCALL
+WINAPI
GetGraphicsMode(HDC hdc)
{
PDC_ATTR Dc_Attr;
* @unimplemented
*/
int
-STDCALL
+WINAPI
SetGraphicsMode(HDC hdc,
int iMode)
{
* @implemented
*/
HDC
-STDCALL
+WINAPI
ResetDCW(
HDC hdc,
CONST DEVMODEW *lpInitData
* @implemented
*/
HDC
-STDCALL
+WINAPI
ResetDCA(
HDC hdc,
CONST DEVMODEA *lpInitData
}
-/*
- * @implemented
- */
-int
-STDCALL
-StartDocW(
- HDC hdc,
- CONST DOCINFOW *a1
- )
-{
- return NtGdiStartDoc ( hdc, (DOCINFOW *)a1, NULL, 0);
-}
-
-
/*
* @implemented
*/
DWORD
-STDCALL
+WINAPI
GetObjectType(
HGDIOBJ h
)
}
/* FIXME: include correct header */
-HPALETTE STDCALL NtUserSelectPalette(HDC hDC,
+HPALETTE WINAPI NtUserSelectPalette(HDC hDC,
HPALETTE hpal,
BOOL ForceBackground);
HPALETTE
-STDCALL
+WINAPI
SelectPalette(
HDC hDC,
HPALETTE hPal,
*
*/
int
-STDCALL
+WINAPI
GetMapMode(HDC hdc)
{
PDC_ATTR Dc_Attr;
* @implemented
*/
INT
-STDCALL
+WINAPI
SetMapMode(
HDC hdc,
INT Mode
*
*/
int
-STDCALL
+WINAPI
GetStretchBltMode(HDC hdc)
{
PDC_ATTR Dc_Attr;
* @implemented
*/
int
-STDCALL
+WINAPI
SetStretchBltMode(HDC hdc, int iStretchMode)
{
INT oSMode;
* @implemented
*/
HFONT
-STDCALL
+WINAPI
GetHFONT(HDC hdc)
{
PDC_ATTR Dc_Attr;
*
*/
HGDIOBJ
-STDCALL
+WINAPI
SelectObject(HDC hDC,
HGDIOBJ hGdiObj)
{
PDC_ATTR pDc_Attr;
-// HGDIOBJ hOldObj = NULL;
-// PTEB pTeb;
+ HGDIOBJ hOldObj = NULL;
+ UINT uType;
if(!GdiGetHandleUserData(hDC, GDI_OBJECT_TYPE_DC, (PVOID)&pDc_Attr))
{
return NULL;
}
- UINT uType = GDI_HANDLE_GET_TYPE(hGdiObj);
+ uType = GDI_HANDLE_GET_TYPE(hGdiObj);
switch (uType)
{
return NtGdiSelectBitmap(hDC, hGdiObj);
case GDI_OBJECT_TYPE_BRUSH:
-#if 0 // enable this when support is ready in win32k
hOldObj = pDc_Attr->hbrush;
pDc_Attr->ulDirty_ |= DC_BRUSH_DIRTY;
pDc_Attr->hbrush = hGdiObj;
return hOldObj;
-#endif
- return NtGdiSelectBrush(hDC, hGdiObj);
+// return NtGdiSelectBrush(hDC, hGdiObj);
case GDI_OBJECT_TYPE_PEN:
case GDI_OBJECT_TYPE_EXTPEN:
-#if 0 // enable this when support is ready in win32k
hOldObj = pDc_Attr->hpen;
pDc_Attr->ulDirty_ |= DC_PEN_DIRTY;
pDc_Attr->hpen = hGdiObj;
return hOldObj;
-#endif
- return NtGdiSelectPen(hDC, hGdiObj);
+// return NtGdiSelectPen(hDC, hGdiObj);
case GDI_OBJECT_TYPE_FONT:
-#if 0
- pTeb = NtCurrentTeb();
- if (((pTeb->GdiTebBatch.HDC == 0) ||
- (pTeb->GdiTebBatch.HDC == (ULONG)hDC)) &&
- ((pTeb->GdiTebBatch.Offset + sizeof(GDIBSOBJECT)) <= GDIBATCHBUFSIZE) &&
- (!(pDc_Attr->ulDirty_ & DC_DIBSECTION)))
+ hOldObj = pDc_Attr->hlfntNew;
+ if (hOldObj == hGdiObj) return hOldObj;
+
+ pDc_Attr->ulDirty_ &= ~SLOW_WIDTHS;
+ pDc_Attr->ulDirty_ |= DIRTY_CHARSET;
+ pDc_Attr->hlfntNew = hGdiObj;
+
+ if (!(pDc_Attr->ulDirty_ & DC_DIBSECTION))
{
- PGDIBSOBJECT pgO = (PGDIBSOBJECT)(&pTeb->GdiTebBatch.Buffer[0] +
- pTeb->GdiTebBatch.Offset);
- pgO->gbHdr.Cmd = GdiBCSelObj;
- pgO->gbHdr.Size = sizeof(GDIBSOBJECT);
- pgO->hgdiobj = hGdiObj;
-
- pTeb->GdiTebBatch.Offset += sizeof(GDIBSOBJECT);
- pTeb->GdiTebBatch.HDC = (ULONG)hDC;
- pTeb->GdiBatchCount++;
- if (pTeb->GdiBatchCount >= GDI_BatchLimit) NtGdiFlush();
- return pDc_Attr->hlfntNew;
+ PGDIBSOBJECT pgO;
+
+ pgO = GdiAllocBatchCommand(hDC, GdiBCSelObj);
+ if (pgO)
+ {
+ pgO->hgdiobj = hGdiObj;
+ return hOldObj;
+ }
}
-#endif
+
// default for select object font
return NtGdiSelectFont(hDC, hGdiObj);
+
#if 0
case GDI_OBJECT_TYPE_METADC:
return MFDRV_SelectObject( hDC, hGdiObj);