profile influences configuration
This commit is contained in:
EugeneTes
2026-05-15 11:54:36 +02:00
parent 2be13501fa
commit 8704d0b5ac
42 changed files with 2467 additions and 1023 deletions

View File

@@ -1,22 +1,13 @@
using Avalonia.Controls;
using Avalonia.Input;
using Avalonia.Media.Imaging;
using LindtLeerformPlugin.ViewModels;
namespace LindtLeerformPlugin.Views;
public partial class CalibrationWindow : Window
{
private static readonly Cursor HandCursor = new(StandardCursorType.Hand);
private static readonly Cursor DefaultCursor = new(StandardCursorType.Arrow);
public CalibrationWindow()
{
InitializeComponent();
PreviewImageControl.PointerMoved += OnPreviewPointerMoved;
PreviewImageControl.PointerPressed += OnPreviewPointerPressed;
PreviewImageControl.PointerExited += OnPreviewPointerExited;
}
protected override void OnClosing(WindowClosingEventArgs e)
@@ -24,64 +15,4 @@ public partial class CalibrationWindow : Window
(DataContext as CalibrationWindowViewModel)?.Dispose();
base.OnClosing(e);
}
private (int x, int y)? ToImageCoordinates(Avalonia.Point pointerPos)
{
if (PreviewImageControl.Source is not Bitmap bitmap)
return null;
var ctrlSize = PreviewImageControl.Bounds.Size;
var imgSize = bitmap.Size;
if (ctrlSize.Width <= 0 || ctrlSize.Height <= 0 || imgSize.Width <= 0 || imgSize.Height <= 0)
return null;
var scale = System.Math.Min(ctrlSize.Width / imgSize.Width, ctrlSize.Height / imgSize.Height);
var displayW = imgSize.Width * scale;
var displayH = imgSize.Height * scale;
var offsetX = (ctrlSize.Width - displayW) / 2;
var offsetY = (ctrlSize.Height - displayH) / 2;
var imgX = (pointerPos.X - offsetX) / scale;
var imgY = (pointerPos.Y - offsetY) / scale;
if (imgX < 0 || imgY < 0 || imgX >= imgSize.Width || imgY >= imgSize.Height)
return null;
return ((int)imgX, (int)imgY);
}
private void OnPreviewPointerMoved(object? sender, PointerEventArgs e)
{
if (DataContext is not CalibrationWindowViewModel vm)
return;
var coords = ToImageCoordinates(e.GetPosition(PreviewImageControl));
if (coords == null)
{
PreviewImageControl.Cursor = DefaultCursor;
return;
}
var cellIndex = vm.HitTestCell(coords.Value.x, coords.Value.y);
PreviewImageControl.Cursor = cellIndex.HasValue ? HandCursor : DefaultCursor;
}
private void OnPreviewPointerExited(object? sender, PointerEventArgs e)
{
PreviewImageControl.Cursor = DefaultCursor;
}
private async void OnPreviewPointerPressed(object? sender, PointerPressedEventArgs e)
{
if (DataContext is not CalibrationWindowViewModel vm)
return;
if (!e.GetCurrentPoint(PreviewImageControl).Properties.IsLeftButtonPressed)
return;
var coords = ToImageCoordinates(e.GetPosition(PreviewImageControl));
if (coords == null)
return;
await vm.ShowCellHistogramAsync(coords.Value.x, coords.Value.y, this);
}
}