fix(Selection/Touch): 修复触摸拖动选择时的坐标计算问题

Signed-off-by: doudou0720 <98651603+doudou0720@users.noreply.github.com>
This commit is contained in:
doudou0720
2026-02-18 22:37:54 +08:00
parent 07de74b775
commit c2ca1c9702
@@ -552,6 +552,9 @@ namespace Ink_Canvas
var touchPoint = e.GetTouchPoint(null); var touchPoint = e.GetTouchPoint(null);
centerPoint = touchPoint.Position; centerPoint = touchPoint.Position;
lastTouchPointOnGridInkCanvasCover = touchPoint.Position; lastTouchPointOnGridInkCanvasCover = touchPoint.Position;
var touchPointInCanvas = e.GetTouchPoint(inkCanvas);
lastDragPointInCanvas = touchPointInCanvas.Position;
} }
} }
@@ -561,6 +564,8 @@ namespace Ink_Canvas
if (dec.Count >= 1) return; if (dec.Count >= 1) return;
isProgramChangeStrokeSelection = false; isProgramChangeStrokeSelection = false;
lastDragPointInCanvas = new Point(0, 0);
var touchUpPoint = e.GetTouchPoint(null).Position; var touchUpPoint = e.GetTouchPoint(null).Position;
if (lastTouchPointOnGridInkCanvasCover == touchUpPoint) if (lastTouchPointOnGridInkCanvasCover == touchUpPoint)
{ {
@@ -600,9 +605,9 @@ namespace Ink_Canvas
var currentTouchPoint = e.GetTouchPoint(inkCanvas).Position; var currentTouchPoint = e.GetTouchPoint(inkCanvas).Position;
// 检查是否有有效的起始触摸点 // 检查是否有有效的起始触摸点
if (lastTouchPointOnGridInkCanvasCover != new Point(0, 0)) if (lastDragPointInCanvas != new Point(0, 0))
{ {
var delta = currentTouchPoint - lastTouchPointOnGridInkCanvasCover; var delta = currentTouchPoint - lastDragPointInCanvas;
// 只有当移动距离足够大时才进行拖动(避免微小移动造成的抖动) // 只有当移动距离足够大时才进行拖动(避免微小移动造成的抖动)
if (Math.Abs(delta.X) > 1 || Math.Abs(delta.Y) > 1) if (Math.Abs(delta.X) > 1 || Math.Abs(delta.Y) > 1)
@@ -622,13 +627,14 @@ namespace Ink_Canvas
updateBorderStrokeSelectionControlLocation(); updateBorderStrokeSelectionControlLocation();
// 更新最后触摸点 // 更新最后触摸点
lastTouchPointOnGridInkCanvasCover = currentTouchPoint; lastDragPointInCanvas = currentTouchPoint;
} }
} }
} }
} }
private Point lastTouchPointOnGridInkCanvasCover = new Point(0, 0); private Point lastTouchPointOnGridInkCanvasCover = new Point(0, 0);
private Point lastDragPointInCanvas = new Point(0, 0);
private void LassoSelect_Click(object sender, RoutedEventArgs e) private void LassoSelect_Click(object sender, RoutedEventArgs e)
{ {