| File: System\Windows\Standard\DpiHelper.cs | Web Access |
| Project: src\wpf\src\Microsoft.DotNet.Wpf\src\PresentationFramework\PresentationFramework.csproj (PresentationFramework) |
// Licensed to the .NET Foundation under one or more agreements. // The .NET Foundation licenses this file to you under the MIT license. using System.Windows; using System.Windows.Media; namespace Standard { internal static class DpiHelper { /// <summary> /// Convert a point in device independent pixels (1/96") to a point in the system coordinates. /// </summary> /// <param name="logicalPoint">A point in the logical coordinate system.</param> /// <returns>Returns the parameter converted to the system's coordinates.</returns> public static Point LogicalPixelsToDevice(Point logicalPoint, double dpiScaleX, double dpiScaleY) { Matrix transformToDevice = Matrix.Identity; transformToDevice.Scale(dpiScaleX, dpiScaleY); return transformToDevice.Transform(logicalPoint); } /// <summary> /// Convert a point in system coordinates to a point in device independent pixels (1/96"). /// </summary> /// <param name="logicalPoint">A point in the physical coordinate system.</param> /// <returns>Returns the parameter converted to the device independent coordinate system.</returns> public static Point DevicePixelsToLogical(Point devicePoint, double dpiScaleX, double dpiScaleY) { Matrix transformToDip = Matrix.Identity; transformToDip.Scale(1d / dpiScaleX, 1d / dpiScaleY); return transformToDip.Transform(devicePoint); } public static Rect LogicalRectToDevice(Rect logicalRectangle, double dpiScaleX, double dpiScaleY) { Point topLeft = LogicalPixelsToDevice(new Point(logicalRectangle.Left, logicalRectangle.Top), dpiScaleX, dpiScaleY); Point bottomRight = LogicalPixelsToDevice(new Point(logicalRectangle.Right, logicalRectangle.Bottom), dpiScaleX, dpiScaleY); return new Rect(topLeft, bottomRight); } public static Rect DeviceRectToLogical(Rect deviceRectangle, double dpiScaleX, double dpiScaleY) { Point topLeft = DevicePixelsToLogical(new Point(deviceRectangle.Left, deviceRectangle.Top), dpiScaleX, dpiScaleY); Point bottomRight = DevicePixelsToLogical(new Point(deviceRectangle.Right, deviceRectangle.Bottom), dpiScaleX, dpiScaleY); return new Rect(topLeft, bottomRight); } public static Size LogicalSizeToDevice(Size logicalSize, double dpiScaleX, double dpiScaleY) { Point pt = LogicalPixelsToDevice(new Point(logicalSize.Width, logicalSize.Height), dpiScaleX, dpiScaleY); return new Size { Width = pt.X, Height = pt.Y }; } public static Size DeviceSizeToLogical(Size deviceSize, double dpiScaleX, double dpiScaleY) { Point pt = DevicePixelsToLogical(new Point(deviceSize.Width, deviceSize.Height), dpiScaleX, dpiScaleY); return new Size(pt.X, pt.Y); } public static Thickness LogicalThicknessToDevice(Thickness logicalThickness, double dpiScaleX, double dpiScaleY) { Point topLeft = LogicalPixelsToDevice(new Point(logicalThickness.Left, logicalThickness.Top), dpiScaleX, dpiScaleY); Point bottomRight = LogicalPixelsToDevice(new Point(logicalThickness.Right, logicalThickness.Bottom), dpiScaleX, dpiScaleY); return new Thickness(topLeft.X, topLeft.Y, bottomRight.X, bottomRight.Y); } } }