Added GetDeviceCaps to the DC driver interface. Removed devCaps
pointer in the generic DC structure.
diff --git a/graphics/mapping.c b/graphics/mapping.c
index e83dead..c55229b 100644
--- a/graphics/mapping.c
+++ b/graphics/mapping.c
@@ -17,10 +17,10 @@
*/
void MAPPING_FixIsotropic( DC * dc )
{
- double xdim = (double)dc->vportExtX * dc->devCaps->horzSize /
- (dc->devCaps->horzRes * dc->wndExtX);
- double ydim = (double)dc->vportExtY * dc->devCaps->vertSize /
- (dc->devCaps->vertRes * dc->wndExtY);
+ double xdim = (double)dc->vportExtX * GetDeviceCaps( dc->hSelf, HORZSIZE ) /
+ (GetDeviceCaps( dc->hSelf, HORZRES ) * dc->wndExtX);
+ double ydim = (double)dc->vportExtY * GetDeviceCaps( dc->hSelf, VERTSIZE ) /
+ (GetDeviceCaps( dc->hSelf, VERTRES ) * dc->wndExtY);
if (xdim > ydim)
{
dc->vportExtX = dc->vportExtX * fabs( ydim / xdim );
@@ -30,7 +30,7 @@
{
dc->vportExtY = dc->vportExtY * fabs( xdim / ydim );
if (!dc->vportExtY) dc->vportExtY = 1;
- }
+ }
}
@@ -124,6 +124,8 @@
INT WINAPI SetMapMode( HDC hdc, INT mode )
{
INT prevMode;
+ INT horzSize, vertSize, horzRes, vertRes;
+
DC * dc = DC_GetDCPtr( hdc );
if (!dc) return 0;
if (dc->funcs->pSetMapMode)
@@ -133,58 +135,55 @@
}
TRACE("%04x %d\n", hdc, mode );
-
+
prevMode = dc->MapMode;
+ horzSize = GetDeviceCaps( hdc, HORZSIZE );
+ vertSize = GetDeviceCaps( hdc, VERTSIZE );
+ horzRes = GetDeviceCaps( hdc, HORZRES );
+ vertRes = GetDeviceCaps( hdc, VERTRES );
switch(mode)
{
- case MM_TEXT:
- dc->wndExtX = 1;
- dc->wndExtY = 1;
- dc->vportExtX = 1;
- dc->vportExtY = 1;
- break;
-
- case MM_LOMETRIC:
- case MM_ISOTROPIC:
- dc->wndExtX = dc->devCaps->horzSize;
- dc->wndExtY = dc->devCaps->vertSize;
- dc->vportExtX = dc->devCaps->horzRes / 10;
- dc->vportExtY = dc->devCaps->vertRes / -10;
- break;
-
- case MM_HIMETRIC:
- dc->wndExtX = dc->devCaps->horzSize * 10;
- dc->wndExtY = dc->devCaps->vertSize * 10;
- dc->vportExtX = dc->devCaps->horzRes / 10;
- dc->vportExtY = dc->devCaps->vertRes / -10;
- break;
-
- case MM_LOENGLISH:
- dc->wndExtX = dc->devCaps->horzSize;
- dc->wndExtY = dc->devCaps->vertSize;
- dc->vportExtX = 254L * dc->devCaps->horzRes / 1000;
- dc->vportExtY = -254L * dc->devCaps->vertRes / 1000;
- break;
-
- case MM_HIENGLISH:
- dc->wndExtX = dc->devCaps->horzSize * 10;
- dc->wndExtY = dc->devCaps->vertSize * 10;
- dc->vportExtX = 254L * dc->devCaps->horzRes / 1000;
- dc->vportExtY = -254L * dc->devCaps->vertRes / 1000;
- break;
-
- case MM_TWIPS:
- dc->wndExtX = 144L * dc->devCaps->horzSize / 10;
- dc->wndExtY = 144L * dc->devCaps->vertSize / 10;
- dc->vportExtX = 254L * dc->devCaps->horzRes / 1000;
- dc->vportExtY = -254L * dc->devCaps->vertRes / 1000;
- break;
-
- case MM_ANISOTROPIC:
- break;
-
- default:
- goto done;
+ case MM_TEXT:
+ dc->wndExtX = 1;
+ dc->wndExtY = 1;
+ dc->vportExtX = 1;
+ dc->vportExtY = 1;
+ break;
+ case MM_LOMETRIC:
+ case MM_ISOTROPIC:
+ dc->wndExtX = horzSize;
+ dc->wndExtY = vertSize;
+ dc->vportExtX = horzRes / 10;
+ dc->vportExtY = vertRes / -10;
+ break;
+ case MM_HIMETRIC:
+ dc->wndExtX = horzSize * 10;
+ dc->wndExtY = vertSize * 10;
+ dc->vportExtX = horzRes / 10;
+ dc->vportExtY = vertRes / -10;
+ break;
+ case MM_LOENGLISH:
+ dc->wndExtX = horzSize;
+ dc->wndExtY = vertSize;
+ dc->vportExtX = 254L * horzRes / 1000;
+ dc->vportExtY = -254L * vertRes / 1000;
+ break;
+ case MM_HIENGLISH:
+ dc->wndExtX = horzSize * 10;
+ dc->wndExtY = vertSize * 10;
+ dc->vportExtX = 254L * horzRes / 1000;
+ dc->vportExtY = -254L * vertRes / 1000;
+ break;
+ case MM_TWIPS:
+ dc->wndExtX = 144L * horzSize / 10;
+ dc->wndExtY = 144L * vertSize / 10;
+ dc->vportExtX = 254L * horzRes / 1000;
+ dc->vportExtY = -254L * vertRes / 1000;
+ break;
+ case MM_ANISOTROPIC:
+ break;
+ default:
+ goto done;
}
dc->MapMode = mode;
DC_UpdateXforms( dc );