Initial commit to new repository
This commit is contained in:
196
.decompiledproj/AxCopilot/Views/EyeDropperWindow.cs
Normal file
196
.decompiledproj/AxCopilot/Views/EyeDropperWindow.cs
Normal file
@@ -0,0 +1,196 @@
|
||||
using System;
|
||||
using System.CodeDom.Compiler;
|
||||
using System.ComponentModel;
|
||||
using System.Diagnostics;
|
||||
using System.Drawing;
|
||||
using System.Runtime.InteropServices;
|
||||
using System.Windows;
|
||||
using System.Windows.Controls;
|
||||
using System.Windows.Forms;
|
||||
using System.Windows.Input;
|
||||
using System.Windows.Markup;
|
||||
using System.Windows.Media;
|
||||
using System.Windows.Shapes;
|
||||
|
||||
namespace AxCopilot.Views;
|
||||
|
||||
public class EyeDropperWindow : Window, IComponentConnector
|
||||
{
|
||||
private struct POINT
|
||||
{
|
||||
public int X;
|
||||
|
||||
public int Y;
|
||||
}
|
||||
|
||||
private readonly System.Drawing.Rectangle _screenBounds;
|
||||
|
||||
internal Canvas RootCanvas;
|
||||
|
||||
internal Border Magnifier;
|
||||
|
||||
internal Ellipse MagPreview;
|
||||
|
||||
internal Border HexLabel;
|
||||
|
||||
internal TextBlock HexLabelText;
|
||||
|
||||
private bool _contentLoaded;
|
||||
|
||||
public System.Drawing.Color? PickedColor { get; private set; }
|
||||
|
||||
public double PickX { get; private set; }
|
||||
|
||||
public double PickY { get; private set; }
|
||||
|
||||
[DllImport("user32.dll")]
|
||||
private static extern bool GetCursorPos(out POINT lpPoint);
|
||||
|
||||
[DllImport("gdi32.dll")]
|
||||
private static extern uint GetPixel(nint hdc, int x, int y);
|
||||
|
||||
[DllImport("user32.dll")]
|
||||
private static extern nint GetDC(nint hWnd);
|
||||
|
||||
[DllImport("user32.dll")]
|
||||
private static extern int ReleaseDC(nint hWnd, nint hDC);
|
||||
|
||||
public EyeDropperWindow()
|
||||
{
|
||||
InitializeComponent();
|
||||
_screenBounds = GetAllScreenBounds();
|
||||
base.Left = _screenBounds.X;
|
||||
base.Top = _screenBounds.Y;
|
||||
base.Width = _screenBounds.Width;
|
||||
base.Height = _screenBounds.Height;
|
||||
base.Loaded += delegate
|
||||
{
|
||||
Magnifier.Visibility = Visibility.Visible;
|
||||
HexLabel.Visibility = Visibility.Visible;
|
||||
};
|
||||
}
|
||||
|
||||
private void Window_MouseMove(object sender, System.Windows.Input.MouseEventArgs e)
|
||||
{
|
||||
//IL_0008: Unknown result type (might be due to invalid IL or missing references)
|
||||
//IL_000d: Unknown result type (might be due to invalid IL or missing references)
|
||||
Point position = e.GetPosition(RootCanvas);
|
||||
System.Drawing.Color screenPixelColor = GetScreenPixelColor();
|
||||
Canvas.SetLeft(Magnifier, ((Point)(ref position)).X + 16.0);
|
||||
Canvas.SetTop(Magnifier, ((Point)(ref position)).Y - 100.0);
|
||||
Canvas.SetLeft(HexLabel, ((Point)(ref position)).X + 16.0);
|
||||
Canvas.SetTop(HexLabel, ((Point)(ref position)).Y - 10.0);
|
||||
System.Windows.Media.Color color = System.Windows.Media.Color.FromRgb(screenPixelColor.R, screenPixelColor.G, screenPixelColor.B);
|
||||
MagPreview.Fill = new SolidColorBrush(color);
|
||||
HexLabelText.Text = $"#{screenPixelColor.R:X2}{screenPixelColor.G:X2}{screenPixelColor.B:X2}";
|
||||
}
|
||||
|
||||
private void Window_MouseDown(object sender, MouseButtonEventArgs e)
|
||||
{
|
||||
if (e.ChangedButton == MouseButton.Left)
|
||||
{
|
||||
PickedColor = GetScreenPixelColor();
|
||||
GetCursorPos(out var lpPoint);
|
||||
PickX = lpPoint.X;
|
||||
PickY = lpPoint.Y;
|
||||
Close();
|
||||
}
|
||||
else if (e.ChangedButton == MouseButton.Right)
|
||||
{
|
||||
PickedColor = null;
|
||||
Close();
|
||||
}
|
||||
}
|
||||
|
||||
private void Window_KeyDown(object sender, System.Windows.Input.KeyEventArgs e)
|
||||
{
|
||||
//IL_0002: Unknown result type (might be due to invalid IL or missing references)
|
||||
//IL_0009: Invalid comparison between Unknown and I4
|
||||
if ((int)e.Key == 13)
|
||||
{
|
||||
PickedColor = null;
|
||||
Close();
|
||||
}
|
||||
}
|
||||
|
||||
private static System.Drawing.Color GetScreenPixelColor()
|
||||
{
|
||||
GetCursorPos(out var lpPoint);
|
||||
nint dC = GetDC(IntPtr.Zero);
|
||||
try
|
||||
{
|
||||
uint pixel = GetPixel(dC, lpPoint.X, lpPoint.Y);
|
||||
int red = (int)(pixel & 0xFF);
|
||||
int green = (int)((pixel >> 8) & 0xFF);
|
||||
int blue = (int)((pixel >> 16) & 0xFF);
|
||||
return System.Drawing.Color.FromArgb(red, green, blue);
|
||||
}
|
||||
finally
|
||||
{
|
||||
ReleaseDC(IntPtr.Zero, dC);
|
||||
}
|
||||
}
|
||||
|
||||
private static System.Drawing.Rectangle GetAllScreenBounds()
|
||||
{
|
||||
int num = 0;
|
||||
int num2 = 0;
|
||||
int num3 = 0;
|
||||
int num4 = 0;
|
||||
Screen[] allScreens = Screen.AllScreens;
|
||||
foreach (Screen screen in allScreens)
|
||||
{
|
||||
System.Drawing.Rectangle bounds = screen.Bounds;
|
||||
num = Math.Min(num, bounds.Left);
|
||||
num2 = Math.Min(num2, bounds.Top);
|
||||
num3 = Math.Max(num3, bounds.Right);
|
||||
num4 = Math.Max(num4, bounds.Bottom);
|
||||
}
|
||||
return new System.Drawing.Rectangle(num, num2, num3 - num, num4 - num2);
|
||||
}
|
||||
|
||||
[DebuggerNonUserCode]
|
||||
[GeneratedCode("PresentationBuildTasks", "10.0.5.0")]
|
||||
public void InitializeComponent()
|
||||
{
|
||||
if (!_contentLoaded)
|
||||
{
|
||||
_contentLoaded = true;
|
||||
Uri resourceLocator = new Uri("/AxCopilot;component/views/eyedropperwindow.xaml", UriKind.Relative);
|
||||
System.Windows.Application.LoadComponent(this, resourceLocator);
|
||||
}
|
||||
}
|
||||
|
||||
[DebuggerNonUserCode]
|
||||
[GeneratedCode("PresentationBuildTasks", "10.0.5.0")]
|
||||
[EditorBrowsable(EditorBrowsableState.Never)]
|
||||
void IComponentConnector.Connect(int connectionId, object target)
|
||||
{
|
||||
switch (connectionId)
|
||||
{
|
||||
case 1:
|
||||
((EyeDropperWindow)target).MouseDown += Window_MouseDown;
|
||||
((EyeDropperWindow)target).MouseMove += Window_MouseMove;
|
||||
((EyeDropperWindow)target).KeyDown += Window_KeyDown;
|
||||
break;
|
||||
case 2:
|
||||
RootCanvas = (Canvas)target;
|
||||
break;
|
||||
case 3:
|
||||
Magnifier = (Border)target;
|
||||
break;
|
||||
case 4:
|
||||
MagPreview = (Ellipse)target;
|
||||
break;
|
||||
case 5:
|
||||
HexLabel = (Border)target;
|
||||
break;
|
||||
case 6:
|
||||
HexLabelText = (TextBlock)target;
|
||||
break;
|
||||
default:
|
||||
_contentLoaded = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user