improve:issue #252

改进双指拖动
This commit is contained in:
2025-12-13 20:22:23 +08:00
parent 8190bf275c
commit c64e6a4554
+40 -15
View File
@@ -628,17 +628,30 @@ namespace Ink_Canvas
isMultiTouchTimerActive = false; isMultiTouchTimerActive = false;
} }
if (dec.Count == 0)
{
isSingleFingerDragMode = false;
if (drawingShapeMode == 0
&& inkCanvas.EditingMode != InkCanvasEditingMode.EraseByPoint
&& inkCanvas.EditingMode != InkCanvasEditingMode.EraseByStroke
&& inkCanvas.EditingMode != InkCanvasEditingMode.Select
&& inkCanvas.EditingMode != InkCanvasEditingMode.None)
{
if (lastInkCanvasEditingMode != InkCanvasEditingMode.None)
{
inkCanvas.EditingMode = lastInkCanvasEditingMode;
}
}
}
if (drawingShapeMode != 0) if (drawingShapeMode != 0)
{ {
isTouchDown = false; isTouchDown = false;
ViewboxFloatingBar.IsHitTestVisible = true; ViewboxFloatingBar.IsHitTestVisible = true;
BlackboardUIGridForInkReplay.IsHitTestVisible = true; BlackboardUIGridForInkReplay.IsHitTestVisible = true;
// 对于双曲线等需要多步绘制的图形,触摸抬手时应该进入下一步
if (drawingShapeMode == 24 || drawingShapeMode == 25) if (drawingShapeMode == 24 || drawingShapeMode == 25)
{ {
// 双曲线绘制:触摸抬手时进入下一步,但不自动触发鼠标抬起事件
// 让用户继续绘制第二笔
if (drawMultiStepShapeCurrentStep == 0) if (drawMultiStepShapeCurrentStep == 0)
{ {
// 第一笔完成,进入第二笔 // 第一笔完成,进入第二笔
@@ -657,7 +670,6 @@ namespace Ink_Canvas
} }
else else
{ {
// 其他单步绘制的图形,触摸抬手时完成绘制
var mouseArgs = new MouseButtonEventArgs(Mouse.PrimaryDevice, 0, MouseButton.Left) var mouseArgs = new MouseButtonEventArgs(Mouse.PrimaryDevice, 0, MouseButton.Left)
{ {
RoutedEvent = MouseLeftButtonUpEvent, RoutedEvent = MouseLeftButtonUpEvent,
@@ -688,24 +700,37 @@ namespace Ink_Canvas
private void Main_Grid_ManipulationCompleted(object sender, ManipulationCompletedEventArgs e) private void Main_Grid_ManipulationCompleted(object sender, ManipulationCompletedEventArgs e)
{ {
if (e.Manipulators.Count() != 0) return; if (e.Manipulators.Count() == 0)
if (drawingShapeMode == 0
&& inkCanvas.EditingMode != InkCanvasEditingMode.EraseByPoint
&& inkCanvas.EditingMode != InkCanvasEditingMode.EraseByStroke
&& inkCanvas.EditingMode != InkCanvasEditingMode.Select)
{ {
inkCanvas.EditingMode = InkCanvasEditingMode.Ink; if (dec.Count > 0)
lastInkCanvasEditingMode = InkCanvasEditingMode.Ink; {
dec.Clear();
}
isSingleFingerDragMode = false;
if (drawingShapeMode == 0
&& inkCanvas.EditingMode != InkCanvasEditingMode.EraseByPoint
&& inkCanvas.EditingMode != InkCanvasEditingMode.EraseByStroke
&& inkCanvas.EditingMode != InkCanvasEditingMode.Select)
{
inkCanvas.EditingMode = InkCanvasEditingMode.Ink;
lastInkCanvasEditingMode = InkCanvasEditingMode.Ink;
}
} }
} }
private void Main_Grid_ManipulationDelta(object sender, ManipulationDeltaEventArgs e) private void Main_Grid_ManipulationDelta(object sender, ManipulationDeltaEventArgs e)
{ {
if (isInMultiTouchMode || !Settings.Gesture.IsEnableTwoFingerGesture) return; if (isInMultiTouchMode || !Settings.Gesture.IsEnableTwoFingerGesture) return;
if ((dec.Count >= 2 && (Settings.PowerPointSettings.IsEnableTwoFingerGestureInPresentationMode ||
StackPanelPPTControls.Visibility != Visibility.Visible || bool hasMultipleManipulators = e.Manipulators.Count() >= 2;
StackPanelPPTButtons.Visibility == Visibility.Collapsed)) || bool shouldUseTwoFingerGesture = (dec.Count >= 2 && hasMultipleManipulators &&
isSingleFingerDragMode) (Settings.PowerPointSettings.IsEnableTwoFingerGestureInPresentationMode ||
StackPanelPPTControls.Visibility != Visibility.Visible ||
StackPanelPPTButtons.Visibility == Visibility.Collapsed)) ||
isSingleFingerDragMode;
if (shouldUseTwoFingerGesture)
{ {
var md = e.DeltaManipulation; var md = e.DeltaManipulation;
var trans = md.Translation; // 获得位移矢量 var trans = md.Translation; // 获得位移矢量