Files

118 lines
4.6 KiB
C#
Raw Permalink Normal View History

2025-08-23 21:39:21 +08:00
using Ink_Canvas.Helpers;
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Input;
namespace Ink_Canvas
{
public partial class MainWindow : PerformanceTransparentWin {
private bool _stylusInverted = false;
private int _stylusInvertedInit = 0;
private bool IsStylusInverted {
get => _stylusInverted;
set {
if (value && !_stylusInverted) {
StylusInverted?.Invoke(this,new RoutedEventArgs());
} else if (!value && _stylusInverted) {
StylusUnInverted?.Invoke(this,new RoutedEventArgs());
}
_stylusInverted = value;
}
}
public event EventHandler<RoutedEventArgs> StylusInverted;
public event EventHandler<RoutedEventArgs> StylusUnInverted;
public void UpdateStylusPenInvertedStatus(bool isInverted) {
if (_stylusInvertedInit == 0) {
_stylusInverted = isInverted;
_stylusInvertedInit = 1;
} else {
IsStylusInverted = isInverted;
}
}
#region StylusInAirMove和StylusMove事件
public void mainWin_StylusInAirMove(object sender, StylusEventArgs e) {
UpdateStylusPenInvertedStatus(e.Inverted);
}
public void mainWin_StylusMove(object sender, StylusEventArgs e) {
UpdateStylusPenInvertedStatus(e.Inverted);
}
#endregion
#region Windows Ink
public void StylusInvertedListenerInit() {
StylusInverted += StylusInvertedEvent;
StylusUnInverted += StylusUnInvertedEvent;
}
private void StylusInvertedEvent(object sender, RoutedEventArgs e) {
if (Settings.Gesture.WindowsInkEraserButtonAction != 0) {
if (SelectedMode != ICCToolsEnum.EraseByGeometryMode &&
SelectedMode != ICCToolsEnum.EraseByStrokeMode) {
GridEraserOverlay.Visibility = Visibility.Visible;
isUsingStrokesEraser = Settings.Gesture.WindowsInkEraserButtonAction == 1;
} else if (SelectedMode == (Settings.Gesture.WindowsInkEraserButtonAction == 2
? ICCToolsEnum.EraseByStrokeMode
: ICCToolsEnum.EraseByGeometryMode)) {
isUsingStrokesEraser = Settings.Gesture.WindowsInkEraserButtonAction == 1;
}
ForceUpdateToolSelection((Settings.Gesture.WindowsInkEraserButtonAction == 2
? ICCToolsEnum.EraseByGeometryMode
: ICCToolsEnum.EraseByStrokeMode));
}
}
private void StylusUnInvertedEvent(object sender, RoutedEventArgs e) {
if (Settings.Gesture.WindowsInkEraserButtonAction != 0) {
if (SelectedMode != ICCToolsEnum.EraseByGeometryMode &&
SelectedMode != ICCToolsEnum.EraseByStrokeMode) {
GridEraserOverlay.Visibility = Visibility.Collapsed;
} else if (SelectedMode == (Settings.Gesture.WindowsInkEraserButtonAction == 2
? ICCToolsEnum.EraseByStrokeMode
: ICCToolsEnum.EraseByGeometryMode)) {
isUsingStrokesEraser = Settings.Gesture.WindowsInkEraserButtonAction == 2;
}
}
ForceUpdateToolSelection(null);
}
#endregion
#region Windows Ink
private void mainWin_StylusButtonUp(object sender, StylusButtonEventArgs e) {
if (e.StylusButton.Guid == StylusPointProperties.BarrelButton.Id) {
if (Settings.Gesture.WindowsInkBarrelButtonAction == 0) return;
if (Settings.Gesture.WindowsInkBarrelButtonAction == 1) SelectIcon_MouseUp(null,null);
else if (Settings.Gesture.WindowsInkBarrelButtonAction == 2) {
SymbolIconSelect_MouseUp(null,null);
inkCanvas.Select(inkCanvas.Strokes);
}
else if (Settings.Gesture.WindowsInkBarrelButtonAction == 3) SymbolIconUndo_MouseUp(null,null);
}
}
private void mainWin_StylusButtonDown(object sender, StylusButtonEventArgs e) {
if (e.StylusButton.Guid == StylusPointProperties.BarrelButton.Id) {
}
}
#endregion
}
}