improve:改进多指触摸操作
This commit is contained in:
@@ -454,6 +454,13 @@ namespace Ink_Canvas {
|
|||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
private void inkCanvas_TouchMove(object sender, TouchEventArgs e) {
|
private void inkCanvas_TouchMove(object sender, TouchEventArgs e) {
|
||||||
|
// 如果处于手掌擦状态,继续使用相同的橡皮形状
|
||||||
|
if (isLastTouchEraser && currentPalmEraserShape != null) {
|
||||||
|
inkCanvas.EraserShape = currentPalmEraserShape;
|
||||||
|
inkCanvas.EditingMode = InkCanvasEditingMode.EraseByPoint;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
if (isSingleFingerDragMode) return;
|
if (isSingleFingerDragMode) return;
|
||||||
|
|
||||||
// 处理形状绘制模式
|
// 处理形状绘制模式
|
||||||
|
|||||||
@@ -206,6 +206,8 @@ 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 bool forcePointEraser = true;
|
||||||
|
// 用于记录手掌擦的尺寸和形状
|
||||||
|
private StylusShape currentPalmEraserShape = null;
|
||||||
|
|
||||||
private void Main_Grid_TouchDown(object sender, TouchEventArgs e) {
|
private void Main_Grid_TouchDown(object sender, TouchEventArgs e) {
|
||||||
// 确保触摸时显示自定义光标
|
// 确保触摸时显示自定义光标
|
||||||
@@ -226,6 +228,14 @@ namespace Ink_Canvas {
|
|||||||
if (NeedUpdateIniP()) iniP = e.GetTouchPoint(inkCanvas).Position;
|
if (NeedUpdateIniP()) iniP = e.GetTouchPoint(inkCanvas).Position;
|
||||||
if (drawingShapeMode == 9 && isFirstTouchCuboid == false) MouseTouchMove(iniP);
|
if (drawingShapeMode == 9 && isFirstTouchCuboid == false) MouseTouchMove(iniP);
|
||||||
inkCanvas.Opacity = 1;
|
inkCanvas.Opacity = 1;
|
||||||
|
|
||||||
|
// 如果已经处于手掌擦状态,保持状态不变
|
||||||
|
if (isLastTouchEraser && currentPalmEraserShape != null) {
|
||||||
|
inkCanvas.EraserShape = currentPalmEraserShape;
|
||||||
|
inkCanvas.EditingMode = InkCanvasEditingMode.EraseByPoint;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
double boundsWidth = GetTouchBoundWidth(e), eraserMultiplier = 1.0;
|
double boundsWidth = GetTouchBoundWidth(e), eraserMultiplier = 1.0;
|
||||||
if (!Settings.Advanced.EraserBindTouchMultiplier && Settings.Advanced.IsSpecialScreen)
|
if (!Settings.Advanced.EraserBindTouchMultiplier && Settings.Advanced.IsSpecialScreen)
|
||||||
eraserMultiplier = 1 / Settings.Advanced.TouchMultiplier;
|
eraserMultiplier = 1 / Settings.Advanced.TouchMultiplier;
|
||||||
@@ -249,34 +259,38 @@ namespace Ink_Canvas {
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
// 根据EraserShapeType设置合适的橡皮擦形状
|
// 根据EraserShapeType设置合适的橡皮擦形状并保存
|
||||||
if (Settings.Canvas.EraserShapeType == 0) {
|
if (Settings.Canvas.EraserShapeType == 0) {
|
||||||
// 圆形擦
|
// 圆形擦
|
||||||
inkCanvas.EraserShape = new EllipseStylusShape(boundsWidth * k * eraserMultiplier,
|
currentPalmEraserShape = new EllipseStylusShape(boundsWidth * k * eraserMultiplier,
|
||||||
boundsWidth * k * eraserMultiplier);
|
boundsWidth * k * eraserMultiplier);
|
||||||
} else if (Settings.Canvas.EraserShapeType == 1) {
|
} else if (Settings.Canvas.EraserShapeType == 1) {
|
||||||
// 矩形黑板擦
|
// 矩形黑板擦
|
||||||
inkCanvas.EraserShape = new RectangleStylusShape(boundsWidth * k * eraserMultiplier * 0.6,
|
currentPalmEraserShape = new RectangleStylusShape(boundsWidth * k * eraserMultiplier * 0.6,
|
||||||
boundsWidth * k * eraserMultiplier);
|
boundsWidth * k * eraserMultiplier);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
inkCanvas.EraserShape = currentPalmEraserShape;
|
||||||
inkCanvas.EditingMode = InkCanvasEditingMode.EraseByPoint;
|
inkCanvas.EditingMode = InkCanvasEditingMode.EraseByPoint;
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
if (StackPanelPPTControls.Visibility == Visibility.Visible && inkCanvas.Strokes.Count == 0 &&
|
if (StackPanelPPTControls.Visibility == Visibility.Visible && inkCanvas.Strokes.Count == 0 &&
|
||||||
Settings.PowerPointSettings.IsEnableFingerGestureSlideShowControl) {
|
Settings.PowerPointSettings.IsEnableFingerGestureSlideShowControl) {
|
||||||
isLastTouchEraser = false;
|
isLastTouchEraser = false;
|
||||||
|
currentPalmEraserShape = null;
|
||||||
inkCanvas.EditingMode = InkCanvasEditingMode.GestureOnly;
|
inkCanvas.EditingMode = InkCanvasEditingMode.GestureOnly;
|
||||||
inkCanvas.Opacity = 0.1;
|
inkCanvas.Opacity = 0.1;
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
inkCanvas.EraserShape = new EllipseStylusShape(5, 5);
|
currentPalmEraserShape = new EllipseStylusShape(5, 5);
|
||||||
|
inkCanvas.EraserShape = currentPalmEraserShape;
|
||||||
inkCanvas.EditingMode = InkCanvasEditingMode.EraseByStroke;
|
inkCanvas.EditingMode = InkCanvasEditingMode.EraseByStroke;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
isLastTouchEraser = false;
|
isLastTouchEraser = false;
|
||||||
|
currentPalmEraserShape = null;
|
||||||
// 修复面积擦时不显示橡皮形状:无论 forcePointEraser 状态,均显示 50x50 橡皮
|
// 修复面积擦时不显示橡皮形状:无论 forcePointEraser 状态,均显示 50x50 橡皮
|
||||||
inkCanvas.EraserShape = new EllipseStylusShape(50, 50);
|
inkCanvas.EraserShape = new EllipseStylusShape(50, 50);
|
||||||
// 修复触屏状态下几何绘制功能不可用的问题:在几何绘制模式下不应该因为forceEraser而直接返回
|
// 修复触屏状态下几何绘制功能不可用的问题:在几何绘制模式下不应该因为forceEraser而直接返回
|
||||||
@@ -328,7 +342,6 @@ namespace Ink_Canvas {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private void inkCanvas_PreviewTouchUp(object sender, TouchEventArgs e) {
|
private void inkCanvas_PreviewTouchUp(object sender, TouchEventArgs e) {
|
||||||
|
|
||||||
inkCanvas.ReleaseAllTouchCaptures();
|
inkCanvas.ReleaseAllTouchCaptures();
|
||||||
ViewboxFloatingBar.IsHitTestVisible = true;
|
ViewboxFloatingBar.IsHitTestVisible = true;
|
||||||
BlackboardUIGridForInkReplay.IsHitTestVisible = true;
|
BlackboardUIGridForInkReplay.IsHitTestVisible = true;
|
||||||
@@ -343,6 +356,7 @@ namespace Ink_Canvas {
|
|||||||
// 如果是手掌触发的面积擦抬起,需要确保橡皮擦形状被正确重置
|
// 如果是手掌触发的面积擦抬起,需要确保橡皮擦形状被正确重置
|
||||||
if (isLastTouchEraser && dec.Count == 0) {
|
if (isLastTouchEraser && dec.Count == 0) {
|
||||||
isLastTouchEraser = false;
|
isLastTouchEraser = false;
|
||||||
|
currentPalmEraserShape = null; // 清除保存的手掌擦形状
|
||||||
if (inkCanvas.EditingMode == InkCanvasEditingMode.EraseByPoint && forcePointEraser) {
|
if (inkCanvas.EditingMode == InkCanvasEditingMode.EraseByPoint && forcePointEraser) {
|
||||||
// 重新应用当前设置的橡皮擦形状
|
// 重新应用当前设置的橡皮擦形状
|
||||||
ApplyCurrentEraserShape();
|
ApplyCurrentEraserShape();
|
||||||
@@ -370,26 +384,6 @@ namespace Ink_Canvas {
|
|||||||
inkCanvas.EditingMode = InkCanvasEditingMode.Ink;
|
inkCanvas.EditingMode = InkCanvasEditingMode.Ink;
|
||||||
}
|
}
|
||||||
|
|
||||||
// -- removed --
|
|
||||||
//
|
|
||||||
//private void inkCanvas_ManipulationStarted(object sender, ManipulationStartedEventArgs e)
|
|
||||||
//{
|
|
||||||
// if (isInMultiTouchMode || !Settings.Gesture.IsEnableTwoFingerGesture || inkCanvas.Strokes.Count == 0 || dec.Count() < 2) return;
|
|
||||||
// _currentCommitType = CommitReason.Manipulation;
|
|
||||||
// StrokeCollection strokes = inkCanvas.GetSelectedStrokes();
|
|
||||||
// if (strokes.Count != 0)
|
|
||||||
// {
|
|
||||||
// inkCanvas.Strokes.Replace(strokes, strokes.Clone());
|
|
||||||
// }
|
|
||||||
// else
|
|
||||||
// {
|
|
||||||
// var originalStrokes = inkCanvas.Strokes;
|
|
||||||
// var targetStrokes = originalStrokes.Clone();
|
|
||||||
// originalStrokes.Replace(originalStrokes, targetStrokes);
|
|
||||||
// }
|
|
||||||
// _currentCommitType = CommitReason.UserInput;
|
|
||||||
//}
|
|
||||||
|
|
||||||
private void Main_Grid_ManipulationDelta(object sender, ManipulationDeltaEventArgs e) {
|
private void Main_Grid_ManipulationDelta(object sender, ManipulationDeltaEventArgs e) {
|
||||||
// 手掌擦时禁止移动/缩放
|
// 手掌擦时禁止移动/缩放
|
||||||
if (isLastTouchEraser || inkCanvas.EditingMode == InkCanvasEditingMode.EraseByPoint)
|
if (isLastTouchEraser || inkCanvas.EditingMode == InkCanvasEditingMode.EraseByPoint)
|
||||||
|
|||||||
Binary file not shown.
@@ -13,7 +13,7 @@ E:\ICC CE\ICC CE main\ICC-CE\Ink Canvas\App.xaml
|
|||||||
13173459795
|
13173459795
|
||||||
|
|
||||||
56-1167124909
|
56-1167124909
|
||||||
46-47806484
|
46-1910739249
|
||||||
MainWindow.xaml;Resources\DrawShapeImageDictionary.xaml;Resources\IconImageDictionary.xaml;Resources\SeewoImageDictionary.xaml;Resources\Styles\Dark.xaml;Resources\Styles\Light.xaml;Windows\CountdownTimerWindow.xaml;Windows\CycleProcessBar.xaml;Windows\HasNewUpdateWindow.xaml;Windows\NamesInputWindow.xaml;Windows\OperatingGuideWindow.xaml;Windows\RandWindow.xaml;Windows\YesOrNoNotificationWindow.xaml;
|
MainWindow.xaml;Resources\DrawShapeImageDictionary.xaml;Resources\IconImageDictionary.xaml;Resources\SeewoImageDictionary.xaml;Resources\Styles\Dark.xaml;Resources\Styles\Light.xaml;Windows\CountdownTimerWindow.xaml;Windows\CycleProcessBar.xaml;Windows\HasNewUpdateWindow.xaml;Windows\NamesInputWindow.xaml;Windows\OperatingGuideWindow.xaml;Windows\RandWindow.xaml;Windows\YesOrNoNotificationWindow.xaml;
|
||||||
|
|
||||||
False
|
False
|
||||||
|
|||||||
Reference in New Issue
Block a user