123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869 |
- using System;
- using System.Diagnostics.CodeAnalysis;
- using System.Windows;
- using System.Windows.Media;
- namespace Standard;
- internal static class DpiHelper
- {
- [SuppressMessage("Microsoft.Performance", "CA1810:InitializeReferenceTypeStaticFieldsInline")]
- static DpiHelper()
- {
- using (SafeDC desktop = SafeDC.GetDesktop())
- {
- int deviceCaps = NativeMethods.GetDeviceCaps(desktop, DeviceCap.LOGPIXELSX);
- int deviceCaps2 = NativeMethods.GetDeviceCaps(desktop, DeviceCap.LOGPIXELSY);
- DpiHelper._transformToDip = Matrix.Identity;
- DpiHelper._transformToDip.Scale(96.0 / (double) deviceCaps, 96.0 / (double) deviceCaps2);
- DpiHelper._transformToDevice = Matrix.Identity;
- DpiHelper._transformToDevice.Scale((double) deviceCaps / 96.0, (double) deviceCaps2 / 96.0);
- }
- }
- public static Point LogicalPixelsToDevice(Point logicalPoint)
- {
- return DpiHelper._transformToDevice.Transform(logicalPoint);
- }
- public static Point DevicePixelsToLogical(Point devicePoint)
- {
- return DpiHelper._transformToDip.Transform(devicePoint);
- }
- [SuppressMessage("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
- public static Rect LogicalRectToDevice(Rect logicalRectangle)
- {
- Point point = DpiHelper.LogicalPixelsToDevice(new Point(logicalRectangle.Left, logicalRectangle.Top));
- Point point2 = DpiHelper.LogicalPixelsToDevice(new Point(logicalRectangle.Right, logicalRectangle.Bottom));
- return new Rect(point, point2);
- }
- public static Rect DeviceRectToLogical(Rect deviceRectangle)
- {
- Point point = DpiHelper.DevicePixelsToLogical(new Point(deviceRectangle.Left, deviceRectangle.Top));
- Point point2 = DpiHelper.DevicePixelsToLogical(new Point(deviceRectangle.Right, deviceRectangle.Bottom));
- return new Rect(point, point2);
- }
- [SuppressMessage("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
- public static Size LogicalSizeToDevice(Size logicalSize)
- {
- Point point = DpiHelper.LogicalPixelsToDevice(new Point(logicalSize.Width, logicalSize.Height));
- return new Size
- {
- Width = point.X,
- Height = point.Y
- };
- }
- public static Size DeviceSizeToLogical(Size deviceSize)
- {
- Point point = DpiHelper.DevicePixelsToLogical(new Point(deviceSize.Width, deviceSize.Height));
- return new Size(point.X, point.Y);
- }
- private static Matrix _transformToDevice;
- private static Matrix _transformToDip;
- }
|