feat: implement and move touch controls to separate namespace

This commit is contained in:
2026-05-13 12:22:54 +03:00
parent 9f37ca9610
commit ec95eef375
4 changed files with 83 additions and 42 deletions
+41
View File
@@ -0,0 +1,41 @@
using Avalonia.Controls;
using Avalonia.Input;
using GSS2.ViewModels;
using GSS2.Views;
namespace GSS2.Controls;
public class TouchNumericUpDown : NumericUpDown
{
protected override Type StyleKeyOverride => typeof(NumericUpDown);
public TouchNumericUpDown()
: base()
{
AddHandler(PointerPressedEvent, OnPointerPressed, handledEventsToo: true);
}
private void OnPointerPressed(object? sender, PointerPressedEventArgs ea)
{
if (ea.Pointer.Type != PointerType.Touch)
return;
var navigation = (Application.Current as Application)?.Navigation;
if (navigation is null)
return;
var keyboardViewModel = new NumericKeyboardViewModel(navigation);
keyboardViewModel.Value = (double?)Value;
keyboardViewModel.Closes += (_, ea) =>
{
if (ea is null)
return;
Value = (decimal)ea.Value;
};
var keyboardView = new NumericKeyboardView()
{
DataContext = keyboardViewModel
};
navigation.NavigateTo(keyboardView);
}
}
+42
View File
@@ -0,0 +1,42 @@
using Avalonia.Controls;
using Avalonia.Input;
using GSS2.ViewModels;
using GSS2.Views;
namespace GSS2.Controls;
public class TouchTextBox : TextBox
{
protected override Type StyleKeyOverride => typeof(TextBox);
public TouchTextBox()
: base()
{
AddHandler(PointerPressedEvent, OnPointerPressed, handledEventsToo: true);
}
private void OnPointerPressed(object? sender, PointerPressedEventArgs ea)
{
// if (ea.Pointer.Type != PointerType.Touch)
// return;
var navigation = (Application.Current as Application)?.Navigation;
if (navigation is null)
return;
var keyboardViewModel = new TextKeyboardViewModel(navigation);
keyboardViewModel.Value = Text;
keyboardViewModel.IsMultiline = AcceptsReturn;
keyboardViewModel.Closes += (_, ea) =>
{
if (ea is null)
return;
Text = ea;
};
var keyboardView = new TextKeyboardView()
{
DataContext = keyboardViewModel
};
navigation.NavigateTo(keyboardView);
}
}
-22
View File
@@ -1,22 +0,0 @@
using Avalonia;
using Avalonia.Controls;
using Avalonia.Input;
namespace GSS2;
public class TouchNumericUpDown : NumericUpDown
{
protected override Type StyleKeyOverride => typeof(NumericUpDown);
public TouchNumericUpDown()
: base()
{
AddHandler(PointerPressedEvent, OnPointerPressed, handledEventsToo: true);
}
private void OnPointerPressed(object? sender, PointerPressedEventArgs ea)
{
Console.WriteLine($"TODO: process TouchNumericUpDown.PointerPressed event");
}
}
-20
View File
@@ -1,20 +0,0 @@
using Avalonia.Controls;
using Avalonia.Input;
namespace GSS2;
public class TouchTextBox : TextBox
{
protected override Type StyleKeyOverride => typeof(TextBox);
public TouchTextBox()
: base()
{
AddHandler(PointerPressedEvent, OnPointerPressed, handledEventsToo: true);
}
private void OnPointerPressed(object? sender, PointerPressedEventArgs ea)
{
Console.WriteLine($"TODO: process TouchTextBox.PointerPressed event");
}
}