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)
{
*
*/
int
-STDCALL
+WINAPI
GetDeviceCaps(HDC hDC,
int i)
{
}
else
{
- // HAX!!!!
- // Due to winlogon process/thread mapping issues we have this hax!
- //
- return NtGdiGetDeviceCaps(hDC,i);
-
if (!GdiGetHandleUserData((HGDIOBJ) hDC, GDI_OBJECT_TYPE_DC, (PVOID) &Dc_Attr))
return 0;
if (!(Dc_Attr->ulDirty_ & DC_PRIMARY_DISPLAY) )
* @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);