fix:触摸问题
This commit is contained in:
@@ -2869,7 +2869,7 @@
|
|||||||
<Label Name="Label" Visibility="Collapsed" Foreground="Gray" Content="0" />
|
<Label Name="Label" Visibility="Collapsed" Foreground="Gray" Content="0" />
|
||||||
<Grid Name="InkCanvasGridForInkReplay">
|
<Grid Name="InkCanvasGridForInkReplay">
|
||||||
<InkCanvas x:Name="inkCanvas" ForceCursor="True" UseCustomCursor="True"
|
<InkCanvas x:Name="inkCanvas" ForceCursor="True" UseCustomCursor="True"
|
||||||
TouchUp="Main_Grid_TouchUp" TouchDown="Main_Grid_TouchDown"
|
TouchDown="Main_Grid_TouchDown"
|
||||||
TouchMove="inkCanvas_TouchMove"
|
TouchMove="inkCanvas_TouchMove"
|
||||||
ManipulationDelta="Main_Grid_ManipulationDelta"
|
ManipulationDelta="Main_Grid_ManipulationDelta"
|
||||||
ManipulationCompleted="Main_Grid_ManipulationCompleted"
|
ManipulationCompleted="Main_Grid_ManipulationCompleted"
|
||||||
|
|||||||
@@ -109,8 +109,6 @@ namespace Ink_Canvas {
|
|||||||
// 注册输入事件
|
// 注册输入事件
|
||||||
inkCanvas.PreviewMouseDown += inkCanvas_PreviewMouseDown;
|
inkCanvas.PreviewMouseDown += inkCanvas_PreviewMouseDown;
|
||||||
inkCanvas.StylusDown += inkCanvas_StylusDown;
|
inkCanvas.StylusDown += inkCanvas_StylusDown;
|
||||||
inkCanvas.TouchDown += inkCanvas_TouchDown;
|
|
||||||
inkCanvas.TouchUp += inkCanvas_TouchUp;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
@@ -182,6 +180,7 @@ namespace Ink_Canvas {
|
|||||||
public static Settings Settings = new Settings();
|
public static Settings Settings = new Settings();
|
||||||
public static string settingsFileName = "Settings.json";
|
public static string settingsFileName = "Settings.json";
|
||||||
private bool isLoaded = false;
|
private bool isLoaded = false;
|
||||||
|
private bool forcePointEraser = false;
|
||||||
|
|
||||||
private void Window_Loaded(object sender, RoutedEventArgs e) {
|
private void Window_Loaded(object sender, RoutedEventArgs e) {
|
||||||
loadPenCanvas();
|
loadPenCanvas();
|
||||||
@@ -565,7 +564,7 @@ namespace Ink_Canvas {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// 添加一个辅助方法,根据当前编辑模式设置光标
|
// 添加一个辅助方法,根据当前编辑模式设置光标
|
||||||
private void SetCursorBasedOnEditingMode(InkCanvas canvas)
|
public void SetCursorBasedOnEditingMode(InkCanvas canvas)
|
||||||
{
|
{
|
||||||
if (Settings.Canvas.IsShowCursor) {
|
if (Settings.Canvas.IsShowCursor) {
|
||||||
canvas.UseCustomCursor = true;
|
canvas.UseCustomCursor = true;
|
||||||
@@ -619,26 +618,7 @@ namespace Ink_Canvas {
|
|||||||
SetCursorBasedOnEditingMode(inkCanvas);
|
SetCursorBasedOnEditingMode(inkCanvas);
|
||||||
}
|
}
|
||||||
|
|
||||||
// 触摸输入,不隐藏光标
|
|
||||||
private void inkCanvas_TouchDown(object sender, TouchEventArgs e)
|
|
||||||
{
|
|
||||||
// 使用辅助方法设置光标
|
|
||||||
SetCursorBasedOnEditingMode(inkCanvas);
|
|
||||||
}
|
|
||||||
|
|
||||||
// 触摸结束,恢复光标
|
// 触摸结束,恢复光标
|
||||||
private void inkCanvas_TouchUp(object sender, TouchEventArgs e)
|
|
||||||
{
|
|
||||||
// 使用辅助方法设置光标
|
|
||||||
SetCursorBasedOnEditingMode(inkCanvas);
|
|
||||||
|
|
||||||
// 确保光标可见
|
|
||||||
if (Settings.Canvas.IsShowCursor) {
|
|
||||||
inkCanvas.ForceCursor = true;
|
|
||||||
inkCanvas.UseCustomCursor = true;
|
|
||||||
System.Windows.Forms.Cursor.Show();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
#endregion Definations and Loading
|
#endregion Definations and Loading
|
||||||
|
|
||||||
@@ -1114,5 +1094,34 @@ namespace Ink_Canvas {
|
|||||||
MessageBox.Show($"打开插件管理器时出错: {ex.Message}", "错误", MessageBoxButton.OK, MessageBoxImage.Error);
|
MessageBox.Show($"打开插件管理器时出错: {ex.Message}", "错误", MessageBoxButton.OK, MessageBoxImage.Error);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 在MainWindow类中添加:
|
||||||
|
private void ApplyCurrentEraserShape()
|
||||||
|
{
|
||||||
|
double k = 1;
|
||||||
|
switch (Settings.Canvas.EraserSize)
|
||||||
|
{
|
||||||
|
case 0:
|
||||||
|
k = Settings.Canvas.EraserShapeType == 0 ? 0.5 : 0.7;
|
||||||
|
break;
|
||||||
|
case 1:
|
||||||
|
k = Settings.Canvas.EraserShapeType == 0 ? 0.8 : 0.9;
|
||||||
|
break;
|
||||||
|
case 3:
|
||||||
|
k = Settings.Canvas.EraserShapeType == 0 ? 1.25 : 1.2;
|
||||||
|
break;
|
||||||
|
case 4:
|
||||||
|
k = Settings.Canvas.EraserShapeType == 0 ? 1.5 : 1.3;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
if (Settings.Canvas.EraserShapeType == 0)
|
||||||
|
{
|
||||||
|
inkCanvas.EraserShape = new EllipseStylusShape(k * 90, k * 90);
|
||||||
|
}
|
||||||
|
else if (Settings.Canvas.EraserShapeType == 1)
|
||||||
|
{
|
||||||
|
inkCanvas.EraserShape = new RectangleStylusShape(k * 90 * 0.6, k * 90);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -688,29 +688,13 @@ namespace Ink_Canvas {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void BoardEraserIcon_Click(object sender, RoutedEventArgs e) {
|
private void BoardLassoIcon_Click(object sender, RoutedEventArgs e) {
|
||||||
if (inkCanvas.EditingMode == InkCanvasEditingMode.EraseByPoint ||
|
forceEraser = false;
|
||||||
inkCanvas.EditingMode == InkCanvasEditingMode.EraseByStroke) {
|
forcePointEraser = false;
|
||||||
if (BoardEraserSizePanel.Visibility == Visibility.Collapsed) {
|
isLastTouchEraser = false;
|
||||||
AnimationsHelper.ShowWithSlideFromBottomAndFade(BoardEraserSizePanel);
|
drawingShapeMode = 0;
|
||||||
} else {
|
inkCanvas.EditingMode = InkCanvasEditingMode.Select;
|
||||||
AnimationsHelper.HideWithSlideAndFade(BoardEraserSizePanel);
|
SetCursorBasedOnEditingMode(inkCanvas);
|
||||||
}
|
|
||||||
} else {
|
|
||||||
forceEraser = true;
|
|
||||||
forcePointEraser = true;
|
|
||||||
|
|
||||||
// 使用统一的方法应用橡皮擦形状,确保一致性
|
|
||||||
ApplyCurrentEraserShape();
|
|
||||||
|
|
||||||
inkCanvas.EditingMode = InkCanvasEditingMode.EraseByPoint;
|
|
||||||
drawingShapeMode = 0;
|
|
||||||
|
|
||||||
inkCanvas_EditingModeChanged(inkCanvas, null);
|
|
||||||
CancelSingleFingerDragMode();
|
|
||||||
|
|
||||||
HideSubPanels("eraser");
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private void BoardEraserIconByStrokes_Click(object sender, RoutedEventArgs e) {
|
private void BoardEraserIconByStrokes_Click(object sender, RoutedEventArgs e) {
|
||||||
|
|||||||
@@ -54,7 +54,6 @@ namespace Ink_Canvas {
|
|||||||
drawingShapeMode = 0;
|
drawingShapeMode = 0;
|
||||||
inkCanvas.EditingMode = InkCanvasEditingMode.Ink;
|
inkCanvas.EditingMode = InkCanvasEditingMode.Ink;
|
||||||
CancelSingleFingerDragMode();
|
CancelSingleFingerDragMode();
|
||||||
forceEraser = false;
|
|
||||||
CheckColorTheme();
|
CheckColorTheme();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -553,62 +552,52 @@ namespace Ink_Canvas {
|
|||||||
|
|
||||||
private void BtnColorBlack_Click(object sender, RoutedEventArgs e) {
|
private void BtnColorBlack_Click(object sender, RoutedEventArgs e) {
|
||||||
CheckLastColor(0);
|
CheckLastColor(0);
|
||||||
forceEraser = false;
|
|
||||||
ColorSwitchCheck();
|
ColorSwitchCheck();
|
||||||
}
|
}
|
||||||
|
|
||||||
private void BtnColorRed_Click(object sender, RoutedEventArgs e) {
|
private void BtnColorRed_Click(object sender, RoutedEventArgs e) {
|
||||||
CheckLastColor(1);
|
CheckLastColor(1);
|
||||||
forceEraser = false;
|
|
||||||
ColorSwitchCheck();
|
ColorSwitchCheck();
|
||||||
}
|
}
|
||||||
|
|
||||||
private void BtnColorGreen_Click(object sender, RoutedEventArgs e) {
|
private void BtnColorGreen_Click(object sender, RoutedEventArgs e) {
|
||||||
CheckLastColor(2);
|
CheckLastColor(2);
|
||||||
forceEraser = false;
|
|
||||||
ColorSwitchCheck();
|
ColorSwitchCheck();
|
||||||
}
|
}
|
||||||
|
|
||||||
private void BtnColorBlue_Click(object sender, RoutedEventArgs e) {
|
private void BtnColorBlue_Click(object sender, RoutedEventArgs e) {
|
||||||
CheckLastColor(3);
|
CheckLastColor(3);
|
||||||
forceEraser = false;
|
|
||||||
ColorSwitchCheck();
|
ColorSwitchCheck();
|
||||||
}
|
}
|
||||||
|
|
||||||
private void BtnColorYellow_Click(object sender, RoutedEventArgs e) {
|
private void BtnColorYellow_Click(object sender, RoutedEventArgs e) {
|
||||||
CheckLastColor(4);
|
CheckLastColor(4);
|
||||||
forceEraser = false;
|
|
||||||
ColorSwitchCheck();
|
ColorSwitchCheck();
|
||||||
}
|
}
|
||||||
|
|
||||||
private void BtnColorWhite_Click(object sender, RoutedEventArgs e) {
|
private void BtnColorWhite_Click(object sender, RoutedEventArgs e) {
|
||||||
CheckLastColor(5);
|
CheckLastColor(5);
|
||||||
forceEraser = false;
|
|
||||||
ColorSwitchCheck();
|
ColorSwitchCheck();
|
||||||
}
|
}
|
||||||
|
|
||||||
private void BtnColorPink_Click(object sender, RoutedEventArgs e) {
|
private void BtnColorPink_Click(object sender, RoutedEventArgs e) {
|
||||||
CheckLastColor(6);
|
CheckLastColor(6);
|
||||||
forceEraser = false;
|
|
||||||
ColorSwitchCheck();
|
ColorSwitchCheck();
|
||||||
}
|
}
|
||||||
|
|
||||||
private void BtnColorOrange_Click(object sender, RoutedEventArgs e) {
|
private void BtnColorOrange_Click(object sender, RoutedEventArgs e) {
|
||||||
CheckLastColor(8);
|
CheckLastColor(8);
|
||||||
forceEraser = false;
|
|
||||||
ColorSwitchCheck();
|
ColorSwitchCheck();
|
||||||
}
|
}
|
||||||
|
|
||||||
private void BtnColorTeal_Click(object sender, RoutedEventArgs e) {
|
private void BtnColorTeal_Click(object sender, RoutedEventArgs e) {
|
||||||
CheckLastColor(7);
|
CheckLastColor(7);
|
||||||
forceEraser = false;
|
|
||||||
ColorSwitchCheck();
|
ColorSwitchCheck();
|
||||||
}
|
}
|
||||||
|
|
||||||
private void BtnHighlighterColorBlack_Click(object sender, RoutedEventArgs e) {
|
private void BtnHighlighterColorBlack_Click(object sender, RoutedEventArgs e) {
|
||||||
CheckLastColor(100, true);
|
CheckLastColor(100, true);
|
||||||
penType = 1;
|
penType = 1;
|
||||||
forceEraser = false;
|
|
||||||
CheckPenTypeUIState();
|
CheckPenTypeUIState();
|
||||||
ColorSwitchCheck();
|
ColorSwitchCheck();
|
||||||
}
|
}
|
||||||
@@ -616,7 +605,6 @@ namespace Ink_Canvas {
|
|||||||
private void BtnHighlighterColorWhite_Click(object sender, RoutedEventArgs e) {
|
private void BtnHighlighterColorWhite_Click(object sender, RoutedEventArgs e) {
|
||||||
CheckLastColor(101, true);
|
CheckLastColor(101, true);
|
||||||
penType = 1;
|
penType = 1;
|
||||||
forceEraser = false;
|
|
||||||
CheckPenTypeUIState();
|
CheckPenTypeUIState();
|
||||||
ColorSwitchCheck();
|
ColorSwitchCheck();
|
||||||
}
|
}
|
||||||
@@ -624,7 +612,6 @@ namespace Ink_Canvas {
|
|||||||
private void BtnHighlighterColorRed_Click(object sender, RoutedEventArgs e) {
|
private void BtnHighlighterColorRed_Click(object sender, RoutedEventArgs e) {
|
||||||
CheckLastColor(102, true);
|
CheckLastColor(102, true);
|
||||||
penType = 1;
|
penType = 1;
|
||||||
forceEraser = false;
|
|
||||||
CheckPenTypeUIState();
|
CheckPenTypeUIState();
|
||||||
ColorSwitchCheck();
|
ColorSwitchCheck();
|
||||||
}
|
}
|
||||||
@@ -632,7 +619,6 @@ namespace Ink_Canvas {
|
|||||||
private void BtnHighlighterColorYellow_Click(object sender, RoutedEventArgs e) {
|
private void BtnHighlighterColorYellow_Click(object sender, RoutedEventArgs e) {
|
||||||
CheckLastColor(103, true);
|
CheckLastColor(103, true);
|
||||||
penType = 1;
|
penType = 1;
|
||||||
forceEraser = false;
|
|
||||||
CheckPenTypeUIState();
|
CheckPenTypeUIState();
|
||||||
ColorSwitchCheck();
|
ColorSwitchCheck();
|
||||||
}
|
}
|
||||||
@@ -640,7 +626,6 @@ namespace Ink_Canvas {
|
|||||||
private void BtnHighlighterColorGreen_Click(object sender, RoutedEventArgs e) {
|
private void BtnHighlighterColorGreen_Click(object sender, RoutedEventArgs e) {
|
||||||
CheckLastColor(104, true);
|
CheckLastColor(104, true);
|
||||||
penType = 1;
|
penType = 1;
|
||||||
forceEraser = false;
|
|
||||||
CheckPenTypeUIState();
|
CheckPenTypeUIState();
|
||||||
ColorSwitchCheck();
|
ColorSwitchCheck();
|
||||||
}
|
}
|
||||||
@@ -648,7 +633,6 @@ namespace Ink_Canvas {
|
|||||||
private void BtnHighlighterColorZinc_Click(object sender, RoutedEventArgs e) {
|
private void BtnHighlighterColorZinc_Click(object sender, RoutedEventArgs e) {
|
||||||
CheckLastColor(105, true);
|
CheckLastColor(105, true);
|
||||||
penType = 1;
|
penType = 1;
|
||||||
forceEraser = false;
|
|
||||||
CheckPenTypeUIState();
|
CheckPenTypeUIState();
|
||||||
ColorSwitchCheck();
|
ColorSwitchCheck();
|
||||||
}
|
}
|
||||||
@@ -656,7 +640,6 @@ namespace Ink_Canvas {
|
|||||||
private void BtnHighlighterColorBlue_Click(object sender, RoutedEventArgs e) {
|
private void BtnHighlighterColorBlue_Click(object sender, RoutedEventArgs e) {
|
||||||
CheckLastColor(106, true);
|
CheckLastColor(106, true);
|
||||||
penType = 1;
|
penType = 1;
|
||||||
forceEraser = false;
|
|
||||||
CheckPenTypeUIState();
|
CheckPenTypeUIState();
|
||||||
ColorSwitchCheck();
|
ColorSwitchCheck();
|
||||||
}
|
}
|
||||||
@@ -664,7 +647,6 @@ namespace Ink_Canvas {
|
|||||||
private void BtnHighlighterColorPurple_Click(object sender, RoutedEventArgs e) {
|
private void BtnHighlighterColorPurple_Click(object sender, RoutedEventArgs e) {
|
||||||
CheckLastColor(107, true);
|
CheckLastColor(107, true);
|
||||||
penType = 1;
|
penType = 1;
|
||||||
forceEraser = false;
|
|
||||||
CheckPenTypeUIState();
|
CheckPenTypeUIState();
|
||||||
ColorSwitchCheck();
|
ColorSwitchCheck();
|
||||||
}
|
}
|
||||||
@@ -672,7 +654,6 @@ namespace Ink_Canvas {
|
|||||||
private void BtnHighlighterColorTeal_Click(object sender, RoutedEventArgs e) {
|
private void BtnHighlighterColorTeal_Click(object sender, RoutedEventArgs e) {
|
||||||
CheckLastColor(108, true);
|
CheckLastColor(108, true);
|
||||||
penType = 1;
|
penType = 1;
|
||||||
forceEraser = false;
|
|
||||||
CheckPenTypeUIState();
|
CheckPenTypeUIState();
|
||||||
ColorSwitchCheck();
|
ColorSwitchCheck();
|
||||||
}
|
}
|
||||||
@@ -680,7 +661,6 @@ namespace Ink_Canvas {
|
|||||||
private void BtnHighlighterColorOrange_Click(object sender, RoutedEventArgs e) {
|
private void BtnHighlighterColorOrange_Click(object sender, RoutedEventArgs e) {
|
||||||
CheckLastColor(109, true);
|
CheckLastColor(109, true);
|
||||||
penType = 1;
|
penType = 1;
|
||||||
forceEraser = false;
|
|
||||||
CheckPenTypeUIState();
|
CheckPenTypeUIState();
|
||||||
ColorSwitchCheck();
|
ColorSwitchCheck();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1440,82 +1440,49 @@ namespace Ink_Canvas {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private void EraserIcon_Click(object sender, RoutedEventArgs e) {
|
private void EraserIcon_Click(object sender, RoutedEventArgs e) {
|
||||||
|
bool isAlreadyEraser = inkCanvas.EditingMode == InkCanvasEditingMode.EraseByPoint;
|
||||||
if (lastBorderMouseDownObject != null && lastBorderMouseDownObject is Panel)
|
forceEraser = false;
|
||||||
((Panel)lastBorderMouseDownObject).Background = new SolidColorBrush(Colors.Transparent);
|
|
||||||
if (sender == Eraser_Icon && lastBorderMouseDownObject != Eraser_Icon) return;
|
|
||||||
|
|
||||||
FloatingbarSelectionBG.Visibility = Visibility.Visible;
|
|
||||||
System.Windows.Controls.Canvas.SetLeft(FloatingbarSelectionBG, 84);
|
|
||||||
|
|
||||||
forceEraser = true;
|
|
||||||
forcePointEraser = true;
|
forcePointEraser = true;
|
||||||
|
isLastTouchEraser = false;
|
||||||
// 即使手掌触发过面积擦,也强制应用当前的EraserShapeType设置
|
drawingShapeMode = 0;
|
||||||
|
inkCanvas.EditingMode = InkCanvasEditingMode.EraseByPoint;
|
||||||
ApplyCurrentEraserShape();
|
ApplyCurrentEraserShape();
|
||||||
|
SetCursorBasedOnEditingMode(inkCanvas);
|
||||||
if (inkCanvas.EditingMode == InkCanvasEditingMode.EraseByPoint) {
|
HideSubPanels("eraser"); // 高亮橡皮按钮
|
||||||
|
if (isAlreadyEraser) {
|
||||||
|
// 已是橡皮状态,再次点击才弹出/收起面板
|
||||||
if (EraserSizePanel.Visibility == Visibility.Collapsed) {
|
if (EraserSizePanel.Visibility == Visibility.Collapsed) {
|
||||||
AnimationsHelper.HideWithSlideAndFade(BorderTools);
|
|
||||||
AnimationsHelper.HideWithSlideAndFade(BoardBorderTools);
|
|
||||||
AnimationsHelper.HideWithSlideAndFade(PenPalette);
|
|
||||||
AnimationsHelper.HideWithSlideAndFade(BoardPenPalette);
|
|
||||||
AnimationsHelper.HideWithSlideAndFade(BorderDrawShape);
|
|
||||||
AnimationsHelper.HideWithSlideAndFade(BoardBorderDrawShape);
|
|
||||||
AnimationsHelper.HideWithSlideAndFade(BorderTools);
|
|
||||||
AnimationsHelper.HideWithSlideAndFade(BoardBorderTools);
|
|
||||||
AnimationsHelper.ShowWithSlideFromBottomAndFade(EraserSizePanel);
|
AnimationsHelper.ShowWithSlideFromBottomAndFade(EraserSizePanel);
|
||||||
AnimationsHelper.ShowWithSlideFromBottomAndFade(BoardEraserSizePanel);
|
if (BoardEraserSizePanel != null)
|
||||||
|
AnimationsHelper.ShowWithSlideFromBottomAndFade(BoardEraserSizePanel);
|
||||||
} else {
|
} else {
|
||||||
AnimationsHelper.HideWithSlideAndFade(EraserSizePanel);
|
AnimationsHelper.HideWithSlideAndFade(EraserSizePanel);
|
||||||
AnimationsHelper.HideWithSlideAndFade(BorderTools);
|
if (BoardEraserSizePanel != null)
|
||||||
AnimationsHelper.HideWithSlideAndFade(BoardBorderTools);
|
AnimationsHelper.HideWithSlideAndFade(BoardEraserSizePanel);
|
||||||
AnimationsHelper.HideWithSlideAndFade(PenPalette);
|
|
||||||
AnimationsHelper.HideWithSlideAndFade(BoardPenPalette);
|
|
||||||
AnimationsHelper.HideWithSlideAndFade(BorderDrawShape);
|
|
||||||
AnimationsHelper.HideWithSlideAndFade(BoardBorderDrawShape);
|
|
||||||
AnimationsHelper.HideWithSlideAndFade(BoardEraserSizePanel);
|
|
||||||
AnimationsHelper.HideWithSlideAndFade(BorderTools);
|
|
||||||
AnimationsHelper.HideWithSlideAndFade(BoardBorderTools);
|
|
||||||
AnimationsHelper.HideWithSlideAndFade(TwoFingerGestureBorder);
|
|
||||||
AnimationsHelper.HideWithSlideAndFade(BoardTwoFingerGestureBorder);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else {
|
|
||||||
HideSubPanels("eraser");
|
|
||||||
}
|
|
||||||
|
|
||||||
inkCanvas.EditingMode = InkCanvasEditingMode.EraseByPoint;
|
|
||||||
drawingShapeMode = 0;
|
|
||||||
|
|
||||||
inkCanvas_EditingModeChanged(inkCanvas, null);
|
|
||||||
CancelSingleFingerDragMode();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// 新增方法,根据当前设置应用橡皮擦形状
|
|
||||||
public void ApplyCurrentEraserShape() {
|
|
||||||
double k = 1;
|
|
||||||
switch (Settings.Canvas.EraserSize) {
|
|
||||||
case 0:
|
|
||||||
k = Settings.Canvas.EraserShapeType == 0 ? 0.5 : 0.7;
|
|
||||||
break;
|
|
||||||
case 1:
|
|
||||||
k = Settings.Canvas.EraserShapeType == 0 ? 0.8 : 0.9;
|
|
||||||
break;
|
|
||||||
case 3:
|
|
||||||
k = Settings.Canvas.EraserShapeType == 0 ? 1.25 : 1.2;
|
|
||||||
break;
|
|
||||||
case 4:
|
|
||||||
k = Settings.Canvas.EraserShapeType == 0 ? 1.5 : 1.3;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (Settings.Canvas.EraserShapeType == 0) {
|
private void BoardEraserIcon_Click(object sender, RoutedEventArgs e) {
|
||||||
// 圆形擦
|
bool isAlreadyEraser = inkCanvas.EditingMode == InkCanvasEditingMode.EraseByPoint;
|
||||||
inkCanvas.EraserShape = new EllipseStylusShape(k * 90, k * 90);
|
forceEraser = false;
|
||||||
} else if (Settings.Canvas.EraserShapeType == 1) {
|
forcePointEraser = true;
|
||||||
// 矩形黑板擦
|
isLastTouchEraser = false;
|
||||||
inkCanvas.EraserShape = new RectangleStylusShape(k * 90 * 0.6, k * 90);
|
drawingShapeMode = 0;
|
||||||
|
inkCanvas.EditingMode = InkCanvasEditingMode.EraseByPoint;
|
||||||
|
ApplyCurrentEraserShape();
|
||||||
|
SetCursorBasedOnEditingMode(inkCanvas);
|
||||||
|
HideSubPanels("eraser"); // 高亮橡皮按钮
|
||||||
|
if (isAlreadyEraser) {
|
||||||
|
// 已是橡皮状态,再次点击才弹出/收起面板
|
||||||
|
if (BoardEraserSizePanel != null && BoardEraserSizePanel.Visibility == Visibility.Collapsed) {
|
||||||
|
AnimationsHelper.ShowWithSlideFromBottomAndFade(BoardEraserSizePanel);
|
||||||
|
AnimationsHelper.ShowWithSlideFromBottomAndFade(EraserSizePanel);
|
||||||
|
} else {
|
||||||
|
if (BoardEraserSizePanel != null)
|
||||||
|
AnimationsHelper.HideWithSlideAndFade(BoardEraserSizePanel);
|
||||||
|
AnimationsHelper.HideWithSlideAndFade(EraserSizePanel);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -422,5 +422,24 @@ namespace Ink_Canvas {
|
|||||||
StrokesSelectionClone = new StrokeCollection();
|
StrokesSelectionClone = new StrokeCollection();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void LassoSelect_Click(object sender, RoutedEventArgs e) {
|
||||||
|
forceEraser = false;
|
||||||
|
forcePointEraser = false;
|
||||||
|
isLastTouchEraser = false;
|
||||||
|
drawingShapeMode = 0;
|
||||||
|
inkCanvas.EditingMode = InkCanvasEditingMode.Select;
|
||||||
|
SetCursorBasedOnEditingMode(inkCanvas);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void BtnLassoSelect_Click(object sender, RoutedEventArgs e) {
|
||||||
|
forceEraser = false;
|
||||||
|
forcePointEraser = false;
|
||||||
|
isLastTouchEraser = false;
|
||||||
|
drawingShapeMode = 0;
|
||||||
|
inkCanvas.EditingMode = InkCanvasEditingMode.Select;
|
||||||
|
inkCanvas.IsManipulationEnabled = true;
|
||||||
|
SetCursorBasedOnEditingMode(inkCanvas);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -869,12 +869,16 @@ namespace Ink_Canvas {
|
|||||||
private void ComboBoxEraserSize_SelectionChanged(object sender, SelectionChangedEventArgs e) {
|
private void ComboBoxEraserSize_SelectionChanged(object sender, SelectionChangedEventArgs e) {
|
||||||
if (!isLoaded) return;
|
if (!isLoaded) return;
|
||||||
Settings.Canvas.EraserSize = ComboBoxEraserSize.SelectedIndex;
|
Settings.Canvas.EraserSize = ComboBoxEraserSize.SelectedIndex;
|
||||||
|
ApplyCurrentEraserShape();
|
||||||
|
if (inkCanvas.EditingMode == InkCanvasEditingMode.EraseByPoint) {
|
||||||
|
inkCanvas.EditingMode = InkCanvasEditingMode.Ink;
|
||||||
|
inkCanvas.EditingMode = InkCanvasEditingMode.EraseByPoint;
|
||||||
|
}
|
||||||
SaveSettingsToFile();
|
SaveSettingsToFile();
|
||||||
}
|
}
|
||||||
|
|
||||||
private void ComboBoxEraserSizeFloatingBar_SelectionChanged(object sender, SelectionChangedEventArgs e) {
|
private void ComboBoxEraserSizeFloatingBar_SelectionChanged(object sender, SelectionChangedEventArgs e) {
|
||||||
if (!isLoaded) return;
|
if (!isLoaded) return;
|
||||||
|
|
||||||
ComboBox s = (ComboBox)sender;
|
ComboBox s = (ComboBox)sender;
|
||||||
Settings.Canvas.EraserSize = s.SelectedIndex;
|
Settings.Canvas.EraserSize = s.SelectedIndex;
|
||||||
if (s == ComboBoxEraserSizeFloatingBar) {
|
if (s == ComboBoxEraserSizeFloatingBar) {
|
||||||
@@ -884,17 +888,11 @@ namespace Ink_Canvas {
|
|||||||
ComboBoxEraserSizeFloatingBar.SelectedIndex = s.SelectedIndex;
|
ComboBoxEraserSizeFloatingBar.SelectedIndex = s.SelectedIndex;
|
||||||
ComboBoxEraserSize.SelectedIndex = s.SelectedIndex;
|
ComboBoxEraserSize.SelectedIndex = s.SelectedIndex;
|
||||||
}
|
}
|
||||||
|
|
||||||
// 使用统一的方法应用橡皮擦形状
|
|
||||||
ApplyCurrentEraserShape();
|
ApplyCurrentEraserShape();
|
||||||
|
|
||||||
// 确保当前处于橡皮擦模式时能立即看到效果
|
|
||||||
if (inkCanvas.EditingMode == InkCanvasEditingMode.EraseByPoint) {
|
if (inkCanvas.EditingMode == InkCanvasEditingMode.EraseByPoint) {
|
||||||
// 先切换一下模式,再切回来,确保橡皮擦形状得到刷新
|
|
||||||
inkCanvas.EditingMode = InkCanvasEditingMode.Ink;
|
inkCanvas.EditingMode = InkCanvasEditingMode.Ink;
|
||||||
inkCanvas.EditingMode = InkCanvasEditingMode.EraseByPoint;
|
inkCanvas.EditingMode = InkCanvasEditingMode.EraseByPoint;
|
||||||
}
|
}
|
||||||
|
|
||||||
SaveSettingsToFile();
|
SaveSettingsToFile();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -104,11 +104,11 @@ namespace Ink_Canvas {
|
|||||||
|
|
||||||
private void BtnPen_Click(object sender, RoutedEventArgs e) {
|
private void BtnPen_Click(object sender, RoutedEventArgs e) {
|
||||||
forceEraser = false;
|
forceEraser = false;
|
||||||
|
forcePointEraser = false;
|
||||||
|
isLastTouchEraser = false;
|
||||||
drawingShapeMode = 0;
|
drawingShapeMode = 0;
|
||||||
inkCanvas.EditingMode = InkCanvasEditingMode.Ink;
|
inkCanvas.EditingMode = InkCanvasEditingMode.Ink;
|
||||||
inkCanvas.IsManipulationEnabled = true;
|
SetCursorBasedOnEditingMode(inkCanvas);
|
||||||
CancelSingleFingerDragMode();
|
|
||||||
isLongPressSelected = false;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private Task<bool> CheckIsDrawingShapesInMultiTouchMode() {
|
private Task<bool> CheckIsDrawingShapesInMultiTouchMode() {
|
||||||
@@ -131,323 +131,232 @@ namespace Ink_Canvas {
|
|||||||
|
|
||||||
private async void BtnDrawLine_Click(object sender, MouseButtonEventArgs e) {
|
private async void BtnDrawLine_Click(object sender, MouseButtonEventArgs e) {
|
||||||
await CheckIsDrawingShapesInMultiTouchMode();
|
await CheckIsDrawingShapesInMultiTouchMode();
|
||||||
if (lastMouseDownSender == sender) {
|
EnterShapeDrawingMode(1);
|
||||||
forceEraser = true;
|
CancelSingleFingerDragMode();
|
||||||
drawingShapeMode = 1;
|
|
||||||
inkCanvas.EditingMode = InkCanvasEditingMode.None;
|
|
||||||
inkCanvas.IsManipulationEnabled = true;
|
|
||||||
CancelSingleFingerDragMode();
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
// 即使不是长按,也设置必要的绘图状态
|
|
||||||
forceEraser = true;
|
|
||||||
drawingShapeMode = 1;
|
|
||||||
inkCanvas.EditingMode = InkCanvasEditingMode.None;
|
|
||||||
inkCanvas.IsManipulationEnabled = true;
|
|
||||||
isLongPressSelected = true; // 设置为选中状态,避免抬笔后切换回笔模式
|
|
||||||
}
|
|
||||||
|
|
||||||
lastMouseDownSender = null;
|
lastMouseDownSender = null;
|
||||||
if (isLongPressSelected) {
|
if (isLongPressSelected) {
|
||||||
if (ToggleSwitchDrawShapeBorderAutoHide.IsOn) CollapseBorderDrawShape();
|
if (ToggleSwitchDrawShapeBorderAutoHide.IsOn) CollapseBorderDrawShape();
|
||||||
var dA = new DoubleAnimation(1, 1, new Duration(TimeSpan.FromMilliseconds(0)));
|
var dA = new DoubleAnimation(1, 1, new Duration(TimeSpan.FromMilliseconds(0)));
|
||||||
ImageDrawLine.BeginAnimation(OpacityProperty, dA);
|
ImageDrawLine.BeginAnimation(OpacityProperty, dA);
|
||||||
}
|
}
|
||||||
|
|
||||||
DrawShapePromptToPen();
|
DrawShapePromptToPen();
|
||||||
}
|
}
|
||||||
|
|
||||||
private async void BtnDrawDashedLine_Click(object sender, MouseButtonEventArgs e) {
|
private async void BtnDrawDashedLine_Click(object sender, MouseButtonEventArgs e) {
|
||||||
await CheckIsDrawingShapesInMultiTouchMode();
|
await CheckIsDrawingShapesInMultiTouchMode();
|
||||||
if (lastMouseDownSender == sender) {
|
EnterShapeDrawingMode(8);
|
||||||
forceEraser = true;
|
CancelSingleFingerDragMode();
|
||||||
drawingShapeMode = 8;
|
|
||||||
inkCanvas.EditingMode = InkCanvasEditingMode.None;
|
|
||||||
inkCanvas.IsManipulationEnabled = true;
|
|
||||||
CancelSingleFingerDragMode();
|
|
||||||
}
|
|
||||||
|
|
||||||
lastMouseDownSender = null;
|
lastMouseDownSender = null;
|
||||||
if (isLongPressSelected) {
|
if (isLongPressSelected) {
|
||||||
if (ToggleSwitchDrawShapeBorderAutoHide.IsOn) CollapseBorderDrawShape();
|
if (ToggleSwitchDrawShapeBorderAutoHide.IsOn) CollapseBorderDrawShape();
|
||||||
var dA = new DoubleAnimation(1, 1, new Duration(TimeSpan.FromMilliseconds(0)));
|
var dA = new DoubleAnimation(1, 1, new Duration(TimeSpan.FromMilliseconds(0)));
|
||||||
ImageDrawDashedLine.BeginAnimation(OpacityProperty, dA);
|
ImageDrawDashedLine.BeginAnimation(OpacityProperty, dA);
|
||||||
}
|
}
|
||||||
|
|
||||||
DrawShapePromptToPen();
|
DrawShapePromptToPen();
|
||||||
}
|
}
|
||||||
|
|
||||||
private async void BtnDrawDotLine_Click(object sender, MouseButtonEventArgs e) {
|
private async void BtnDrawDotLine_Click(object sender, MouseButtonEventArgs e) {
|
||||||
await CheckIsDrawingShapesInMultiTouchMode();
|
await CheckIsDrawingShapesInMultiTouchMode();
|
||||||
if (lastMouseDownSender == sender) {
|
EnterShapeDrawingMode(18);
|
||||||
forceEraser = true;
|
CancelSingleFingerDragMode();
|
||||||
drawingShapeMode = 18;
|
|
||||||
inkCanvas.EditingMode = InkCanvasEditingMode.None;
|
|
||||||
inkCanvas.IsManipulationEnabled = true;
|
|
||||||
CancelSingleFingerDragMode();
|
|
||||||
}
|
|
||||||
|
|
||||||
lastMouseDownSender = null;
|
lastMouseDownSender = null;
|
||||||
if (isLongPressSelected) {
|
if (isLongPressSelected) {
|
||||||
if (ToggleSwitchDrawShapeBorderAutoHide.IsOn) CollapseBorderDrawShape();
|
if (ToggleSwitchDrawShapeBorderAutoHide.IsOn) CollapseBorderDrawShape();
|
||||||
var dA = new DoubleAnimation(1, 1, new Duration(TimeSpan.FromMilliseconds(0)));
|
var dA = new DoubleAnimation(1, 1, new Duration(TimeSpan.FromMilliseconds(0)));
|
||||||
ImageDrawDotLine.BeginAnimation(OpacityProperty, dA);
|
ImageDrawDotLine.BeginAnimation(OpacityProperty, dA);
|
||||||
}
|
}
|
||||||
|
|
||||||
DrawShapePromptToPen();
|
DrawShapePromptToPen();
|
||||||
}
|
}
|
||||||
|
|
||||||
private async void BtnDrawArrow_Click(object sender, MouseButtonEventArgs e) {
|
private async void BtnDrawArrow_Click(object sender, MouseButtonEventArgs e) {
|
||||||
await CheckIsDrawingShapesInMultiTouchMode();
|
await CheckIsDrawingShapesInMultiTouchMode();
|
||||||
if (lastMouseDownSender == sender) {
|
EnterShapeDrawingMode(2);
|
||||||
forceEraser = true;
|
CancelSingleFingerDragMode();
|
||||||
drawingShapeMode = 2;
|
|
||||||
inkCanvas.EditingMode = InkCanvasEditingMode.None;
|
|
||||||
inkCanvas.IsManipulationEnabled = true;
|
|
||||||
CancelSingleFingerDragMode();
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
// 即使不是长按,也设置必要的绘图状态
|
|
||||||
forceEraser = true;
|
|
||||||
drawingShapeMode = 2;
|
|
||||||
inkCanvas.EditingMode = InkCanvasEditingMode.None;
|
|
||||||
inkCanvas.IsManipulationEnabled = true;
|
|
||||||
isLongPressSelected = true; // 设置为选中状态,避免抬笔后切换回笔模式
|
|
||||||
}
|
|
||||||
|
|
||||||
lastMouseDownSender = null;
|
lastMouseDownSender = null;
|
||||||
if (isLongPressSelected) {
|
if (isLongPressSelected) {
|
||||||
if (ToggleSwitchDrawShapeBorderAutoHide.IsOn) CollapseBorderDrawShape();
|
if (ToggleSwitchDrawShapeBorderAutoHide.IsOn) CollapseBorderDrawShape();
|
||||||
var dA = new DoubleAnimation(1, 1, new Duration(TimeSpan.FromMilliseconds(0)));
|
var dA = new DoubleAnimation(1, 1, new Duration(TimeSpan.FromMilliseconds(0)));
|
||||||
ImageDrawArrow.BeginAnimation(OpacityProperty, dA);
|
ImageDrawArrow.BeginAnimation(OpacityProperty, dA);
|
||||||
}
|
}
|
||||||
|
|
||||||
DrawShapePromptToPen();
|
DrawShapePromptToPen();
|
||||||
}
|
}
|
||||||
|
|
||||||
private async void BtnDrawParallelLine_Click(object sender, MouseButtonEventArgs e) {
|
private async void BtnDrawParallelLine_Click(object sender, MouseButtonEventArgs e) {
|
||||||
await CheckIsDrawingShapesInMultiTouchMode();
|
await CheckIsDrawingShapesInMultiTouchMode();
|
||||||
if (lastMouseDownSender == sender) {
|
EnterShapeDrawingMode(15);
|
||||||
forceEraser = true;
|
CancelSingleFingerDragMode();
|
||||||
drawingShapeMode = 15;
|
|
||||||
inkCanvas.EditingMode = InkCanvasEditingMode.None;
|
|
||||||
inkCanvas.IsManipulationEnabled = true;
|
|
||||||
CancelSingleFingerDragMode();
|
|
||||||
}
|
|
||||||
|
|
||||||
lastMouseDownSender = null;
|
lastMouseDownSender = null;
|
||||||
if (isLongPressSelected) {
|
if (isLongPressSelected) {
|
||||||
if (ToggleSwitchDrawShapeBorderAutoHide.IsOn) CollapseBorderDrawShape();
|
if (ToggleSwitchDrawShapeBorderAutoHide.IsOn) CollapseBorderDrawShape();
|
||||||
var dA = new DoubleAnimation(1, 1, new Duration(TimeSpan.FromMilliseconds(0)));
|
var dA = new DoubleAnimation(1, 1, new Duration(TimeSpan.FromMilliseconds(0)));
|
||||||
ImageDrawParallelLine.BeginAnimation(OpacityProperty, dA);
|
ImageDrawParallelLine.BeginAnimation(OpacityProperty, dA);
|
||||||
}
|
}
|
||||||
|
|
||||||
DrawShapePromptToPen();
|
DrawShapePromptToPen();
|
||||||
}
|
}
|
||||||
|
|
||||||
private async void BtnDrawCoordinate1_Click(object sender, MouseButtonEventArgs e) {
|
private async void BtnDrawCoordinate1_Click(object sender, MouseButtonEventArgs e) {
|
||||||
await CheckIsDrawingShapesInMultiTouchMode();
|
await CheckIsDrawingShapesInMultiTouchMode();
|
||||||
forceEraser = true;
|
EnterShapeDrawingMode(11);
|
||||||
drawingShapeMode = 11;
|
|
||||||
inkCanvas.EditingMode = InkCanvasEditingMode.None;
|
|
||||||
inkCanvas.IsManipulationEnabled = true;
|
|
||||||
CancelSingleFingerDragMode();
|
CancelSingleFingerDragMode();
|
||||||
|
lastMouseDownSender = null;
|
||||||
DrawShapePromptToPen();
|
DrawShapePromptToPen();
|
||||||
}
|
}
|
||||||
|
|
||||||
private async void BtnDrawCoordinate2_Click(object sender, MouseButtonEventArgs e) {
|
private async void BtnDrawCoordinate2_Click(object sender, MouseButtonEventArgs e) {
|
||||||
await CheckIsDrawingShapesInMultiTouchMode();
|
await CheckIsDrawingShapesInMultiTouchMode();
|
||||||
forceEraser = true;
|
EnterShapeDrawingMode(12);
|
||||||
drawingShapeMode = 12;
|
|
||||||
inkCanvas.EditingMode = InkCanvasEditingMode.None;
|
|
||||||
inkCanvas.IsManipulationEnabled = true;
|
|
||||||
CancelSingleFingerDragMode();
|
CancelSingleFingerDragMode();
|
||||||
|
lastMouseDownSender = null;
|
||||||
DrawShapePromptToPen();
|
DrawShapePromptToPen();
|
||||||
}
|
}
|
||||||
|
|
||||||
private async void BtnDrawCoordinate3_Click(object sender, MouseButtonEventArgs e) {
|
private async void BtnDrawCoordinate3_Click(object sender, MouseButtonEventArgs e) {
|
||||||
await CheckIsDrawingShapesInMultiTouchMode();
|
await CheckIsDrawingShapesInMultiTouchMode();
|
||||||
forceEraser = true;
|
EnterShapeDrawingMode(13);
|
||||||
drawingShapeMode = 13;
|
|
||||||
inkCanvas.EditingMode = InkCanvasEditingMode.None;
|
|
||||||
inkCanvas.IsManipulationEnabled = true;
|
|
||||||
CancelSingleFingerDragMode();
|
CancelSingleFingerDragMode();
|
||||||
|
lastMouseDownSender = null;
|
||||||
DrawShapePromptToPen();
|
DrawShapePromptToPen();
|
||||||
}
|
}
|
||||||
|
|
||||||
private async void BtnDrawCoordinate4_Click(object sender, MouseButtonEventArgs e) {
|
private async void BtnDrawCoordinate4_Click(object sender, MouseButtonEventArgs e) {
|
||||||
await CheckIsDrawingShapesInMultiTouchMode();
|
await CheckIsDrawingShapesInMultiTouchMode();
|
||||||
forceEraser = true;
|
EnterShapeDrawingMode(14);
|
||||||
drawingShapeMode = 14;
|
|
||||||
inkCanvas.EditingMode = InkCanvasEditingMode.None;
|
|
||||||
inkCanvas.IsManipulationEnabled = true;
|
|
||||||
CancelSingleFingerDragMode();
|
CancelSingleFingerDragMode();
|
||||||
|
lastMouseDownSender = null;
|
||||||
DrawShapePromptToPen();
|
DrawShapePromptToPen();
|
||||||
}
|
}
|
||||||
|
|
||||||
private async void BtnDrawCoordinate5_Click(object sender, MouseButtonEventArgs e) {
|
private async void BtnDrawCoordinate5_Click(object sender, MouseButtonEventArgs e) {
|
||||||
await CheckIsDrawingShapesInMultiTouchMode();
|
await CheckIsDrawingShapesInMultiTouchMode();
|
||||||
forceEraser = true;
|
EnterShapeDrawingMode(17);
|
||||||
drawingShapeMode = 17;
|
|
||||||
inkCanvas.EditingMode = InkCanvasEditingMode.None;
|
|
||||||
inkCanvas.IsManipulationEnabled = true;
|
|
||||||
CancelSingleFingerDragMode();
|
CancelSingleFingerDragMode();
|
||||||
|
lastMouseDownSender = null;
|
||||||
DrawShapePromptToPen();
|
DrawShapePromptToPen();
|
||||||
}
|
}
|
||||||
|
|
||||||
private async void BtnDrawRectangle_Click(object sender, MouseButtonEventArgs e) {
|
private async void BtnDrawRectangle_Click(object sender, MouseButtonEventArgs e) {
|
||||||
await CheckIsDrawingShapesInMultiTouchMode();
|
await CheckIsDrawingShapesInMultiTouchMode();
|
||||||
forceEraser = true;
|
EnterShapeDrawingMode(3);
|
||||||
drawingShapeMode = 3;
|
|
||||||
inkCanvas.EditingMode = InkCanvasEditingMode.None;
|
|
||||||
inkCanvas.IsManipulationEnabled = true;
|
|
||||||
isLongPressSelected = true; // 设置为选中状态,避免抬笔后切换回笔模式
|
|
||||||
CancelSingleFingerDragMode();
|
CancelSingleFingerDragMode();
|
||||||
|
isLongPressSelected = true; // 设置为选中状态,避免抬笔后切换回笔模式
|
||||||
|
lastMouseDownSender = null;
|
||||||
DrawShapePromptToPen();
|
DrawShapePromptToPen();
|
||||||
}
|
}
|
||||||
|
|
||||||
private async void BtnDrawRectangleCenter_Click(object sender, MouseButtonEventArgs e) {
|
private async void BtnDrawRectangleCenter_Click(object sender, MouseButtonEventArgs e) {
|
||||||
await CheckIsDrawingShapesInMultiTouchMode();
|
await CheckIsDrawingShapesInMultiTouchMode();
|
||||||
forceEraser = true;
|
EnterShapeDrawingMode(19);
|
||||||
drawingShapeMode = 19;
|
|
||||||
inkCanvas.EditingMode = InkCanvasEditingMode.None;
|
|
||||||
inkCanvas.IsManipulationEnabled = true;
|
|
||||||
CancelSingleFingerDragMode();
|
CancelSingleFingerDragMode();
|
||||||
|
lastMouseDownSender = null;
|
||||||
DrawShapePromptToPen();
|
DrawShapePromptToPen();
|
||||||
}
|
}
|
||||||
|
|
||||||
private async void BtnDrawEllipse_Click(object sender, MouseButtonEventArgs e) {
|
private async void BtnDrawEllipse_Click(object sender, MouseButtonEventArgs e) {
|
||||||
await CheckIsDrawingShapesInMultiTouchMode();
|
await CheckIsDrawingShapesInMultiTouchMode();
|
||||||
forceEraser = true;
|
EnterShapeDrawingMode(4);
|
||||||
drawingShapeMode = 4;
|
|
||||||
inkCanvas.EditingMode = InkCanvasEditingMode.None;
|
|
||||||
inkCanvas.IsManipulationEnabled = true;
|
|
||||||
CancelSingleFingerDragMode();
|
CancelSingleFingerDragMode();
|
||||||
|
lastMouseDownSender = null;
|
||||||
DrawShapePromptToPen();
|
DrawShapePromptToPen();
|
||||||
}
|
}
|
||||||
|
|
||||||
private async void BtnDrawCircle_Click(object sender, MouseButtonEventArgs e) {
|
private async void BtnDrawCircle_Click(object sender, MouseButtonEventArgs e) {
|
||||||
await CheckIsDrawingShapesInMultiTouchMode();
|
await CheckIsDrawingShapesInMultiTouchMode();
|
||||||
forceEraser = true;
|
EnterShapeDrawingMode(5);
|
||||||
drawingShapeMode = 5;
|
|
||||||
inkCanvas.EditingMode = InkCanvasEditingMode.None;
|
|
||||||
inkCanvas.IsManipulationEnabled = true;
|
|
||||||
CancelSingleFingerDragMode();
|
CancelSingleFingerDragMode();
|
||||||
|
lastMouseDownSender = null;
|
||||||
DrawShapePromptToPen();
|
DrawShapePromptToPen();
|
||||||
}
|
}
|
||||||
|
|
||||||
private async void BtnDrawCenterEllipse_Click(object sender, MouseButtonEventArgs e) {
|
private async void BtnDrawCenterEllipse_Click(object sender, MouseButtonEventArgs e) {
|
||||||
await CheckIsDrawingShapesInMultiTouchMode();
|
await CheckIsDrawingShapesInMultiTouchMode();
|
||||||
forceEraser = true;
|
EnterShapeDrawingMode(16);
|
||||||
drawingShapeMode = 16;
|
|
||||||
inkCanvas.EditingMode = InkCanvasEditingMode.None;
|
|
||||||
inkCanvas.IsManipulationEnabled = true;
|
|
||||||
CancelSingleFingerDragMode();
|
CancelSingleFingerDragMode();
|
||||||
|
lastMouseDownSender = null;
|
||||||
DrawShapePromptToPen();
|
DrawShapePromptToPen();
|
||||||
}
|
}
|
||||||
|
|
||||||
private async void BtnDrawCenterEllipseWithFocalPoint_Click(object sender, MouseButtonEventArgs e) {
|
private async void BtnDrawCenterEllipseWithFocalPoint_Click(object sender, MouseButtonEventArgs e) {
|
||||||
await CheckIsDrawingShapesInMultiTouchMode();
|
await CheckIsDrawingShapesInMultiTouchMode();
|
||||||
forceEraser = true;
|
EnterShapeDrawingMode(23);
|
||||||
drawingShapeMode = 23;
|
|
||||||
inkCanvas.EditingMode = InkCanvasEditingMode.None;
|
|
||||||
inkCanvas.IsManipulationEnabled = true;
|
|
||||||
CancelSingleFingerDragMode();
|
CancelSingleFingerDragMode();
|
||||||
|
lastMouseDownSender = null;
|
||||||
DrawShapePromptToPen();
|
DrawShapePromptToPen();
|
||||||
}
|
}
|
||||||
|
|
||||||
private async void BtnDrawDashedCircle_Click(object sender, MouseButtonEventArgs e) {
|
private async void BtnDrawDashedCircle_Click(object sender, MouseButtonEventArgs e) {
|
||||||
await CheckIsDrawingShapesInMultiTouchMode();
|
await CheckIsDrawingShapesInMultiTouchMode();
|
||||||
forceEraser = true;
|
EnterShapeDrawingMode(10);
|
||||||
drawingShapeMode = 10;
|
|
||||||
inkCanvas.EditingMode = InkCanvasEditingMode.None;
|
|
||||||
inkCanvas.IsManipulationEnabled = true;
|
|
||||||
CancelSingleFingerDragMode();
|
CancelSingleFingerDragMode();
|
||||||
|
lastMouseDownSender = null;
|
||||||
DrawShapePromptToPen();
|
DrawShapePromptToPen();
|
||||||
}
|
}
|
||||||
|
|
||||||
private async void BtnDrawHyperbola_Click(object sender, MouseButtonEventArgs e) {
|
private async void BtnDrawHyperbola_Click(object sender, MouseButtonEventArgs e) {
|
||||||
await CheckIsDrawingShapesInMultiTouchMode();
|
await CheckIsDrawingShapesInMultiTouchMode();
|
||||||
forceEraser = true;
|
EnterShapeDrawingMode(24);
|
||||||
drawingShapeMode = 24;
|
|
||||||
drawMultiStepShapeCurrentStep = 0;
|
drawMultiStepShapeCurrentStep = 0;
|
||||||
inkCanvas.EditingMode = InkCanvasEditingMode.None;
|
|
||||||
inkCanvas.IsManipulationEnabled = true;
|
|
||||||
CancelSingleFingerDragMode();
|
CancelSingleFingerDragMode();
|
||||||
|
lastMouseDownSender = null;
|
||||||
DrawShapePromptToPen();
|
DrawShapePromptToPen();
|
||||||
}
|
}
|
||||||
|
|
||||||
private async void BtnDrawHyperbolaWithFocalPoint_Click(object sender, MouseButtonEventArgs e) {
|
private async void BtnDrawHyperbolaWithFocalPoint_Click(object sender, MouseButtonEventArgs e) {
|
||||||
await CheckIsDrawingShapesInMultiTouchMode();
|
await CheckIsDrawingShapesInMultiTouchMode();
|
||||||
forceEraser = true;
|
EnterShapeDrawingMode(25);
|
||||||
drawingShapeMode = 25;
|
|
||||||
drawMultiStepShapeCurrentStep = 0;
|
drawMultiStepShapeCurrentStep = 0;
|
||||||
inkCanvas.EditingMode = InkCanvasEditingMode.None;
|
|
||||||
inkCanvas.IsManipulationEnabled = true;
|
|
||||||
CancelSingleFingerDragMode();
|
CancelSingleFingerDragMode();
|
||||||
|
lastMouseDownSender = null;
|
||||||
DrawShapePromptToPen();
|
DrawShapePromptToPen();
|
||||||
}
|
}
|
||||||
|
|
||||||
private async void BtnDrawParabola1_Click(object sender, MouseButtonEventArgs e) {
|
private async void BtnDrawParabola1_Click(object sender, MouseButtonEventArgs e) {
|
||||||
await CheckIsDrawingShapesInMultiTouchMode();
|
await CheckIsDrawingShapesInMultiTouchMode();
|
||||||
forceEraser = true;
|
EnterShapeDrawingMode(20);
|
||||||
drawingShapeMode = 20;
|
|
||||||
inkCanvas.EditingMode = InkCanvasEditingMode.None;
|
|
||||||
inkCanvas.IsManipulationEnabled = true;
|
|
||||||
CancelSingleFingerDragMode();
|
CancelSingleFingerDragMode();
|
||||||
|
lastMouseDownSender = null;
|
||||||
DrawShapePromptToPen();
|
DrawShapePromptToPen();
|
||||||
}
|
}
|
||||||
|
|
||||||
private async void BtnDrawParabolaWithFocalPoint_Click(object sender, MouseButtonEventArgs e) {
|
private async void BtnDrawParabolaWithFocalPoint_Click(object sender, MouseButtonEventArgs e) {
|
||||||
await CheckIsDrawingShapesInMultiTouchMode();
|
await CheckIsDrawingShapesInMultiTouchMode();
|
||||||
forceEraser = true;
|
EnterShapeDrawingMode(22);
|
||||||
drawingShapeMode = 22;
|
|
||||||
inkCanvas.EditingMode = InkCanvasEditingMode.None;
|
|
||||||
inkCanvas.IsManipulationEnabled = true;
|
|
||||||
CancelSingleFingerDragMode();
|
CancelSingleFingerDragMode();
|
||||||
|
lastMouseDownSender = null;
|
||||||
DrawShapePromptToPen();
|
DrawShapePromptToPen();
|
||||||
}
|
}
|
||||||
|
|
||||||
private async void BtnDrawParabola2_Click(object sender, MouseButtonEventArgs e) {
|
private async void BtnDrawParabola2_Click(object sender, MouseButtonEventArgs e) {
|
||||||
await CheckIsDrawingShapesInMultiTouchMode();
|
await CheckIsDrawingShapesInMultiTouchMode();
|
||||||
forceEraser = true;
|
EnterShapeDrawingMode(21);
|
||||||
drawingShapeMode = 21;
|
|
||||||
inkCanvas.EditingMode = InkCanvasEditingMode.None;
|
|
||||||
inkCanvas.IsManipulationEnabled = true;
|
|
||||||
CancelSingleFingerDragMode();
|
CancelSingleFingerDragMode();
|
||||||
|
lastMouseDownSender = null;
|
||||||
DrawShapePromptToPen();
|
DrawShapePromptToPen();
|
||||||
}
|
}
|
||||||
|
|
||||||
private async void BtnDrawCylinder_Click(object sender, MouseButtonEventArgs e) {
|
private async void BtnDrawCylinder_Click(object sender, MouseButtonEventArgs e) {
|
||||||
await CheckIsDrawingShapesInMultiTouchMode();
|
await CheckIsDrawingShapesInMultiTouchMode();
|
||||||
forceEraser = true;
|
EnterShapeDrawingMode(6);
|
||||||
drawingShapeMode = 6;
|
|
||||||
inkCanvas.EditingMode = InkCanvasEditingMode.None;
|
|
||||||
inkCanvas.IsManipulationEnabled = true;
|
|
||||||
CancelSingleFingerDragMode();
|
CancelSingleFingerDragMode();
|
||||||
|
lastMouseDownSender = null;
|
||||||
DrawShapePromptToPen();
|
DrawShapePromptToPen();
|
||||||
}
|
}
|
||||||
|
|
||||||
private async void BtnDrawCone_Click(object sender, MouseButtonEventArgs e) {
|
private async void BtnDrawCone_Click(object sender, MouseButtonEventArgs e) {
|
||||||
await CheckIsDrawingShapesInMultiTouchMode();
|
await CheckIsDrawingShapesInMultiTouchMode();
|
||||||
forceEraser = true;
|
EnterShapeDrawingMode(7);
|
||||||
drawingShapeMode = 7;
|
|
||||||
inkCanvas.EditingMode = InkCanvasEditingMode.None;
|
|
||||||
inkCanvas.IsManipulationEnabled = true;
|
|
||||||
CancelSingleFingerDragMode();
|
CancelSingleFingerDragMode();
|
||||||
|
lastMouseDownSender = null;
|
||||||
DrawShapePromptToPen();
|
DrawShapePromptToPen();
|
||||||
}
|
}
|
||||||
|
|
||||||
private async void BtnDrawCuboid_Click(object sender, MouseButtonEventArgs e) {
|
private async void BtnDrawCuboid_Click(object sender, MouseButtonEventArgs e) {
|
||||||
await CheckIsDrawingShapesInMultiTouchMode();
|
await CheckIsDrawingShapesInMultiTouchMode();
|
||||||
forceEraser = true;
|
EnterShapeDrawingMode(9);
|
||||||
drawingShapeMode = 9;
|
|
||||||
isFirstTouchCuboid = true;
|
isFirstTouchCuboid = true;
|
||||||
CuboidFrontRectIniP = new Point();
|
CuboidFrontRectIniP = new Point();
|
||||||
CuboidFrontRectEndP = new Point();
|
CuboidFrontRectEndP = new Point();
|
||||||
inkCanvas.EditingMode = InkCanvasEditingMode.None;
|
|
||||||
inkCanvas.IsManipulationEnabled = true;
|
|
||||||
CancelSingleFingerDragMode();
|
CancelSingleFingerDragMode();
|
||||||
|
lastMouseDownSender = null;
|
||||||
DrawShapePromptToPen();
|
DrawShapePromptToPen();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -460,20 +369,17 @@ namespace Ink_Canvas {
|
|||||||
inkCanvas.EditingMode = InkCanvasEditingMode.EraseByPoint;
|
inkCanvas.EditingMode = InkCanvasEditingMode.EraseByPoint;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (isSingleFingerDragMode) return;
|
if (isSingleFingerDragMode) return;
|
||||||
|
|
||||||
// 处理形状绘制模式
|
// 处理几何绘制模式
|
||||||
if (drawingShapeMode != 0) {
|
if (drawingShapeMode != 0) {
|
||||||
if (isLastTouchEraser) return;
|
if (isLastTouchEraser) return;
|
||||||
//EraserContainer.Background = null;
|
//EraserContainer.Background = null;
|
||||||
//ImageEraser.Visibility = Visibility.Visible;
|
//ImageEraser.Visibility = Visibility.Visible;
|
||||||
|
|
||||||
// 修复触屏状态下几何绘制功能不可用的问题
|
// 修复触屏状态下几何绘制功能不可用的问题
|
||||||
// 在几何绘制模式下,即使isWaitUntilNextTouchDown为true,也应该处理触摸移动事件
|
// 在几何绘制模式下,即使isWaitUntilNextTouchDown为true,也应该处理触摸移动事件
|
||||||
// 只有当多点触控时才需要等待下一次触摸
|
// 只有当多点触控时才需要等待下一次触摸
|
||||||
if (isWaitUntilNextTouchDown && dec.Count > 1) return;
|
if (isWaitUntilNextTouchDown && dec.Count > 1) return;
|
||||||
|
|
||||||
if (dec.Count > 1) {
|
if (dec.Count > 1) {
|
||||||
isWaitUntilNextTouchDown = true;
|
isWaitUntilNextTouchDown = true;
|
||||||
try {
|
try {
|
||||||
@@ -485,19 +391,19 @@ namespace Ink_Canvas {
|
|||||||
}
|
}
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
// 在几何绘制模式下,确保处理单点触控的移动事件
|
// 在几何绘制模式下,确保处理单点触控的移动事件
|
||||||
Point touchPoint = e.GetTouchPoint(inkCanvas).Position;
|
Point touchPoint = e.GetTouchPoint(inkCanvas).Position;
|
||||||
MouseTouchMove(touchPoint);
|
MouseTouchMove(touchPoint);
|
||||||
return; // 处理完几何绘制后直接返回,不执行后面的代码
|
return; // 处理完几何绘制后直接返回,不执行后面的代码
|
||||||
}
|
}
|
||||||
|
|
||||||
// 触摸移动时保持自定义光标显示
|
// 其它模式下,允许橡皮、套索、批注等正常工作,不覆盖EditingMode
|
||||||
if (inkCanvas.EditingMode != InkCanvasEditingMode.None)
|
if (inkCanvas.EditingMode == InkCanvasEditingMode.EraseByPoint ||
|
||||||
inkCanvas.EditingMode = InkCanvasEditingMode.None;
|
inkCanvas.EditingMode == InkCanvasEditingMode.Select ||
|
||||||
|
inkCanvas.EditingMode == InkCanvasEditingMode.Ink) {
|
||||||
|
// 允许正常橡皮、套索、批注
|
||||||
MouseTouchMove(e.GetTouchPoint(inkCanvas).Position);
|
return;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private int drawMultiStepShapeCurrentStep = 0; //多笔完成的图形 当前所处在的笔画
|
private int drawMultiStepShapeCurrentStep = 0; //多笔完成的图形 当前所处在的笔画
|
||||||
@@ -1317,42 +1223,6 @@ namespace Ink_Canvas {
|
|||||||
private Point CuboidFrontRectIniP = new Point();
|
private Point CuboidFrontRectIniP = new Point();
|
||||||
private Point CuboidFrontRectEndP = new Point();
|
private Point CuboidFrontRectEndP = new Point();
|
||||||
|
|
||||||
private void Main_Grid_TouchUp(object sender, TouchEventArgs e) {
|
|
||||||
|
|
||||||
inkCanvas.ReleaseAllTouchCaptures();
|
|
||||||
ViewboxFloatingBar.IsHitTestVisible = true;
|
|
||||||
BlackboardUIGridForInkReplay.IsHitTestVisible = true;
|
|
||||||
|
|
||||||
// 在几何绘制模式下,确保正确处理触摸抬起事件
|
|
||||||
if (drawingShapeMode != 0) {
|
|
||||||
// 如果是几何绘制模式,确保将临时绘制的图形添加到永久图形中
|
|
||||||
if (lastTempStroke != null) {
|
|
||||||
// 将临时笔画添加到历史记录中
|
|
||||||
var strokes = new StrokeCollection();
|
|
||||||
strokes.Add(lastTempStroke);
|
|
||||||
timeMachine.CommitStrokeUserInputHistory(strokes);
|
|
||||||
// 清除临时笔画引用,以便下次绘制
|
|
||||||
lastTempStroke = null;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (lastTempStrokeCollection != null && lastTempStrokeCollection.Count > 0) {
|
|
||||||
// 将临时笔画集合添加到历史记录中
|
|
||||||
timeMachine.CommitStrokeUserInputHistory(lastTempStrokeCollection);
|
|
||||||
// 清除临时笔画集合引用,以便下次绘制
|
|
||||||
lastTempStrokeCollection = new StrokeCollection();
|
|
||||||
}
|
|
||||||
|
|
||||||
// 如果不是长按选中的状态,则需要在抬起手指后重置isWaitUntilNextTouchDown
|
|
||||||
if (!isLongPressSelected && dec.Count == 0) {
|
|
||||||
isWaitUntilNextTouchDown = false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
inkCanvas_MouseUp(sender, null);
|
|
||||||
// 修改此处逻辑,在长按选择图形模式下保持isWaitUntilNextTouchDown
|
|
||||||
if (dec.Count == 0 && !isLongPressSelected) isWaitUntilNextTouchDown = false;
|
|
||||||
}
|
|
||||||
|
|
||||||
private Stroke lastTempStroke = null;
|
private Stroke lastTempStroke = null;
|
||||||
private StrokeCollection lastTempStrokeCollection = new StrokeCollection();
|
private StrokeCollection lastTempStrokeCollection = new StrokeCollection();
|
||||||
|
|
||||||
@@ -1735,5 +1605,15 @@ namespace Ink_Canvas {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 在MainWindow类中添加:
|
||||||
|
private void EnterShapeDrawingMode(int mode) {
|
||||||
|
forceEraser = true;
|
||||||
|
forcePointEraser = false;
|
||||||
|
isLastTouchEraser = false;
|
||||||
|
drawingShapeMode = mode;
|
||||||
|
inkCanvas.EditingMode = InkCanvasEditingMode.None;
|
||||||
|
SetCursorBasedOnEditingMode(inkCanvas);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -15,6 +15,11 @@ namespace Ink_Canvas {
|
|||||||
#region Multi-Touch
|
#region Multi-Touch
|
||||||
|
|
||||||
private bool isInMultiTouchMode = false;
|
private bool isInMultiTouchMode = false;
|
||||||
|
private InkCanvasEditingMode prePalmEraserEditingMode = InkCanvasEditingMode.Ink;
|
||||||
|
private List<int> dec = new List<int>();
|
||||||
|
private bool isSingleFingerDragMode = false;
|
||||||
|
private Point centerPoint = new Point(0, 0);
|
||||||
|
private InkCanvasEditingMode lastInkCanvasEditingMode = InkCanvasEditingMode.Ink;
|
||||||
|
|
||||||
private void BorderMultiTouchMode_MouseUp(object sender, MouseButtonEventArgs e) {
|
private void BorderMultiTouchMode_MouseUp(object sender, MouseButtonEventArgs e) {
|
||||||
if (isInMultiTouchMode) {
|
if (isInMultiTouchMode) {
|
||||||
@@ -81,6 +86,7 @@ namespace Ink_Canvas {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private void MainWindow_StylusDown(object sender, StylusDownEventArgs e) {
|
private void MainWindow_StylusDown(object sender, StylusDownEventArgs e) {
|
||||||
|
SetCursorBasedOnEditingMode(inkCanvas);
|
||||||
|
|
||||||
inkCanvas.CaptureStylus();
|
inkCanvas.CaptureStylus();
|
||||||
ViewboxFloatingBar.IsHitTestVisible = false;
|
ViewboxFloatingBar.IsHitTestVisible = false;
|
||||||
@@ -200,7 +206,6 @@ namespace Ink_Canvas {
|
|||||||
|
|
||||||
private Point iniP = new Point(0, 0);
|
private Point iniP = new Point(0, 0);
|
||||||
private bool isLastTouchEraser = false;
|
private bool isLastTouchEraser = false;
|
||||||
private bool forcePointEraser = true;
|
|
||||||
// 用于记录手掌擦的尺寸和形状
|
// 用于记录手掌擦的尺寸和形状
|
||||||
private StylusShape currentPalmEraserShape = null;
|
private StylusShape currentPalmEraserShape = null;
|
||||||
|
|
||||||
@@ -233,111 +238,35 @@ namespace Ink_Canvas {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private void Main_Grid_TouchDown(object sender, TouchEventArgs e) {
|
private void Main_Grid_TouchDown(object sender, TouchEventArgs e) {
|
||||||
// 确保触摸时显示自定义光标
|
SetCursorBasedOnEditingMode(inkCanvas);
|
||||||
if (Settings.Canvas.IsShowCursor) {
|
|
||||||
inkCanvas.ForceCursor = true;
|
|
||||||
System.Windows.Forms.Cursor.Show();
|
|
||||||
}
|
|
||||||
|
|
||||||
inkCanvas.CaptureTouch(e.TouchDevice);
|
inkCanvas.CaptureTouch(e.TouchDevice);
|
||||||
ViewboxFloatingBar.IsHitTestVisible = false;
|
|
||||||
BlackboardUIGridForInkReplay.IsHitTestVisible = false;
|
|
||||||
|
|
||||||
if (!isHidingSubPanelsWhenInking) {
|
if (inkCanvas.EditingMode == InkCanvasEditingMode.EraseByPoint) {
|
||||||
isHidingSubPanelsWhenInking = true;
|
// 橡皮状态下只return,保证橡皮状态可保持
|
||||||
HideSubPanels(); // 书写时自动隐藏二级菜单
|
|
||||||
}
|
|
||||||
|
|
||||||
if (NeedUpdateIniP()) iniP = e.GetTouchPoint(inkCanvas).Position;
|
|
||||||
if (drawingShapeMode == 9 && isFirstTouchCuboid == false) MouseTouchMove(iniP);
|
|
||||||
inkCanvas.Opacity = 1;
|
|
||||||
|
|
||||||
// 如果已处于多指书写模式,禁用手掌擦功能
|
|
||||||
if (isInMultiTouchMode) {
|
|
||||||
isLastTouchEraser = false;
|
|
||||||
currentPalmEraserShape = null;
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
if (inkCanvas.EditingMode == InkCanvasEditingMode.Select) {
|
||||||
// 如果已经处于手掌擦状态,保持状态不变
|
// 套索选状态下只return,保证套索选可用
|
||||||
if (isLastTouchEraser && currentPalmEraserShape != null) {
|
|
||||||
inkCanvas.EraserShape = currentPalmEraserShape;
|
|
||||||
inkCanvas.EditingMode = InkCanvasEditingMode.EraseByPoint;
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
if (drawingShapeMode == 9) {
|
||||||
double boundsWidth = GetTouchBoundWidth(e), eraserMultiplier = 1.0;
|
if (isFirstTouchCuboid) {
|
||||||
if (!Settings.Advanced.EraserBindTouchMultiplier && Settings.Advanced.IsSpecialScreen)
|
CuboidFrontRectIniP = e.GetTouchPoint(inkCanvas).Position;
|
||||||
eraserMultiplier = 1 / Settings.Advanced.TouchMultiplier;
|
|
||||||
|
|
||||||
// 检查触控点数量,只有大于等于三个触控点时才激活手掌擦功能
|
|
||||||
if (dec.Count >= 3 && boundsWidth > BoundsWidth) {
|
|
||||||
// 保存当前的编辑模式,以便恢复
|
|
||||||
if (!isLastTouchEraser) {
|
|
||||||
prePalmEraserEditingMode = inkCanvas.EditingMode;
|
|
||||||
// 模拟点击橡皮选项卡
|
|
||||||
EraserIcon_Click(null, null);
|
|
||||||
}
|
|
||||||
|
|
||||||
isLastTouchEraser = true;
|
|
||||||
if (drawingShapeMode == 0 && forceEraser) return;
|
|
||||||
if (boundsWidth > BoundsWidth * 2.5) {
|
|
||||||
// 直接使用固定尺寸的矩形黑板擦形状,不随触控面积动态变化
|
|
||||||
currentPalmEraserShape = GetPalmRectangleEraserShape(eraserMultiplier);
|
|
||||||
inkCanvas.EraserShape = currentPalmEraserShape;
|
|
||||||
TouchDownPointsList[e.TouchDevice.Id] = InkCanvasEditingMode.EraseByPoint;
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
if (StackPanelPPTControls.Visibility == Visibility.Visible && inkCanvas.Strokes.Count == 0 &&
|
|
||||||
Settings.PowerPointSettings.IsEnableFingerGestureSlideShowControl) {
|
|
||||||
isLastTouchEraser = false;
|
|
||||||
currentPalmEraserShape = null;
|
|
||||||
inkCanvas.EditingMode = InkCanvasEditingMode.GestureOnly;
|
|
||||||
inkCanvas.Opacity = 0.1;
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
// 手掌橡皮固定为矩形黑板擦,大小由设置决定
|
|
||||||
currentPalmEraserShape = GetPalmRectangleEraserShape(eraserMultiplier);
|
|
||||||
inkCanvas.EraserShape = currentPalmEraserShape;
|
|
||||||
TouchDownPointsList[e.TouchDevice.Id] = InkCanvasEditingMode.EraseByPoint;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
// 允许MouseTouchMove在TouchMove时处理
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
else {
|
if (drawingShapeMode != 0) {
|
||||||
isLastTouchEraser = false;
|
return;
|
||||||
currentPalmEraserShape = null;
|
|
||||||
// 修复面积擦时不显示橡皮形状:无论 forcePointEraser 状态,均显示 50x50 橡皮
|
|
||||||
inkCanvas.EraserShape = new EllipseStylusShape(50, 50);
|
|
||||||
// 修复触屏状态下几何绘制功能不可用的问题:在几何绘制模式下不应该因为forceEraser而直接返回
|
|
||||||
if (forceEraser && drawingShapeMode == 0) return;
|
|
||||||
inkCanvas.EraserShape =
|
|
||||||
forcePointEraser ? new EllipseStylusShape(50, 50) : new EllipseStylusShape(5, 5);
|
|
||||||
if (forceEraser) return;
|
|
||||||
inkCanvas.EditingMode = InkCanvasEditingMode.Ink;
|
|
||||||
}
|
}
|
||||||
|
if (inkCanvas.EditingMode == InkCanvasEditingMode.Ink) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
inkCanvas.EditingMode = InkCanvasEditingMode.Ink;
|
||||||
}
|
}
|
||||||
|
|
||||||
private double GetTouchBoundWidth(TouchEventArgs e) {
|
|
||||||
var args = e.GetTouchPoint(null).Bounds;
|
|
||||||
double value;
|
|
||||||
if (!Settings.Advanced.IsQuadIR) value = args.Width;
|
|
||||||
else value = Math.Sqrt(args.Width * args.Height); //四边红外
|
|
||||||
if (Settings.Advanced.IsSpecialScreen) value *= Settings.Advanced.TouchMultiplier;
|
|
||||||
return value;
|
|
||||||
}
|
|
||||||
|
|
||||||
//记录触摸设备ID
|
|
||||||
private List<int> dec = new List<int>();
|
|
||||||
|
|
||||||
//中心点
|
|
||||||
private Point centerPoint;
|
|
||||||
private InkCanvasEditingMode lastInkCanvasEditingMode = InkCanvasEditingMode.Ink;
|
|
||||||
private bool isSingleFingerDragMode = false;
|
|
||||||
|
|
||||||
// 保存触发手掌擦前的编辑模式,用于手掌擦结束后恢复
|
|
||||||
private InkCanvasEditingMode prePalmEraserEditingMode = InkCanvasEditingMode.Ink;
|
|
||||||
|
|
||||||
private void inkCanvas_PreviewTouchDown(object sender, TouchEventArgs e) {
|
private void inkCanvas_PreviewTouchDown(object sender, TouchEventArgs e) {
|
||||||
|
SetCursorBasedOnEditingMode(inkCanvas);
|
||||||
|
|
||||||
inkCanvas.CaptureTouch(e.TouchDevice);
|
inkCanvas.CaptureTouch(e.TouchDevice);
|
||||||
ViewboxFloatingBar.IsHitTestVisible = false;
|
ViewboxFloatingBar.IsHitTestVisible = false;
|
||||||
|
|||||||
Reference in New Issue
Block a user