- Removed NtGdiSetMapMode from w32ksvc.db and updated ntgdibad.h.

- Moved NtGdiSetMapMode to an internal function.
- Changed NtGdiPaintRgn and added IntdiPaintRgn.
- Cleaned up win32k path.c.
- Connected the gdi32 parts.


svn path=/trunk/; revision=28446
This commit is contained in:
James Tabor 2007-08-21 09:28:51 +00:00
parent c27ffbed0c
commit 1deecb4b19
10 changed files with 69 additions and 54 deletions

View file

@ -555,7 +555,7 @@ SetICMProfileW@8
SetLayout@8
SetLayoutWidth@12
SetMagicColors@12
SetMapMode@8=NtGdiSetMapMode@8
SetMapMode@8
SetMapperFlags@8
SetMetaFileBitsEx@8
SetMetaRgn@4

View file

@ -932,3 +932,18 @@ SelectPalette(
{
return NtUserSelectPalette(hDC, hPal, bForceBackground);
}
/*
* @implemented
*/
INT
STDCALL
SetMapMode(
HDC hdc,
INT Mode
)
{
return GetAndSetDCDWord( hdc, GdiGetSetMapMode, Mode, 0, 0, 0 );
}

View file

@ -642,14 +642,6 @@ STDCALL
NtGdiSetICMProfile(HDC hDC,
LPWSTR Filename);
/* Needs to be done in user-mode, using shared GDI Object Attributes. */
int
STDCALL
NtGdiSetMapMode (
HDC hDC,
int MapMode
);
/* Needs to be done in user-mode, using shared GDI Object Attributes. */
DWORD
STDCALL

View file

@ -21,6 +21,8 @@ VOID
FASTCALL
IntLPtoDP ( PDC dc, LPPOINT Points, INT Count );
int STDCALL IntGdiSetMapMode(PDC, int);
BOOL
FASTCALL
IntGdiModifyWorldTransform(PDC pDc,

View file

@ -17,5 +17,7 @@ typedef struct _ROSRGNDATA {
HRGN FASTCALL RGNDATA_AllocRgn(INT n);
BOOL INTERNAL_CALL RGNDATA_Cleanup(PVOID ObjectBody);
BOOL FASTCALL IntGdiPaintRgn(PDC, HRGN );
#endif

View file

@ -454,6 +454,7 @@ NtGdiModifyWorldTransform(HDC hDC,
}
_SEH_END;
DCU_UpdateUserXForms(dc, WORLD_TO_PAGE_IDENTITY|DEVICE_TO_WORLD_INVALID|WORLD_XFORM_CHANGED );
DC_UnlockDc(dc);
return Ret;
}
@ -621,18 +622,10 @@ NtGdiSetGraphicsMode(HDC hDC,
int
STDCALL
NtGdiSetMapMode(HDC hDC,
IntGdiSetMapMode(PDC dc,
int MapMode)
{
int PrevMapMode;
PDC dc;
dc = DC_LockDc(hDC);
if (!dc)
{
SetLastWin32Error(ERROR_INVALID_HANDLE);
return 0;
}
PrevMapMode = dc->Dc_Attr.iMapMode;
@ -693,8 +686,6 @@ NtGdiSetMapMode(HDC hDC,
DCU_UpdateUserXForms(dc, WORLD_TO_PAGE_IDENTITY|DEVICE_TO_WORLD_INVALID|WORLD_XFORM_CHANGED );
}
DC_UnlockDc(dc);
return PrevMapMode;
}

View file

@ -2269,8 +2269,7 @@ NtGdiGetAndSetDCDword(
case GdiGetSetMapperFlagsInternal:
break;
case GdiGetSetMapMode:
SafeResult = dc->Dc_Attr.iMapMode;
dc->Dc_Attr.iMapMode = dwIn;
SafeResult = IntGdiSetMapMode( dc, dwIn);
break;
case GdiGetSetArcDirection:
if (dwIn != AD_COUNTERCLOCKWISE && dwIn != AD_CLOCKWISE)

View file

@ -412,11 +412,11 @@ PATH_FillPath( PDC dc, GdiPath *pPath )
*/
/* Save the information about the old mapping mode */
mapMode = NtGdiGetMapMode( dc->hSelf );
NtGdiGetViewportExtEx( dc->hSelf, &ptViewportExt );
NtGdiGetViewportOrgEx( dc->hSelf, &ptViewportOrg );
NtGdiGetWindowExtEx( dc->hSelf, &ptWindowExt );
NtGdiGetWindowOrgEx( dc->hSelf, &ptWindowOrg );
mapMode = dc->Dc_Attr.iMapMode;
ptViewportExt = dc->Dc_Attr.szlViewportExt;
ptViewportOrg = dc->Dc_Attr.ptlViewportOrg;
ptWindowExt = dc->Dc_Attr.szlWindowExt;
ptWindowOrg = dc->Dc_Attr.ptlWindowOrg;
/* Save world transform
* NB: The Windows documentation on world transforms would lead one to
@ -424,32 +424,36 @@ PATH_FillPath( PDC dc, GdiPath *pPath )
* tests show that resetting the graphics mode to GM_COMPATIBLE does
* not reset the world transform.
*/
NtGdiGetTransform( dc->hSelf, GdiWorldSpaceToPageSpace, &xform );
xform = dc->w.xformWorld2Wnd;
/* Set MM_TEXT */
NtGdiSetMapMode( dc->hSelf, MM_TEXT );
NtGdiSetViewportOrgEx( dc->hSelf, 0, 0, NULL );
NtGdiSetWindowOrgEx( dc->hSelf, 0, 0, NULL );
graphicsMode = NtGdiGetGraphicsMode( dc->hSelf );
NtGdiSetGraphicsMode( dc->hSelf, GM_ADVANCED );
NtGdiModifyWorldTransform( dc->hSelf, &xform, MWT_IDENTITY );
NtGdiSetGraphicsMode( dc->hSelf, graphicsMode );
IntGdiSetMapMode( dc, MM_TEXT );
dc->Dc_Attr.ptlViewportOrg.x = 0;
dc->Dc_Attr.ptlViewportOrg.y = 0;
dc->Dc_Attr.ptlWindowOrg.x = 0;
dc->Dc_Attr.ptlWindowOrg.y = 0;
graphicsMode = dc->Dc_Attr.iGraphicsMode;
dc->Dc_Attr.iGraphicsMode = GM_ADVANCED;
IntGdiModifyWorldTransform( dc, &xform, MWT_IDENTITY );
dc->Dc_Attr.iGraphicsMode = graphicsMode;
/* Paint the region */
NtGdiPaintRgn( dc->hSelf, hrgn );
IntGdiPaintRgn( dc, hrgn );
NtGdiDeleteObject( hrgn );
/* Restore the old mapping mode */
NtGdiSetMapMode( dc->hSelf, mapMode );
NtGdiSetViewportExtEx( dc->hSelf, ptViewportExt.cx, ptViewportExt.cy, NULL );
NtGdiSetViewportOrgEx( dc->hSelf, ptViewportOrg.x, ptViewportOrg.y, NULL );
NtGdiSetWindowExtEx( dc->hSelf, ptWindowExt.cx, ptWindowExt.cy, NULL );
NtGdiSetWindowOrgEx( dc->hSelf, ptWindowOrg.x, ptWindowOrg.y, NULL );
IntGdiSetMapMode( dc, mapMode );
dc->Dc_Attr.szlViewportExt = ptViewportExt;
dc->Dc_Attr.ptlViewportOrg = ptViewportOrg;
dc->Dc_Attr.szlWindowExt = ptWindowExt;
dc->Dc_Attr.ptlWindowOrg = ptWindowOrg;
/* Go to GM_ADVANCED temporarily to restore the world transform */
graphicsMode = NtGdiGetGraphicsMode( dc->hSelf );
NtGdiSetGraphicsMode( dc->hSelf, GM_ADVANCED );
NtGdiModifyWorldTransform( dc->hSelf, &xform, MWT_MAX+1 );
NtGdiSetGraphicsMode( dc->hSelf, graphicsMode );
graphicsMode = dc->Dc_Attr.iGraphicsMode;
dc->Dc_Attr.iGraphicsMode = GM_ADVANCED;
IntGdiModifyWorldTransform( dc, &xform, MWT_MAX+1 );
dc->Dc_Attr.iGraphicsMode = graphicsMode;
// DCU_UpdateUserXForms(dc, WORLD_TO_PAGE_IDENTITY|DEVICE_TO_WORLD_INVALID|WORLD_XFORM_CHANGED );
return TRUE;
}
return FALSE;
@ -1623,7 +1627,7 @@ end:
IntDPtoLP(dc, &pt, 1);
IntGdiMoveToEx(dc, pt.x, pt.y, NULL);
}
DCU_UpdateUserXForms(dc, WORLD_TO_PAGE_IDENTITY|DEVICE_TO_WORLD_INVALID|WORLD_XFORM_CHANGED );
DPRINT("Leave %s, ret=%d\n", __FUNCTION__, ret);
return ret;
}

View file

@ -2524,13 +2524,11 @@ NtGdiOffsetRgn(HRGN hRgn,
}
BOOL
STDCALL
NtGdiPaintRgn(HDC hDC,
HRGN hRgn)
FASTCALL
IntGdiPaintRgn(PDC dc, HRGN hRgn)
{
//RECT box;
HRGN tmpVisRgn; //, prevVisRgn;
DC *dc = DC_LockDc(hDC);
HRGN tmpVisRgn; //, prevVisRgn;
PROSRGNDATA visrgn;
CLIPOBJ* ClipRegion;
BOOL bRet = FALSE;
@ -2595,10 +2593,23 @@ NtGdiPaintRgn(HDC hDC,
NtGdiDeleteObject( tmpVisRgn );
// Fill the region
DC_UnlockDc( dc );
return TRUE;
}
BOOL
STDCALL
NtGdiPaintRgn(HDC hDC,
HRGN hRgn)
{
DC *dc = DC_LockDc(hDC);
BOOL Ret = IntGdiPaintRgn(dc, hRgn);
DC_UnlockDc( dc );
return Ret;
}
BOOL
STDCALL
NtGdiPtInRegion(HRGN hRgn,

View file

@ -698,7 +698,6 @@ NtGdiSetDIBits 7
NtGdiSetEnhMetaFileBits 2
NtGdiSetGraphicsMode 2
NtGdiSetICMProfile 2
NtGdiSetMapMode 2
NtGdiSetMapperFlags 2
NtGdiSetPaletteEntries 4
NtGdiSetPixelV 4