зеркало из https://github.com/DeGsoft/maui-linux.git
110 строки
2.4 KiB
C#
110 строки
2.4 KiB
C#
using System;
|
|
using Windows.Foundation;
|
|
using Windows.Graphics.Display;
|
|
using Windows.UI.Xaml;
|
|
|
|
#if WINDOWS_UWP
|
|
|
|
namespace Xamarin.Forms.Platform.UWP
|
|
#else
|
|
|
|
namespace Xamarin.Forms.Platform.WinRT
|
|
#endif
|
|
{
|
|
internal class WindowsDeviceInfo : DeviceInfo
|
|
{
|
|
DisplayInformation _information;
|
|
bool _isDisposed;
|
|
|
|
public WindowsDeviceInfo()
|
|
{
|
|
// TODO: Screen size and DPI can change at any time
|
|
_information = DisplayInformation.GetForCurrentView();
|
|
_information.OrientationChanged += OnOrientationChanged;
|
|
CurrentOrientation = GetDeviceOrientation(_information.CurrentOrientation);
|
|
}
|
|
|
|
public override Size PixelScreenSize
|
|
{
|
|
get
|
|
{
|
|
double scaling = ScalingFactor;
|
|
Size scaled = ScaledScreenSize;
|
|
double width = Math.Round(scaled.Width * scaling);
|
|
double height = Math.Round(scaled.Height * scaling);
|
|
|
|
return new Size(width, height);
|
|
}
|
|
}
|
|
|
|
public override Size ScaledScreenSize
|
|
{
|
|
get
|
|
{
|
|
Rect windowSize = Window.Current.Bounds;
|
|
return new Size(windowSize.Width, windowSize.Height);
|
|
}
|
|
}
|
|
|
|
public override double ScalingFactor
|
|
{
|
|
get
|
|
{
|
|
ResolutionScale scale = _information.ResolutionScale;
|
|
switch (scale)
|
|
{
|
|
case ResolutionScale.Scale120Percent:
|
|
return 1.2;
|
|
case ResolutionScale.Scale140Percent:
|
|
return 1.4;
|
|
case ResolutionScale.Scale150Percent:
|
|
return 1.5;
|
|
case ResolutionScale.Scale160Percent:
|
|
return 1.6;
|
|
case ResolutionScale.Scale180Percent:
|
|
return 1.8;
|
|
case ResolutionScale.Scale225Percent:
|
|
return 2.25;
|
|
case ResolutionScale.Scale100Percent:
|
|
default:
|
|
return 1;
|
|
}
|
|
}
|
|
}
|
|
|
|
protected override void Dispose(bool disposing)
|
|
{
|
|
if (_isDisposed)
|
|
return;
|
|
|
|
_isDisposed = true;
|
|
_information.OrientationChanged -= OnOrientationChanged;
|
|
_information = null;
|
|
|
|
base.Dispose(disposing);
|
|
}
|
|
|
|
static DeviceOrientation GetDeviceOrientation(DisplayOrientations orientations)
|
|
{
|
|
switch (orientations)
|
|
{
|
|
case DisplayOrientations.Landscape:
|
|
case DisplayOrientations.LandscapeFlipped:
|
|
return DeviceOrientation.Landscape;
|
|
|
|
case DisplayOrientations.Portrait:
|
|
case DisplayOrientations.PortraitFlipped:
|
|
return DeviceOrientation.Portrait;
|
|
|
|
default:
|
|
case DisplayOrientations.None:
|
|
return DeviceOrientation.Other;
|
|
}
|
|
}
|
|
|
|
void OnOrientationChanged(DisplayInformation sender, object args)
|
|
{
|
|
CurrentOrientation = GetDeviceOrientation(sender.CurrentOrientation);
|
|
}
|
|
}
|
|
} |