From c2896a6434dcff971d7a396773c412059dfe8f63 Mon Sep 17 00:00:00 2001 From: Gregor Schneider Date: Sun, 20 Dec 2009 13:55:45 +0000 Subject: [PATCH] [win32k] - Mapping mode works with the virtual device resolution - Initialize virtual resolution when initializing the DC - Fixes ~30 gdi32 mapping tests svn path=/trunk/; revision=44671 --- .../subsystems/win32/win32k/objects/coord.c | 40 +++++++++---------- .../subsystems/win32/win32k/objects/dclife.c | 3 ++ 2 files changed, 23 insertions(+), 20 deletions(-) diff --git a/reactos/subsystems/win32/win32k/objects/coord.c b/reactos/subsystems/win32/win32k/objects/coord.c index e2a70c9c967..81f5c895507 100644 --- a/reactos/subsystems/win32/win32k/objects/coord.c +++ b/reactos/subsystems/win32/win32k/objects/coord.c @@ -688,38 +688,38 @@ IntGdiSetMapMode( /* Fall through */ case MM_LOMETRIC: - pdcattr->szlWindowExt.cx = dc->ppdev->gdiinfo.ulHorzSize * 10; - pdcattr->szlWindowExt.cy = dc->ppdev->gdiinfo.ulVertSize * 10; - pdcattr->szlViewportExt.cx = dc->ppdev->gdiinfo.ulHorzRes; - pdcattr->szlViewportExt.cy = -dc->ppdev->gdiinfo.ulVertRes; + pdcattr->szlWindowExt.cx = pdcattr->szlVirtualDeviceMm.cx * 10; + pdcattr->szlWindowExt.cy = pdcattr->szlVirtualDeviceMm.cy * 10; + pdcattr->szlViewportExt.cx = pdcattr->szlVirtualDevicePixel.cx; + pdcattr->szlViewportExt.cy = -pdcattr->szlVirtualDevicePixel.cy; break; case MM_HIMETRIC: - pdcattr->szlWindowExt.cx = dc->ppdev->gdiinfo.ulHorzSize * 100; - pdcattr->szlWindowExt.cy = dc->ppdev->gdiinfo.ulVertSize * 100; - pdcattr->szlViewportExt.cx = dc->ppdev->gdiinfo.ulHorzRes; - pdcattr->szlViewportExt.cy = -dc->ppdev->gdiinfo.ulVertRes; + pdcattr->szlWindowExt.cx = pdcattr->szlVirtualDeviceMm.cx * 100; + pdcattr->szlWindowExt.cy = pdcattr->szlVirtualDeviceMm.cy * 100; + pdcattr->szlViewportExt.cx = pdcattr->szlVirtualDevicePixel.cx; + pdcattr->szlViewportExt.cy = -pdcattr->szlVirtualDevicePixel.cy; break; case MM_LOENGLISH: - pdcattr->szlWindowExt.cx = MulDiv(1000, dc->ppdev->gdiinfo.ulHorzSize, 254); - pdcattr->szlWindowExt.cy = MulDiv(1000, dc->ppdev->gdiinfo.ulVertSize, 254); - pdcattr->szlViewportExt.cx = dc->ppdev->gdiinfo.ulHorzRes; - pdcattr->szlViewportExt.cy = -dc->ppdev->gdiinfo.ulVertRes; + pdcattr->szlWindowExt.cx = MulDiv(1000, pdcattr->szlVirtualDeviceMm.cx, 254); + pdcattr->szlWindowExt.cy = MulDiv(1000, pdcattr->szlVirtualDeviceMm.cy, 254); + pdcattr->szlViewportExt.cx = pdcattr->szlVirtualDevicePixel.cx; + pdcattr->szlViewportExt.cy = -pdcattr->szlVirtualDevicePixel.cy; break; case MM_HIENGLISH: - pdcattr->szlWindowExt.cx = MulDiv(10000, dc->ppdev->gdiinfo.ulHorzSize, 254); - pdcattr->szlWindowExt.cy = MulDiv(10000, dc->ppdev->gdiinfo.ulVertSize, 254); - pdcattr->szlViewportExt.cx = dc->ppdev->gdiinfo.ulHorzRes; - pdcattr->szlViewportExt.cy = -dc->ppdev->gdiinfo.ulVertRes; + pdcattr->szlWindowExt.cx = MulDiv(10000, pdcattr->szlVirtualDeviceMm.cx, 254); + pdcattr->szlWindowExt.cy = MulDiv(10000, pdcattr->szlVirtualDeviceMm.cy, 254); + pdcattr->szlViewportExt.cx = pdcattr->szlVirtualDevicePixel.cx; + pdcattr->szlViewportExt.cy = -pdcattr->szlVirtualDevicePixel.cy; break; case MM_TWIPS: - pdcattr->szlWindowExt.cx = MulDiv(14400, dc->ppdev->gdiinfo.ulHorzSize, 254); - pdcattr->szlWindowExt.cy = MulDiv(14400, dc->ppdev->gdiinfo.ulVertSize, 254); - pdcattr->szlViewportExt.cx = dc->ppdev->gdiinfo.ulHorzRes; - pdcattr->szlViewportExt.cy = -dc->ppdev->gdiinfo.ulVertRes; + pdcattr->szlWindowExt.cx = MulDiv(14400, pdcattr->szlVirtualDeviceMm.cx, 254); + pdcattr->szlWindowExt.cy = MulDiv(14400, pdcattr->szlVirtualDeviceMm.cy, 254); + pdcattr->szlViewportExt.cx = pdcattr->szlVirtualDevicePixel.cx; + pdcattr->szlViewportExt.cy = -pdcattr->szlVirtualDevicePixel.cy; break; case MM_ANISOTROPIC: diff --git a/reactos/subsystems/win32/win32k/objects/dclife.c b/reactos/subsystems/win32/win32k/objects/dclife.c index 360abda31ef..a7e903f5d53 100644 --- a/reactos/subsystems/win32/win32k/objects/dclife.c +++ b/reactos/subsystems/win32/win32k/objects/dclife.c @@ -568,6 +568,9 @@ DC_InitDC(HDC DCHandle) ASSERT ( res != ERROR ); } */ + + /* Set virtual resolution */ + NtGdiSetVirtualResolution(DCHandle, 0, 0, 0, 0); } /*