add:新版手掌擦
This commit is contained in:
@@ -851,6 +851,16 @@
|
|||||||
</ui:SimpleStackPanel>
|
</ui:SimpleStackPanel>
|
||||||
<TextBlock Text="# 允许选中墨迹后对墨迹进行双指或多指缩放操作(此设置不受“允许双指旋转”设置的影响)" TextWrapping="Wrap"
|
<TextBlock Text="# 允许选中墨迹后对墨迹进行双指或多指缩放操作(此设置不受“允许双指旋转”设置的影响)" TextWrapping="Wrap"
|
||||||
Foreground="#a1a1aa" />
|
Foreground="#a1a1aa" />
|
||||||
|
<Line HorizontalAlignment="Center" X1="0" Y1="0" X2="400" Y2="0" Stroke="#3f3f46"
|
||||||
|
StrokeThickness="1" Margin="0,4,0,4" />
|
||||||
|
<ui:SimpleStackPanel Orientation="Horizontal" HorizontalAlignment="Left">
|
||||||
|
<TextBlock Foreground="#fafafa" Text="启用手掌擦" VerticalAlignment="Center"
|
||||||
|
FontSize="14" Margin="0,0,16,0" />
|
||||||
|
<ui:ToggleSwitch OnContent="" OffContent="" Name="ToggleSwitchEnablePalmEraser"
|
||||||
|
IsOn="False" FontFamily="Microsoft YaHei UI" FontWeight="Bold"
|
||||||
|
Toggled="ToggleSwitchEnablePalmEraser_Toggled" />
|
||||||
|
</ui:SimpleStackPanel>
|
||||||
|
<TextBlock Text="# 开启后,两个及以上触点且触摸面积较大时自动切换为橡皮擦,抬手后恢复原编辑模式。" TextWrapping="Wrap" Foreground="#a1a1aa" />
|
||||||
</ui:SimpleStackPanel>
|
</ui:SimpleStackPanel>
|
||||||
</GroupBox>
|
</GroupBox>
|
||||||
<GroupBox Name="GroupBoxInkRecognition">
|
<GroupBox Name="GroupBoxInkRecognition">
|
||||||
|
|||||||
@@ -2189,5 +2189,11 @@ namespace Ink_Canvas {
|
|||||||
Settings.Automation.IsAutoEnterAnnotationAfterKillHite = ToggleSwitchAutoEnterAnnotationAfterKillHite.IsOn;
|
Settings.Automation.IsAutoEnterAnnotationAfterKillHite = ToggleSwitchAutoEnterAnnotationAfterKillHite.IsOn;
|
||||||
SaveSettingsToFile();
|
SaveSettingsToFile();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void ToggleSwitchEnablePalmEraser_Toggled(object sender, RoutedEventArgs e) {
|
||||||
|
if (!isLoaded) return;
|
||||||
|
Settings.Canvas.EnablePalmEraser = ToggleSwitchEnablePalmEraser.IsOn;
|
||||||
|
SaveSettingsToFile();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -554,6 +554,11 @@ namespace Ink_Canvas {
|
|||||||
Settings.Canvas = new Canvas();
|
Settings.Canvas = new Canvas();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Palm Eraser
|
||||||
|
if (Settings.Canvas != null) {
|
||||||
|
ToggleSwitchEnablePalmEraser.IsOn = Settings.Canvas.EnablePalmEraser;
|
||||||
|
}
|
||||||
|
|
||||||
// Advanced
|
// Advanced
|
||||||
if (Settings.Advanced != null) {
|
if (Settings.Advanced != null) {
|
||||||
TouchMultiplierSlider.Value = Settings.Advanced.TouchMultiplier;
|
TouchMultiplierSlider.Value = Settings.Advanced.TouchMultiplier;
|
||||||
|
|||||||
@@ -219,6 +219,11 @@ namespace Ink_Canvas {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 手掌擦相关变量
|
||||||
|
private bool isPalmEraserActive = false;
|
||||||
|
private InkCanvasEditingMode palmEraserLastEditingMode = InkCanvasEditingMode.Ink;
|
||||||
|
private bool palmEraserLastIsHighlighter = false;
|
||||||
|
|
||||||
private void inkCanvas_PreviewTouchDown(object sender, TouchEventArgs e) {
|
private void inkCanvas_PreviewTouchDown(object sender, TouchEventArgs e) {
|
||||||
// 橡皮状态下不做任何切换,直接return,保证橡皮可持续
|
// 橡皮状态下不做任何切换,直接return,保证橡皮可持续
|
||||||
if (inkCanvas.EditingMode == InkCanvasEditingMode.EraseByPoint) {
|
if (inkCanvas.EditingMode == InkCanvasEditingMode.EraseByPoint) {
|
||||||
@@ -231,6 +236,19 @@ namespace Ink_Canvas {
|
|||||||
BlackboardUIGridForInkReplay.IsHitTestVisible = false;
|
BlackboardUIGridForInkReplay.IsHitTestVisible = false;
|
||||||
|
|
||||||
dec.Add(e.TouchDevice.Id);
|
dec.Add(e.TouchDevice.Id);
|
||||||
|
// Palm Eraser 逻辑
|
||||||
|
if (Settings.Canvas.EnablePalmEraser && dec.Count >= 2 && !isPalmEraserActive) {
|
||||||
|
var bounds = e.GetTouchPoint(inkCanvas).Bounds;
|
||||||
|
double palmThreshold = 40; // 触摸面积阈值,可根据实际调整
|
||||||
|
if (bounds.Width >= palmThreshold || bounds.Height >= palmThreshold) {
|
||||||
|
// 记录当前编辑模式和高光状态
|
||||||
|
palmEraserLastEditingMode = inkCanvas.EditingMode;
|
||||||
|
palmEraserLastIsHighlighter = drawingAttributes.IsHighlighter;
|
||||||
|
// 切换为橡皮擦
|
||||||
|
EraserIcon_Click(null, null);
|
||||||
|
isPalmEraserActive = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
//设备1个的时候,记录中心点
|
//设备1个的时候,记录中心点
|
||||||
if (dec.Count == 1) {
|
if (dec.Count == 1) {
|
||||||
var touchPoint = e.GetTouchPoint(inkCanvas);
|
var touchPoint = e.GetTouchPoint(inkCanvas);
|
||||||
@@ -258,13 +276,30 @@ namespace Ink_Canvas {
|
|||||||
|
|
||||||
private void inkCanvas_PreviewTouchUp(object sender, TouchEventArgs e) {
|
private void inkCanvas_PreviewTouchUp(object sender, TouchEventArgs e) {
|
||||||
// 橡皮状态下不做任何切换,直接return,保证橡皮可持续
|
// 橡皮状态下不做任何切换,直接return,保证橡皮可持续
|
||||||
if (inkCanvas.EditingMode == InkCanvasEditingMode.EraseByPoint) {
|
if (inkCanvas.EditingMode == InkCanvasEditingMode.EraseByPoint && !isPalmEraserActive) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
inkCanvas.ReleaseAllTouchCaptures();
|
inkCanvas.ReleaseAllTouchCaptures();
|
||||||
ViewboxFloatingBar.IsHitTestVisible = true;
|
ViewboxFloatingBar.IsHitTestVisible = true;
|
||||||
BlackboardUIGridForInkReplay.IsHitTestVisible = true;
|
BlackboardUIGridForInkReplay.IsHitTestVisible = true;
|
||||||
|
|
||||||
|
// Palm Eraser 逻辑:所有点抬起后恢复原编辑模式
|
||||||
|
dec.Remove(e.TouchDevice.Id);
|
||||||
|
if (isPalmEraserActive && dec.Count == 0) {
|
||||||
|
// 恢复高光状态
|
||||||
|
drawingAttributes.IsHighlighter = palmEraserLastIsHighlighter;
|
||||||
|
// 恢复编辑模式
|
||||||
|
if (inkCanvas.EditingMode == InkCanvasEditingMode.EraseByPoint) {
|
||||||
|
if (palmEraserLastEditingMode == InkCanvasEditingMode.Ink) {
|
||||||
|
PenIcon_Click(null, null);
|
||||||
|
} else if (palmEraserLastEditingMode == InkCanvasEditingMode.Select) {
|
||||||
|
SymbolIconSelect_MouseUp(null, null);
|
||||||
|
} else {
|
||||||
|
inkCanvas.EditingMode = palmEraserLastEditingMode;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
isPalmEraserActive = false;
|
||||||
|
}
|
||||||
// 新增:几何绘制模式下,触摸抬手时自动落笔
|
// 新增:几何绘制模式下,触摸抬手时自动落笔
|
||||||
if (drawingShapeMode != 0) {
|
if (drawingShapeMode != 0) {
|
||||||
var mouseArgs = new MouseButtonEventArgs(Mouse.PrimaryDevice, 0, MouseButton.Left)
|
var mouseArgs = new MouseButtonEventArgs(Mouse.PrimaryDevice, 0, MouseButton.Left)
|
||||||
@@ -281,7 +316,6 @@ namespace Ink_Canvas {
|
|||||||
if (lastInkCanvasEditingMode != InkCanvasEditingMode.EraseByPoint) {
|
if (lastInkCanvasEditingMode != InkCanvasEditingMode.EraseByPoint) {
|
||||||
inkCanvas.EditingMode = lastInkCanvasEditingMode;
|
inkCanvas.EditingMode = lastInkCanvasEditingMode;
|
||||||
}
|
}
|
||||||
dec.Remove(e.TouchDevice.Id);
|
|
||||||
inkCanvas.Opacity = 1;
|
inkCanvas.Opacity = 1;
|
||||||
|
|
||||||
if (dec.Count == 0)
|
if (dec.Count == 0)
|
||||||
|
|||||||
@@ -77,6 +77,8 @@ namespace Ink_Canvas
|
|||||||
public OptionalOperation HyperbolaAsymptoteOption { get; set; } = OptionalOperation.Ask;
|
public OptionalOperation HyperbolaAsymptoteOption { get; set; } = OptionalOperation.Ask;
|
||||||
[JsonProperty("isCompressPicturesUploaded")]
|
[JsonProperty("isCompressPicturesUploaded")]
|
||||||
public bool IsCompressPicturesUploaded { get; set; } = false;
|
public bool IsCompressPicturesUploaded { get; set; } = false;
|
||||||
|
[JsonProperty("enablePalmEraser")]
|
||||||
|
public bool EnablePalmEraser { get; set; } = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
public enum OptionalOperation
|
public enum OptionalOperation
|
||||||
|
|||||||
Reference in New Issue
Block a user