mirror of
https://github.com/ZuneDev/ZuneShell.dll.git
synced 2026-07-27 13:11:51 -07:00
117 lines
3.3 KiB
C#
117 lines
3.3 KiB
C#
// Decompiled with JetBrains decompiler
|
|
// Type: ZuneUI.MousePosition
|
|
// Assembly: ZuneShell, Version=4.7.0.0, Culture=neutral, PublicKeyToken=ddd0da4d3e678217
|
|
// MVID: FC8028F3-A47B-4FB4-B35B-11D1752D8264
|
|
// Assembly location: C:\Program Files\Zune\ZuneShell.dll
|
|
|
|
using Microsoft.Iris;
|
|
using Microsoft.Zune.Shell;
|
|
using System;
|
|
using System.Runtime.InteropServices;
|
|
using System.Threading;
|
|
|
|
namespace ZuneUI
|
|
{
|
|
[Serializable]
|
|
public class MousePosition : ModelItem
|
|
{
|
|
private int _x;
|
|
private int _y;
|
|
private System.Threading.Timer _checkPostion;
|
|
private bool _invokeOutstanding;
|
|
|
|
public MousePosition()
|
|
{
|
|
this._invokeOutstanding = false;
|
|
this._checkPostion = new System.Threading.Timer(new TimerCallback(this.CheckPosition), null, 0, 16);
|
|
}
|
|
|
|
private void CheckPosition(object state)
|
|
{
|
|
if (this._invokeOutstanding)
|
|
return;
|
|
this._invokeOutstanding = true;
|
|
int x;
|
|
int y;
|
|
GetCursorScreenPosition(out x, out y);
|
|
Application.DeferredInvoke(new DeferredInvokeHandler(this.DeferredUpdatePosition), new object[2]
|
|
{
|
|
x,
|
|
y
|
|
});
|
|
}
|
|
|
|
private void DeferredUpdatePosition(object arg)
|
|
{
|
|
object[] objArray = (object[])arg;
|
|
int num1 = (int)objArray[0];
|
|
int num2 = (int)objArray[1];
|
|
RECT lpRect;
|
|
if (!GetWindowRect(ZuneApplication.GetRenderWindow(), out lpRect))
|
|
{
|
|
lpRect.Left = 0;
|
|
lpRect.Top = 0;
|
|
lpRect.Right = 1;
|
|
lpRect.Bottom = 1;
|
|
}
|
|
int num3 = num1 < lpRect.Left ? lpRect.Left : num1;
|
|
int num4 = num3 >= lpRect.Right ? lpRect.Right - 1 : num3;
|
|
int num5 = num2 < lpRect.Top ? lpRect.Top : num2;
|
|
int num6 = num5 >= lpRect.Bottom ? lpRect.Bottom - 1 : num5;
|
|
this.X = num4 - lpRect.Left;
|
|
this.Y = num6 - lpRect.Top;
|
|
this._invokeOutstanding = false;
|
|
}
|
|
|
|
public int X
|
|
{
|
|
get => this._x;
|
|
private set
|
|
{
|
|
if (value == this._x)
|
|
return;
|
|
this._x = value;
|
|
this.FirePropertyChanged(nameof(X));
|
|
}
|
|
}
|
|
|
|
public int Y
|
|
{
|
|
get => this._y;
|
|
private set
|
|
{
|
|
if (value == this._y)
|
|
return;
|
|
this._y = value;
|
|
this.FirePropertyChanged(nameof(Y));
|
|
}
|
|
}
|
|
|
|
public static void GetCursorScreenPosition(out int x, out int y)
|
|
{
|
|
POINT lpPoint;
|
|
if (GetCursorPos(out lpPoint))
|
|
{
|
|
x = lpPoint.X;
|
|
y = lpPoint.Y;
|
|
}
|
|
else
|
|
x = y = 0;
|
|
}
|
|
|
|
public override string ToString() => $"{{MousePosition ({X}, {Y})}}";
|
|
|
|
[DllImport("User32.dll")]
|
|
private static extern bool GetCursorPos(out POINT lpPoint);
|
|
|
|
[DllImport("User32.dll")]
|
|
private static extern bool GetWindowRect(IntPtr hwnd, out RECT lpRect);
|
|
|
|
private struct POINT
|
|
{
|
|
public int X;
|
|
public int Y;
|
|
}
|
|
}
|
|
}
|