Move Window and Viewport Ext and Org to Dc_Attr. Tested it with qemu.

svn path=/trunk/; revision=28184
This commit is contained in:
James Tabor 2007-08-06 05:13:47 +00:00
parent 556e9b7da8
commit 2619101eee
6 changed files with 122 additions and 128 deletions

View file

@ -89,15 +89,6 @@ typedef struct _DC
UNICODE_STRING DriverName;
HANDLE DeviceDriver;
INT wndOrgX; /* Window origin */
INT wndOrgY;
INT wndExtX; /* Window extent */
INT wndExtY;
INT vportOrgX; /* Viewport origin */
INT vportOrgY;
INT vportExtX; /* Viewport extent */
INT vportExtY;
CLIPOBJ *CombinedClip;
XLATEOBJ *XlateBrush;

View file

@ -80,24 +80,24 @@ static __inline void INTERNAL_LPTODP(DC *dc, LPPOINT point)
#define MulDiv( x, y, z ) EngMulDiv( x, y, z )
#define XDPTOLP(dc,x) \
(MulDiv(((x)-(dc)->vportOrgX), (dc)->wndExtX, (dc)->vportExtX) + (dc)->wndOrgX)
#define YDPTOLP(dc,y) \
(MulDiv(((y)-(dc)->vportOrgY), (dc)->wndExtY, (dc)->vportExtY) + (dc)->wndOrgY)
#define XLPTODP(dc,x) \
(MulDiv(((x)-(dc)->wndOrgX), (dc)->vportExtX, (dc)->wndExtX) + (dc)->vportOrgX)
#define YLPTODP(dc,y) \
(MulDiv(((y)-(dc)->wndOrgY), (dc)->vportExtY, (dc)->wndExtY) + (dc)->vportOrgY)
#define XDPTOLP(dc,tx) \
(MulDiv(((tx)-(dc)->Dc_Attr.ptlViewportOrg.x), (dc)->Dc_Attr.szlWindowExt.cx, (dc)->Dc_Attr.szlViewportExt.cx) + (dc)->Dc_Attr.ptlWindowOrg.x)
#define YDPTOLP(dc,ty) \
(MulDiv(((ty)-(dc)->Dc_Attr.ptlViewportOrg.y), (dc)->Dc_Attr.szlWindowExt.cy, (dc)->Dc_Attr.szlViewportExt.cy) + (dc)->Dc_Attr.ptlWindowOrg.y)
#define XLPTODP(dc,tx) \
(MulDiv(((tx)-(dc)->Dc_Attr.ptlWindowOrg.x), (dc)->Dc_Attr.szlViewportExt.cx, (dc)->Dc_Attr.szlWindowExt.cx) + (dc)->Dc_Attr.ptlViewportOrg.x)
#define YLPTODP(dc,ty) \
(MulDiv(((ty)-(dc)->Dc_Attr.ptlWindowOrg.y), (dc)->Dc_Attr.szlViewportExt.cy, (dc)->Dc_Attr.szlWindowExt.cy) + (dc)->Dc_Attr.ptlViewportOrg.y)
/* Device <-> logical size conversion */
#define XDSTOLS(dc,x) \
MulDiv((x), (dc)->wndExtX, (dc)->vportExtX)
#define YDSTOLS(dc,y) \
MulDiv((y), (dc)->wndExtY, (dc)->vportExtY)
#define XLSTODS(dc,x) \
MulDiv((x), (dc)->vportExtX, (dc)->wndExtX)
#define YLSTODS(dc,y) \
MulDiv((y), (dc)->vportExtY, (dc)->wndExtY)
#define XDSTOLS(dc,tx) \
MulDiv((tx), (dc)->Dc_Attr.szlWindowExt.cx, (dc)->Dc_Attr.szlViewportExt.cx)
#define YDSTOLS(dc,ty) \
MulDiv((ty), (dc)->Dc_Attr.szlWindowExt.cy, (dc)->Dc_Attr.szlViewportExt.cy)
#define XLSTODS(dc,tx) \
MulDiv((tx), (dc)->Dc_Attr.szlViewportExt.cx, (dc)->Dc_Attr.szlWindowExt.cx)
#define YLSTODS(dc,ty) \
MulDiv((ty), (dc)->Dc_Attr.szlViewportExt.cy, (dc)->Dc_Attr.szlWindowExt.cy)
#endif

