* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*/
/*
*
CONST LPXFORM lpXForm,
DWORD Mode)
{
- ASSERT(pDc);
XFORM xformWorld2Wnd;
+ ASSERT(pDc);
switch (Mode)
{
MatrixS2XForm(XForm, &dc->dclevel.mxWorldToPage);
break;
+ case GdiWorldSpaceToDeviceSpace:
+ MatrixS2XForm(XForm, &dc->dclevel.mxWorldToDevice);
+ break;
+
+ case GdiPageSpaceToDeviceSpace:
+ DPRINT1("Page space -> device space is unsupported!\n");
+ break;
+
+ case GdiDeviceSpaceToWorldSpace:
+ MatrixS2XForm(XForm, &dc->dclevel.mxDeviceToWorld);
+ break;
+
default:
+ DPRINT1("Unknown transform %lu\n", iXform);
+ Status = STATUS_INVALID_PARAMETER;
break;
}
}
/* 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 = 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;
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 = 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;
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, 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;
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, 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;
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, 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;
break;
case MM_ANISOTROPIC:
PDC dc;
PDC_ATTR pdcattr;
- // Need test types for zeros and non zeros
+ /* Check parameters (all zeroes resets to real resolution) */
+ if (cxVirtualDevicePixel == 0 && cyVirtualDevicePixel == 0 &&
+ cxVirtualDeviceMm == 0 && cyVirtualDeviceMm == 0)
+ {
+ cxVirtualDevicePixel = NtGdiGetDeviceCaps(hdc, HORZRES);
+ cyVirtualDevicePixel = NtGdiGetDeviceCaps(hdc, VERTRES);
+ cxVirtualDeviceMm = NtGdiGetDeviceCaps(hdc, HORZSIZE);
+ cyVirtualDeviceMm = NtGdiGetDeviceCaps(hdc, VERTSIZE);
+ }
+ else if (cxVirtualDevicePixel == 0 || cyVirtualDevicePixel == 0 ||
+ cxVirtualDeviceMm == 0 || cyVirtualDeviceMm == 0)
+ {
+ return FALSE;
+ }
dc = DC_LockDc(hdc);
if (!dc) return FALSE;
{
// "This specifies that Windows should only match fonts that have the
// same aspect ratio as the display.", Programming Windows, Fifth Ed.
- AspectRatio->cx = pDC->ppdev->GDIInfo.ulLogPixelsX;
- AspectRatio->cy = pDC->ppdev->GDIInfo.ulLogPixelsY;
+ AspectRatio->cx = pDC->ppdev->gdiinfo.ulLogPixelsX;
+ AspectRatio->cy = pDC->ppdev->gdiinfo.ulLogPixelsY;
}
else
{