Squashed 'NotifyIconWpf/' content from commit f64d48e
git-subtree-dir: NotifyIconWpf git-subtree-split: f64d48ec604eef26e5dc1e7c2d5e1e91b329ffac
This commit is contained in:
56
NotifyIconWpf/Interop/TrayInfo.cs
Normal file
56
NotifyIconWpf/Interop/TrayInfo.cs
Normal file
@@ -0,0 +1,56 @@
|
||||
// Some interop code taken from Mike Marshall's AnyForm
|
||||
|
||||
using System.Drawing;
|
||||
|
||||
namespace Hardcodet.Wpf.TaskbarNotification.Interop
|
||||
{
|
||||
/// <summary>
|
||||
/// Resolves the current tray position.
|
||||
/// </summary>
|
||||
public static class TrayInfo
|
||||
{
|
||||
/// <summary>
|
||||
/// Gets the position of the system tray.
|
||||
/// </summary>
|
||||
/// <returns>Tray coordinates.</returns>
|
||||
public static Point GetTrayLocation()
|
||||
{
|
||||
int space = 2;
|
||||
var info = new AppBarInfo();
|
||||
info.GetSystemTaskBarPosition();
|
||||
|
||||
Rectangle rcWorkArea = info.WorkArea;
|
||||
|
||||
int x = 0, y = 0;
|
||||
switch (info.Edge)
|
||||
{
|
||||
case AppBarInfo.ScreenEdge.Left:
|
||||
x = rcWorkArea.Right + space;
|
||||
y = rcWorkArea.Bottom;
|
||||
break;
|
||||
case AppBarInfo.ScreenEdge.Bottom:
|
||||
x = rcWorkArea.Right;
|
||||
y = rcWorkArea.Bottom - rcWorkArea.Height - space;
|
||||
break;
|
||||
case AppBarInfo.ScreenEdge.Top:
|
||||
x = rcWorkArea.Right;
|
||||
y = rcWorkArea.Top + rcWorkArea.Height + space;
|
||||
break;
|
||||
case AppBarInfo.ScreenEdge.Right:
|
||||
x = rcWorkArea.Right - rcWorkArea.Width - space;
|
||||
y = rcWorkArea.Bottom;
|
||||
break;
|
||||
}
|
||||
|
||||
return GetDeviceCoordinates(new Point {X = x, Y = y});
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Recalculates OS coordinates in order to support WPFs coordinate
|
||||
/// system if OS scaling (DPIs) is not 100%.
|
||||
/// </summary>
|
||||
/// <param name="point">Point</param>
|
||||
/// <returns>Point</returns>
|
||||
public static Point GetDeviceCoordinates(Point point) => point.ScaleWithDpi();
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user