View file

@ -37,18 +37,18 @@
void FASTCALL
IntFixIsotropicMapping(PDC dc)
{
ULONG xdim = EngMulDiv(dc->vportExtX, dc->GDIInfo->ulHorzSize, dc->GDIInfo->ulHorzRes) / dc->wndExtX;
ULONG ydim = EngMulDiv(dc->vportExtY, dc->GDIInfo->ulVertSize, dc->GDIInfo->ulVertRes) / dc->wndExtY;
ULONG xdim = EngMulDiv(dc->Dc_Attr.szlViewportExt.cx, dc->GDIInfo->ulHorzSize, dc->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;
if (xdim > ydim)
{
dc->vportExtX = dc->vportExtX * abs(ydim / xdim);
if (!dc->vportExtX) dc->vportExtX = 1;
dc->Dc_Attr.szlViewportExt.cx = dc->Dc_Attr.szlViewportExt.cx * abs(ydim / xdim);
if (!dc->Dc_Attr.szlViewportExt.cx) dc->Dc_Attr.szlViewportExt.cx = 1;
}
else
{
dc->vportExtY = dc->vportExtY * abs(xdim / ydim);
if (!dc->vportExtY) dc->vportExtY = 1;
dc->Dc_Attr.szlViewportExt.cy = dc->Dc_Attr.szlViewportExt.cy * abs(xdim / ydim);
if (!dc->Dc_Attr.szlViewportExt.cy) dc->Dc_Attr.szlViewportExt.cy = 1;
}
}
@ -550,8 +550,8 @@ NtGdiOffsetViewportOrgEx(HDC hDC,
ProbeForWrite(UnsafePoint,
sizeof(POINT),
1);
UnsafePoint->x = dc->vportOrgX;
UnsafePoint->y = dc->vportOrgY;
UnsafePoint->x = dc->Dc_Attr.ptlViewportOrg.x;
UnsafePoint->y = dc->Dc_Attr.ptlViewportOrg.y;
}
_SEH_HANDLE
{
@ -567,8 +567,8 @@ NtGdiOffsetViewportOrgEx(HDC hDC,
}
}
dc->vportOrgX += XOffset;
dc->vportOrgY += YOffset;
dc->Dc_Attr.ptlViewportOrg.x += XOffset;
dc->Dc_Attr.ptlViewportOrg.y += YOffset;
DC_UpdateXforms(dc);
DC_UnlockDc(dc);
@ -600,8 +600,8 @@ NtGdiOffsetWindowOrgEx(HDC hDC,
ProbeForWrite(Point,
sizeof(POINT),
1);
Point->x = dc->wndOrgX;
Point->y = dc->wndOrgY;
Point->x = dc->Dc_Attr.ptlWindowOrg.x;
Point->y = dc->Dc_Attr.ptlWindowOrg.y;
}
_SEH_HANDLE
{
@ -617,8 +617,8 @@ NtGdiOffsetWindowOrgEx(HDC hDC,
}
}
dc->wndOrgX += XOffset;
dc->wndOrgY += YOffset;
dc->Dc_Attr.ptlWindowOrg.x += XOffset;
dc->Dc_Attr.ptlWindowOrg.y += YOffset;
DC_UpdateXforms(dc);
DC_UnlockDc(dc);
@ -710,46 +710,46 @@ NtGdiSetMapMode(HDC hDC,
switch (MapMode)
{
case MM_TEXT:
dc->wndExtX = 1;
dc->wndExtY = 1;
dc->vportExtX = 1;
dc->vportExtY = 1;
dc->Dc_Attr.szlWindowExt.cx = 1;
dc->Dc_Attr.szlWindowExt.cy = 1;
dc->Dc_Attr.szlViewportExt.cx = 1;
dc->Dc_Attr.szlViewportExt.cy = 1;
break;
case MM_LOMETRIC:
case MM_ISOTROPIC:
dc->wndExtX = dc->GDIInfo->ulHorzSize * 10;
dc->wndExtY = dc->GDIInfo->ulVertSize * 10;
dc->vportExtX = dc->GDIInfo->ulHorzRes;
dc->vportExtY = -dc->GDIInfo->ulVertRes;
dc->Dc_Attr.szlWindowExt.cx = dc->GDIInfo->ulHorzSize * 10;
dc->Dc_Attr.szlWindowExt.cy = dc->GDIInfo->ulVertSize * 10;
dc->Dc_Attr.szlViewportExt.cx = dc->GDIInfo->ulHorzRes;
dc->Dc_Attr.szlViewportExt.cy = -dc->GDIInfo->ulVertRes;
break;
case MM_HIMETRIC:
dc->wndExtX = dc->GDIInfo->ulHorzSize * 100;
dc->wndExtY = dc->GDIInfo->ulVertSize * 100;
dc->vportExtX = dc->GDIInfo->ulHorzRes;
dc->vportExtY = -dc->GDIInfo->ulVertRes;
dc->Dc_Attr.szlWindowExt.cx = dc->GDIInfo->ulHorzSize * 100;
dc->Dc_Attr.szlWindowExt.cy = dc->GDIInfo->ulVertSize * 100;
dc->Dc_Attr.szlViewportExt.cx = dc->GDIInfo->ulHorzRes;
dc->Dc_Attr.szlViewportExt.cy = -dc->GDIInfo->ulVertRes;
break;
case MM_LOENGLISH:
dc->wndExtX = EngMulDiv(1000, dc->GDIInfo->ulHorzSize, 254);
dc->wndExtY = EngMulDiv(1000, dc->GDIInfo->ulVertSize, 254);
dc->vportExtX = dc->GDIInfo->ulHorzRes;
dc->vportExtY = -dc->GDIInfo->ulVertRes;
dc->Dc_Attr.szlWindowExt.cx = EngMulDiv(1000, dc->GDIInfo->ulHorzSize, 254);
dc->Dc_Attr.szlWindowExt.cy = EngMulDiv(1000, dc->GDIInfo->ulVertSize, 254);
dc->Dc_Attr.szlViewportExt.cx = dc->GDIInfo->ulHorzRes;
dc->Dc_Attr.szlViewportExt.cy = -dc->GDIInfo->ulVertRes;
break;
case MM_HIENGLISH:
dc->wndExtX = EngMulDiv(10000, dc->GDIInfo->ulHorzSize, 254);
dc->wndExtY = EngMulDiv(10000, dc->GDIInfo->ulVertSize, 254);
dc->vportExtX = dc->GDIInfo->ulHorzRes;
dc->vportExtY = -dc->GDIInfo->ulVertRes;
dc->Dc_Attr.szlWindowExt.cx = EngMulDiv(10000, dc->GDIInfo->ulHorzSize, 254);
dc->Dc_Attr.szlWindowExt.cy = EngMulDiv(10000, dc->GDIInfo->ulVertSize, 254);
dc->Dc_Attr.szlViewportExt.cx = dc->GDIInfo->ulHorzRes;
dc->Dc_Attr.szlViewportExt.cy = -dc->GDIInfo->ulVertRes;
break;
case MM_TWIPS:
dc->wndExtX = EngMulDiv(14400, dc->GDIInfo->ulHorzSize, 254);
dc->wndExtY = EngMulDiv(14400, dc->GDIInfo->ulVertSize, 254);
dc->vportExtX = dc->GDIInfo->ulHorzRes;
dc->vportExtY = -dc->GDIInfo->ulVertRes;
dc->Dc_Attr.szlWindowExt.cx = EngMulDiv(14400, dc->GDIInfo->ulHorzSize, 254);
dc->Dc_Attr.szlWindowExt.cy = EngMulDiv(14400, dc->GDIInfo->ulVertSize, 254);
dc->Dc_Attr.szlViewportExt.cx = dc->GDIInfo->ulHorzRes;
dc->Dc_Attr.szlViewportExt.cy = -dc->GDIInfo->ulVertRes;
break;
case MM_ANISOTROPIC:
@ -806,11 +806,11 @@ NtGdiSetViewportExtEx(HDC hDC,
ProbeForWrite(Size,
sizeof(SIZE),
1);
Size->cx = dc->vportExtX;
Size->cy = dc->vportExtY;
Size->cx = dc->Dc_Attr.szlViewportExt.cx;
Size->cy = dc->Dc_Attr.szlViewportExt.cy;
dc->vportExtX = XExtent;
dc->vportExtY = YExtent;
dc->Dc_Attr.szlViewportExt.cx = XExtent;
dc->Dc_Attr.szlViewportExt.cy = YExtent;
if (dc->Dc_Attr.iMapMode == MM_ISOTROPIC)
IntFixIsotropicMapping(dc);
@ -861,8 +861,8 @@ NtGdiSetViewportOrgEx(HDC hDC,
ProbeForWrite(Point,
sizeof(POINT),
1);
Point->x = dc->vportOrgX;
Point->y = dc->vportOrgY;
Point->x = dc->Dc_Attr.ptlViewportOrg.x;
Point->y = dc->Dc_Attr.ptlViewportOrg.y;
}
_SEH_HANDLE
{
@ -878,8 +878,8 @@ NtGdiSetViewportOrgEx(HDC hDC,
}
}
dc->vportOrgX = X;
dc->vportOrgY = Y;
dc->Dc_Attr.ptlViewportOrg.x = X;
dc->Dc_Attr.ptlViewportOrg.y = Y;
DC_UpdateXforms(dc);
DC_UnlockDc(dc);
@ -924,8 +924,8 @@ NtGdiSetWindowExtEx(HDC hDC,
ProbeForWrite(Size,
sizeof(SIZE),
1);
Size->cx = dc->wndExtX;
Size->cy = dc->wndExtY;
Size->cx = dc->Dc_Attr.szlWindowExt.cx;
Size->cy = dc->Dc_Attr.szlWindowExt.cy;
}
_SEH_HANDLE
{
@ -941,8 +941,8 @@ NtGdiSetWindowExtEx(HDC hDC,
}
}
dc->wndExtX = XExtent;
dc->wndExtY = YExtent;
dc->Dc_Attr.szlWindowExt.cx = XExtent;
dc->Dc_Attr.szlWindowExt.cy = YExtent;
DC_UpdateXforms(dc);
DC_UnlockDc(dc);
@ -975,8 +975,8 @@ NtGdiSetWindowOrgEx(HDC hDC,
ProbeForWrite(Point,
sizeof(POINT),
1);
Point->x = dc->wndOrgX;
Point->y = dc->wndOrgY;
Point->x = dc->Dc_Attr.ptlWindowOrg.x;
Point->y = dc->Dc_Attr.ptlWindowOrg.y;
}
_SEH_HANDLE
{
@ -992,8 +992,8 @@ NtGdiSetWindowOrgEx(HDC hDC,
}
}
dc->wndOrgX = X;
dc->wndOrgY = Y;
dc->Dc_Attr.ptlWindowOrg.x = X;
dc->Dc_Attr.ptlWindowOrg.y = Y;
DC_UpdateXforms(dc);
DC_UnlockDc(dc);

View file

@ -216,14 +216,14 @@ NtGdiCreateCompatibleDC(HDC hDC)
/* DriverName is copied in the AllocDC routine */
NewDC->DeviceDriver = OrigDC->DeviceDriver;
NewDC->wndOrgX = OrigDC->wndOrgX;
NewDC->wndOrgY = OrigDC->wndOrgY;
NewDC->wndExtX = OrigDC->wndExtX;
NewDC->wndExtY = OrigDC->wndExtY;
NewDC->vportOrgX = OrigDC->vportOrgX;
NewDC->vportOrgY = OrigDC->vportOrgY;
NewDC->vportExtX = OrigDC->vportExtX;
NewDC->vportExtY = OrigDC->vportExtY;
NewDC->Dc_Attr.ptlWindowOrg.x = OrigDC->Dc_Attr.ptlWindowOrg.x;
NewDC->Dc_Attr.ptlWindowOrg.y = OrigDC->Dc_Attr.ptlWindowOrg.y;
NewDC->Dc_Attr.szlWindowExt.cx = OrigDC->Dc_Attr.szlWindowExt.cx;
NewDC->Dc_Attr.szlWindowExt.cy = OrigDC->Dc_Attr.szlWindowExt.cy;
NewDC->Dc_Attr.ptlViewportOrg.x = OrigDC->Dc_Attr.ptlViewportOrg.x;
NewDC->Dc_Attr.ptlViewportOrg.y = OrigDC->Dc_Attr.ptlViewportOrg.y;
NewDC->Dc_Attr.szlViewportExt.cx = OrigDC->Dc_Attr.szlViewportExt.cx;
NewDC->Dc_Attr.szlViewportExt.cy = OrigDC->Dc_Attr.szlViewportExt.cy;
/* Create default bitmap */
if (!(hBitmap = NtGdiCreateBitmap( 1, 1, 1, NewDC->w.bitsPerPixel, NULL )))
@ -1294,14 +1294,14 @@ IntGdiGetDCState(HDC hDC)
newdc->w.xformWorld2Vport = dc->w.xformWorld2Vport;
newdc->w.xformVport2World = dc->w.xformVport2World;
newdc->w.vport2WorldValid = dc->w.vport2WorldValid;
newdc->wndOrgX = dc->wndOrgX;
newdc->wndOrgY = dc->wndOrgY;
newdc->wndExtX = dc->wndExtX;
newdc->wndExtY = dc->wndExtY;
newdc->vportOrgX = dc->vportOrgX;
newdc->vportOrgY = dc->vportOrgY;
newdc->vportExtX = dc->vportExtX;
newdc->vportExtY = dc->vportExtY;
newdc->Dc_Attr.ptlWindowOrg.x = dc->Dc_Attr.ptlWindowOrg.x;
newdc->Dc_Attr.ptlWindowOrg.y = dc->Dc_Attr.ptlWindowOrg.y;
newdc->Dc_Attr.szlWindowExt.cx = dc->Dc_Attr.szlWindowExt.cx;
newdc->Dc_Attr.szlWindowExt.cy = dc->Dc_Attr.szlWindowExt.cy;
newdc->Dc_Attr.ptlViewportOrg.x = dc->Dc_Attr.ptlViewportOrg.x;
newdc->Dc_Attr.ptlViewportOrg.y = dc->Dc_Attr.ptlViewportOrg.y;
newdc->Dc_Attr.szlViewportExt.cx = dc->Dc_Attr.szlViewportExt.cx;
newdc->Dc_Attr.szlViewportExt.cy = dc->Dc_Attr.szlViewportExt.cy;
newdc->hSelf = hnewdc;
newdc->saveLevel = 0;
@ -1379,14 +1379,14 @@ IntGdiSetDCState ( HDC hDC, HDC hDCSave )
dc->w.xformVport2World = dcs->w.xformVport2World;
dc->w.vport2WorldValid = dcs->w.vport2WorldValid;
dc->wndOrgX = dcs->wndOrgX;
dc->wndOrgY = dcs->wndOrgY;
dc->wndExtX = dcs->wndExtX;
dc->wndExtY = dcs->wndExtY;
dc->vportOrgX = dcs->vportOrgX;
dc->vportOrgY = dcs->vportOrgY;
dc->vportExtX = dcs->vportExtX;
dc->vportExtY = dcs->vportExtY;
dc->Dc_Attr.ptlWindowOrg.x = dcs->Dc_Attr.ptlWindowOrg.x;
dc->Dc_Attr.ptlWindowOrg.y = dcs->Dc_Attr.ptlWindowOrg.y;
dc->Dc_Attr.szlWindowExt.cx = dcs->Dc_Attr.szlWindowExt.cx;
dc->Dc_Attr.szlWindowExt.cy = dcs->Dc_Attr.szlWindowExt.cy;
dc->Dc_Attr.ptlViewportOrg.x = dcs->Dc_Attr.ptlViewportOrg.x;
dc->Dc_Attr.ptlViewportOrg.y = dcs->Dc_Attr.ptlViewportOrg.y;
dc->Dc_Attr.szlViewportExt.cx = dcs->Dc_Attr.szlViewportExt.cx;
dc->Dc_Attr.szlViewportExt.cy = dcs->Dc_Attr.szlViewportExt.cy;
dc->PalIndexed = dcs->PalIndexed;
if (!(dc->w.flags & DC_MEMORY))
@ -1778,10 +1778,10 @@ DC_GET_VAL( INT, NtGdiGetROP2, Dc_Attr.jROP2 )
DC_GET_VAL( INT, NtGdiGetStretchBltMode, Dc_Attr.jStretchBltMode )
DC_GET_VAL( UINT, NtGdiGetTextAlign, Dc_Attr.lTextAlign )
DC_GET_VAL( COLORREF, NtGdiGetTextColor, Dc_Attr.crForegroundClr )
DC_GET_VAL_EX( GetViewportExtEx, vportExtX, vportExtY, SIZE, cx, cy )
DC_GET_VAL_EX( GetViewportOrgEx, vportOrgX, vportOrgY, POINT, x, y )
DC_GET_VAL_EX( GetWindowExtEx, wndExtX, wndExtY, SIZE, cx, cy )
DC_GET_VAL_EX( GetWindowOrgEx, wndOrgX, wndOrgY, POINT, x, y )
DC_GET_VAL_EX( GetViewportExtEx, Dc_Attr.szlViewportExt.cx, Dc_Attr.szlViewportExt.cy, SIZE, cx, cy )
DC_GET_VAL_EX( GetViewportOrgEx, Dc_Attr.ptlViewportOrg.x, Dc_Attr.ptlViewportOrg.y, POINT, x, y )
DC_GET_VAL_EX( GetWindowExtEx, Dc_Attr.szlWindowExt.cx, Dc_Attr.szlWindowExt.cy, SIZE, cx, cy )
DC_GET_VAL_EX( GetWindowOrgEx, Dc_Attr.ptlWindowOrg.x, Dc_Attr.ptlWindowOrg.y, POINT, x, y )
BOOL
APIENTRY
@ -2205,10 +2205,12 @@ DC_AllocDC(PUNICODE_STRING Driver)
NewDC->Dc_Attr.iMapMode = MM_TEXT;
// DC_Attr->iMapMode = MM_TEXT;
NewDC->wndExtX = 1.0f;
NewDC->wndExtY = 1.0f;
NewDC->vportExtX = 1.0f;
NewDC->vportExtY = 1.0f;
//// HELP! FLOAT to INT !!!!!!!!!
NewDC->Dc_Attr.szlWindowExt.cx = 1.0f;
NewDC->Dc_Attr.szlWindowExt.cy = 1.0f;
NewDC->Dc_Attr.szlViewportExt.cx = 1.0f;
NewDC->Dc_Attr.szlViewportExt.cy = 1.0f;
NewDC->Dc_Attr.crForegroundClr = 0;
// NewDC->pDc_Attr->ulForegroundClr = 0; // Already Zero
@ -2313,14 +2315,14 @@ DC_UpdateXforms(PDC dc)
FLOAT scaleX, scaleY;
/* Construct a transformation to do the window-to-viewport conversion */
scaleX = (dc->wndExtX ? (FLOAT)dc->vportExtX / (FLOAT)dc->wndExtX : 0.0f);
scaleY = (dc->wndExtY ? (FLOAT)dc->vportExtY / (FLOAT)dc->wndExtY : 0.0f);
scaleX = (dc->Dc_Attr.szlWindowExt.cx ? (FLOAT)dc->Dc_Attr.szlViewportExt.cx / (FLOAT)dc->Dc_Attr.szlWindowExt.cx : 0.0f);
scaleY = (dc->Dc_Attr.szlWindowExt.cy ? (FLOAT)dc->Dc_Attr.szlViewportExt.cy / (FLOAT)dc->Dc_Attr.szlWindowExt.cy : 0.0f);
xformWnd2Vport.eM11 = scaleX;
xformWnd2Vport.eM12 = 0.0;
xformWnd2Vport.eM21 = 0.0;
xformWnd2Vport.eM22 = scaleY;
xformWnd2Vport.eDx = (FLOAT)dc->vportOrgX - scaleX * (FLOAT)dc->wndOrgX;
xformWnd2Vport.eDy = (FLOAT)dc->vportOrgY - scaleY * (FLOAT)dc->wndOrgY;
xformWnd2Vport.eDx = (FLOAT)dc->Dc_Attr.ptlViewportOrg.x - scaleX * (FLOAT)dc->Dc_Attr.ptlWindowOrg.x;
xformWnd2Vport.eDy = (FLOAT)dc->Dc_Attr.ptlViewportOrg.y - scaleY * (FLOAT)dc->Dc_Attr.ptlWindowOrg.y;
/* Combine with the world transformation */
IntGdiCombineTransform(&dc->w.xformWorld2Vport, &dc->w.xformWorld2Wnd, &xformWnd2Vport);

View file

@ -1487,10 +1487,10 @@ BOOL FASTCALL PATH_StrokePath(DC *dc, GdiPath *pPath)
/* Set MM_TEXT */
dc->Dc_Attr.iMapMode = MM_TEXT;
dc->vportOrgX = 0;
dc->vportOrgY = 0;
dc->wndOrgX = 0;
dc->wndOrgY = 0;
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);
@ -1600,15 +1600,15 @@ end:
/* Restore the old mapping mode */
dc->Dc_Attr.iMapMode = mapMode;
dc->wndExtX = szWindowExt.cx;
dc->wndExtY = szWindowExt.cy;
dc->wndOrgX = ptWindowOrg.x;
dc->wndOrgY = ptWindowOrg.y;
dc->Dc_Attr.szlWindowExt.cx = szWindowExt.cx;
dc->Dc_Attr.szlWindowExt.cy = szWindowExt.cy;
dc->Dc_Attr.ptlWindowOrg.x = ptWindowOrg.x;
dc->Dc_Attr.ptlWindowOrg.y = ptWindowOrg.y;
dc->vportExtX = szViewportExt.cx;
dc->vportExtY = szViewportExt.cy;
dc->vportOrgX = ptViewportOrg.x;
dc->vportOrgY = ptViewportOrg.y;
dc->Dc_Attr.szlViewportExt.cx = szViewportExt.cx;
dc->Dc_Attr.szlViewportExt.cx = szViewportExt.cy;
dc->Dc_Attr.ptlViewportOrg.x = ptViewportOrg.x;
dc->Dc_Attr.ptlViewportOrg.y = ptViewportOrg.y;
/* Restore the world transform */
dc->w.xformWorld2Wnd = xform;

View file

@ -1860,7 +1860,8 @@ BOOL FASTCALL REGION_LPTODP(HDC hdc, HRGN hDest, HRGN hSrc)
if(NtGdiCombineRgn(hDest, hSrc, 0, RGN_COPY) == ERROR)
goto done;
NtGdiOffsetRgn(hDest, dc->vportOrgX - dc->wndOrgX, dc->vportOrgY - dc->wndOrgY);
NtGdiOffsetRgn(hDest, dc->Dc_Attr.ptlViewportOrg.x - dc->Dc_Attr.ptlWindowOrg.x,
dc->Dc_Attr.ptlViewportOrg.y - dc->Dc_Attr.ptlWindowOrg.y);
ret = TRUE;
goto done;
}