fix:触屏类问题及设置内点击问题
This commit is contained in:
@@ -170,7 +170,7 @@
|
||||
<Grid x:Name="Main_Grid">
|
||||
|
||||
<!--// 设置界面 //-->
|
||||
<Grid Panel.ZIndex="999" x:Name="BorderSettingsMask" MouseDown="SettingsOverlayClick" IsHitTestVisible="False"
|
||||
<Grid Panel.ZIndex="999" x:Name="BorderSettingsMask" MouseDown="SettingsOverlayClick" IsHitTestVisible="True"
|
||||
Margin="0,0,0,0">
|
||||
<Border Name="BorderSettings" Background="#ee18181b" ui:ThemeManager.RequestedTheme="Dark" Width="490"
|
||||
HorizontalAlignment="Left" Margin="300,150,0,350" Visibility="Visible">
|
||||
|
||||
@@ -480,7 +480,22 @@ namespace Ink_Canvas {
|
||||
canvas.Cursor = Cursors.Cross;
|
||||
}
|
||||
|
||||
// 确保光标可见,无论是鼠标、触控还是手写笔
|
||||
System.Windows.Forms.Cursor.Show();
|
||||
|
||||
// 强制应用光标设置
|
||||
canvas.ForceCursor = true;
|
||||
|
||||
// 确保手写笔模式下也能显示光标
|
||||
if (Tablet.TabletDevices.Count > 0) {
|
||||
foreach (TabletDevice device in Tablet.TabletDevices) {
|
||||
if (device.Type == TabletDeviceType.Stylus) {
|
||||
// 手写笔设备存在,强制显示光标
|
||||
System.Windows.Forms.Cursor.Show();
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
} else {
|
||||
canvas.UseCustomCursor = false;
|
||||
canvas.ForceCursor = false;
|
||||
|
||||
@@ -36,42 +36,10 @@ namespace Ink_Canvas {
|
||||
} else {
|
||||
forceEraser = true;
|
||||
forcePointEraser = true;
|
||||
double k = 1;
|
||||
if (Settings.Canvas.EraserShapeType == 0) {
|
||||
switch (BoardComboBoxEraserSize.SelectedIndex)
|
||||
{
|
||||
case 0:
|
||||
k = 0.5;
|
||||
break;
|
||||
case 1:
|
||||
k = 0.8;
|
||||
break;
|
||||
case 3:
|
||||
k = 1.25;
|
||||
break;
|
||||
case 4:
|
||||
k = 1.8;
|
||||
break;
|
||||
}
|
||||
inkCanvas.EraserShape = new EllipseStylusShape(k * 90, k * 90);
|
||||
} else if (Settings.Canvas.EraserShapeType == 1) {
|
||||
switch (BoardComboBoxEraserSize.SelectedIndex)
|
||||
{
|
||||
case 0:
|
||||
k = 0.7;
|
||||
break;
|
||||
case 1:
|
||||
k = 0.9;
|
||||
break;
|
||||
case 3:
|
||||
k = 1.2;
|
||||
break;
|
||||
case 4:
|
||||
k = 1.6;
|
||||
break;
|
||||
}
|
||||
inkCanvas.EraserShape = new RectangleStylusShape(k * 90 * 0.6, k * 90);
|
||||
}
|
||||
|
||||
// 使用统一的方法应用橡皮擦形状,确保一致性
|
||||
ApplyCurrentEraserShape();
|
||||
|
||||
inkCanvas.EditingMode = InkCanvasEditingMode.EraseByPoint;
|
||||
drawingShapeMode = 0;
|
||||
|
||||
|
||||
@@ -282,6 +282,7 @@ namespace Ink_Canvas {
|
||||
AnimationsHelper.HideWithSlideAndFade(BoardBorderRightPageListView);
|
||||
|
||||
if (BorderSettings.Visibility == Visibility.Visible) {
|
||||
// 设置蒙版为不可点击,并移除背景
|
||||
BorderSettingsMask.IsHitTestVisible = false;
|
||||
BorderSettingsMask.Background = null;
|
||||
var sb = new Storyboard();
|
||||
@@ -403,6 +404,11 @@ namespace Ink_Canvas {
|
||||
System.Windows.Controls.Canvas.SetLeft(FloatingbarSelectionBG, 28 * 5);
|
||||
break;
|
||||
}
|
||||
case "shape": {
|
||||
// 对图形模式进行特殊处理,不修改按钮UI状态
|
||||
// 只隐藏相关面板,但保持图形绘制模式
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -1422,44 +1428,9 @@ namespace Ink_Canvas {
|
||||
|
||||
forceEraser = true;
|
||||
forcePointEraser = true;
|
||||
if (Settings.Canvas.EraserShapeType == 0) {
|
||||
double k = 1;
|
||||
switch (Settings.Canvas.EraserSize) {
|
||||
case 0:
|
||||
k = 0.5;
|
||||
break;
|
||||
case 1:
|
||||
k = 0.8;
|
||||
break;
|
||||
case 3:
|
||||
k = 1.25;
|
||||
break;
|
||||
case 4:
|
||||
k = 1.8;
|
||||
break;
|
||||
}
|
||||
|
||||
inkCanvas.EraserShape = new EllipseStylusShape(k * 90, k * 90);
|
||||
}
|
||||
else if (Settings.Canvas.EraserShapeType == 1) {
|
||||
double k = 1;
|
||||
switch (Settings.Canvas.EraserSize) {
|
||||
case 0:
|
||||
k = 0.7;
|
||||
break;
|
||||
case 1:
|
||||
k = 0.9;
|
||||
break;
|
||||
case 3:
|
||||
k = 1.2;
|
||||
break;
|
||||
case 4:
|
||||
k = 1.6;
|
||||
break;
|
||||
}
|
||||
|
||||
inkCanvas.EraserShape = new RectangleStylusShape(k * 90 * 0.6, k * 90);
|
||||
}
|
||||
|
||||
// 即使手掌触发过面积擦,也强制应用当前的EraserShapeType设置
|
||||
ApplyCurrentEraserShape();
|
||||
|
||||
if (inkCanvas.EditingMode == InkCanvasEditingMode.EraseByPoint) {
|
||||
if (EraserSizePanel.Visibility == Visibility.Collapsed) {
|
||||
@@ -1498,6 +1469,33 @@ namespace Ink_Canvas {
|
||||
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.8 : 1.6;
|
||||
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);
|
||||
}
|
||||
}
|
||||
|
||||
private void EraserIconByStrokes_Click(object sender, RoutedEventArgs e) {
|
||||
|
||||
@@ -1549,7 +1547,8 @@ namespace Ink_Canvas {
|
||||
|
||||
private void DrawShapePromptToPen() {
|
||||
if (isLongPressSelected == true) {
|
||||
HideSubPanels("pen");
|
||||
// 如果是长按选中的状态,只隐藏面板,不切换到笔模式
|
||||
HideSubPanels("shape");
|
||||
}
|
||||
else {
|
||||
if (StackPanelCanvasControls.Visibility == Visibility.Visible)
|
||||
@@ -1629,7 +1628,23 @@ namespace Ink_Canvas {
|
||||
|
||||
private void SettingsOverlayClick(object sender, MouseButtonEventArgs e) {
|
||||
if (isOpeningOrHidingSettingsPane == true) return;
|
||||
BtnSettings_Click(null, null);
|
||||
|
||||
// 获取点击的位置
|
||||
Point clickPoint = e.GetPosition(BorderSettingsMask);
|
||||
|
||||
// 获取BorderSettings的位置和大小
|
||||
Point settingsPosition = BorderSettings.TranslatePoint(new Point(0, 0), BorderSettingsMask);
|
||||
Rect settingsRect = new Rect(
|
||||
settingsPosition.X,
|
||||
settingsPosition.Y,
|
||||
BorderSettings.ActualWidth,
|
||||
BorderSettings.ActualHeight
|
||||
);
|
||||
|
||||
// 如果点击位置不在设置界面内部,才关闭设置界面
|
||||
if (!settingsRect.Contains(clickPoint)) {
|
||||
BtnSettings_Click(null, null);
|
||||
}
|
||||
}
|
||||
|
||||
private bool isOpeningOrHidingSettingsPane = false;
|
||||
@@ -1639,6 +1654,7 @@ namespace Ink_Canvas {
|
||||
HideSubPanels();
|
||||
}
|
||||
else {
|
||||
// 设置蒙版为可点击,并添加半透明背景
|
||||
BorderSettingsMask.IsHitTestVisible = true;
|
||||
BorderSettingsMask.Background = new SolidColorBrush(Color.FromArgb(1, 0, 0, 0));
|
||||
SettingsPanelScrollViewer.ScrollToTop();
|
||||
|
||||
@@ -792,46 +792,17 @@ namespace Ink_Canvas {
|
||||
ComboBoxEraserSizeFloatingBar.SelectedIndex = s.SelectedIndex;
|
||||
ComboBoxEraserSize.SelectedIndex = s.SelectedIndex;
|
||||
}
|
||||
if (Settings.Canvas.EraserShapeType == 0) {
|
||||
double k = 1;
|
||||
switch (s.SelectedIndex) {
|
||||
case 0:
|
||||
k = 0.5;
|
||||
break;
|
||||
case 1:
|
||||
k = 0.8;
|
||||
break;
|
||||
case 3:
|
||||
k = 1.25;
|
||||
break;
|
||||
case 4:
|
||||
k = 1.8;
|
||||
break;
|
||||
}
|
||||
|
||||
inkCanvas.EraserShape = new EllipseStylusShape(k * 90, k * 90);
|
||||
} else if (Settings.Canvas.EraserShapeType == 1) {
|
||||
double k = 1;
|
||||
switch (s.SelectedIndex) {
|
||||
case 0:
|
||||
k = 0.7;
|
||||
break;
|
||||
case 1:
|
||||
k = 0.9;
|
||||
break;
|
||||
case 3:
|
||||
k = 1.2;
|
||||
break;
|
||||
case 4:
|
||||
k = 1.6;
|
||||
break;
|
||||
}
|
||||
|
||||
inkCanvas.EraserShape = new RectangleStylusShape(k * 90 * 0.6, k * 90);
|
||||
|
||||
// 使用统一的方法应用橡皮擦形状
|
||||
ApplyCurrentEraserShape();
|
||||
|
||||
// 确保当前处于橡皮擦模式时能立即看到效果
|
||||
if (inkCanvas.EditingMode == InkCanvasEditingMode.EraseByPoint) {
|
||||
// 先切换一下模式,再切回来,确保橡皮擦形状得到刷新
|
||||
inkCanvas.EditingMode = InkCanvasEditingMode.Ink;
|
||||
inkCanvas.EditingMode = InkCanvasEditingMode.EraseByPoint;
|
||||
}
|
||||
|
||||
inkCanvas.EditingMode = InkCanvasEditingMode.Ink;
|
||||
inkCanvas.EditingMode = InkCanvasEditingMode.EraseByPoint;
|
||||
|
||||
SaveSettingsToFile();
|
||||
}
|
||||
|
||||
@@ -840,23 +811,11 @@ namespace Ink_Canvas {
|
||||
Settings.Canvas.EraserShapeType = 0;
|
||||
SaveSettingsToFile();
|
||||
CheckEraserTypeTab();
|
||||
double k = 1;
|
||||
switch (ComboBoxEraserSizeFloatingBar.SelectedIndex) {
|
||||
case 0:
|
||||
k = 0.5;
|
||||
break;
|
||||
case 1:
|
||||
k = 0.8;
|
||||
break;
|
||||
case 3:
|
||||
k = 1.25;
|
||||
break;
|
||||
case 4:
|
||||
k = 1.8;
|
||||
break;
|
||||
}
|
||||
|
||||
inkCanvas.EraserShape = new EllipseStylusShape(k * 90, k * 90);
|
||||
|
||||
// 使用统一的方法应用橡皮擦形状
|
||||
ApplyCurrentEraserShape();
|
||||
|
||||
// 确保当前处于橡皮擦模式时能立即看到效果
|
||||
inkCanvas.EditingMode = InkCanvasEditingMode.Ink;
|
||||
inkCanvas.EditingMode = InkCanvasEditingMode.EraseByPoint;
|
||||
}
|
||||
@@ -866,23 +825,11 @@ namespace Ink_Canvas {
|
||||
Settings.Canvas.EraserShapeType = 1;
|
||||
SaveSettingsToFile();
|
||||
CheckEraserTypeTab();
|
||||
double k = 1;
|
||||
switch (ComboBoxEraserSizeFloatingBar.SelectedIndex) {
|
||||
case 0:
|
||||
k = 0.7;
|
||||
break;
|
||||
case 1:
|
||||
k = 0.9;
|
||||
break;
|
||||
case 3:
|
||||
k = 1.2;
|
||||
break;
|
||||
case 4:
|
||||
k = 1.6;
|
||||
break;
|
||||
}
|
||||
|
||||
inkCanvas.EraserShape = new RectangleStylusShape(k * 90 * 0.6, k * 90);
|
||||
|
||||
// 使用统一的方法应用橡皮擦形状
|
||||
ApplyCurrentEraserShape();
|
||||
|
||||
// 确保当前处于橡皮擦模式时能立即看到效果
|
||||
inkCanvas.EditingMode = InkCanvasEditingMode.Ink;
|
||||
inkCanvas.EditingMode = InkCanvasEditingMode.EraseByPoint;
|
||||
}
|
||||
@@ -1347,29 +1294,52 @@ namespace Ink_Canvas {
|
||||
BoardToggleSwitchEnableMultiTouchMode.IsOn = ToggleSwitchEnableMultiTouchMode.IsOn;
|
||||
else
|
||||
ToggleSwitchEnableMultiTouchMode.IsOn = BoardToggleSwitchEnableMultiTouchMode.IsOn;
|
||||
|
||||
if (ToggleSwitchEnableMultiTouchMode.IsOn) {
|
||||
if (!isInMultiTouchMode) {
|
||||
// 保存当前编辑模式和绘图工具状态
|
||||
InkCanvasEditingMode currentEditingMode = inkCanvas.EditingMode;
|
||||
int currentDrawingShapeMode = drawingShapeMode;
|
||||
bool currentForceEraser = forceEraser;
|
||||
|
||||
inkCanvas.StylusDown += MainWindow_StylusDown;
|
||||
inkCanvas.StylusMove += MainWindow_StylusMove;
|
||||
inkCanvas.StylusUp += MainWindow_StylusUp;
|
||||
inkCanvas.TouchDown += MainWindow_TouchDown;
|
||||
inkCanvas.TouchDown -= Main_Grid_TouchDown;
|
||||
|
||||
// 先设为None再设回原来的模式,避免可能的事件冲突
|
||||
inkCanvas.EditingMode = InkCanvasEditingMode.None;
|
||||
inkCanvas.EditingMode = InkCanvasEditingMode.Ink;
|
||||
inkCanvas.Children.Clear();
|
||||
isInMultiTouchMode = true;
|
||||
|
||||
// 恢复到之前的编辑状态
|
||||
inkCanvas.EditingMode = currentEditingMode;
|
||||
drawingShapeMode = currentDrawingShapeMode;
|
||||
forceEraser = currentForceEraser;
|
||||
}
|
||||
} else {
|
||||
if (isInMultiTouchMode) {
|
||||
// 保存当前编辑模式和绘图工具状态
|
||||
InkCanvasEditingMode currentEditingMode = inkCanvas.EditingMode;
|
||||
int currentDrawingShapeMode = drawingShapeMode;
|
||||
bool currentForceEraser = forceEraser;
|
||||
|
||||
inkCanvas.StylusDown -= MainWindow_StylusDown;
|
||||
inkCanvas.StylusMove -= MainWindow_StylusMove;
|
||||
inkCanvas.StylusUp -= MainWindow_StylusUp;
|
||||
inkCanvas.TouchDown -= MainWindow_TouchDown;
|
||||
inkCanvas.TouchDown += Main_Grid_TouchDown;
|
||||
|
||||
// 先设为None再设回原来的模式,避免可能的事件冲突
|
||||
inkCanvas.EditingMode = InkCanvasEditingMode.None;
|
||||
inkCanvas.EditingMode = InkCanvasEditingMode.Ink;
|
||||
inkCanvas.Children.Clear();
|
||||
isInMultiTouchMode = false;
|
||||
|
||||
// 恢复到之前的编辑状态
|
||||
inkCanvas.EditingMode = currentEditingMode;
|
||||
drawingShapeMode = currentDrawingShapeMode;
|
||||
forceEraser = currentForceEraser;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -113,7 +113,16 @@ namespace Ink_Canvas {
|
||||
|
||||
private Task<bool> CheckIsDrawingShapesInMultiTouchMode() {
|
||||
if (isInMultiTouchMode) {
|
||||
ToggleSwitchEnableMultiTouchMode.IsOn = false;
|
||||
// 不关闭多指书写模式,而是保存状态,暂时禁用多指书写相关的事件处理
|
||||
// 不再调用 ToggleSwitchEnableMultiTouchMode.IsOn = false;
|
||||
|
||||
// 暂时禁用多指书写事件处理,以避免冲突
|
||||
inkCanvas.StylusDown -= MainWindow_StylusDown;
|
||||
inkCanvas.StylusMove -= MainWindow_StylusMove;
|
||||
inkCanvas.StylusUp -= MainWindow_StylusUp;
|
||||
inkCanvas.TouchDown -= MainWindow_TouchDown;
|
||||
|
||||
// 记录已暂时禁用多指书写模式,但实际上多指书写开关仍然为打开状态
|
||||
lastIsInMultiTouchMode = true;
|
||||
}
|
||||
|
||||
@@ -129,6 +138,14 @@ namespace Ink_Canvas {
|
||||
inkCanvas.IsManipulationEnabled = true;
|
||||
CancelSingleFingerDragMode();
|
||||
}
|
||||
else {
|
||||
// 即使不是长按,也设置必要的绘图状态
|
||||
forceEraser = true;
|
||||
drawingShapeMode = 1;
|
||||
inkCanvas.EditingMode = InkCanvasEditingMode.None;
|
||||
inkCanvas.IsManipulationEnabled = true;
|
||||
isLongPressSelected = true; // 设置为选中状态,避免抬笔后切换回笔模式
|
||||
}
|
||||
|
||||
lastMouseDownSender = null;
|
||||
if (isLongPressSelected) {
|
||||
@@ -189,6 +206,14 @@ namespace Ink_Canvas {
|
||||
inkCanvas.IsManipulationEnabled = true;
|
||||
CancelSingleFingerDragMode();
|
||||
}
|
||||
else {
|
||||
// 即使不是长按,也设置必要的绘图状态
|
||||
forceEraser = true;
|
||||
drawingShapeMode = 2;
|
||||
inkCanvas.EditingMode = InkCanvasEditingMode.None;
|
||||
inkCanvas.IsManipulationEnabled = true;
|
||||
isLongPressSelected = true; // 设置为选中状态,避免抬笔后切换回笔模式
|
||||
}
|
||||
|
||||
lastMouseDownSender = null;
|
||||
if (isLongPressSelected) {
|
||||
@@ -276,6 +301,7 @@ namespace Ink_Canvas {
|
||||
drawingShapeMode = 3;
|
||||
inkCanvas.EditingMode = InkCanvasEditingMode.None;
|
||||
inkCanvas.IsManipulationEnabled = true;
|
||||
isLongPressSelected = true; // 设置为选中状态,避免抬笔后切换回笔模式
|
||||
CancelSingleFingerDragMode();
|
||||
DrawShapePromptToPen();
|
||||
}
|
||||
@@ -435,7 +461,12 @@ namespace Ink_Canvas {
|
||||
if (isLastTouchEraser) return;
|
||||
//EraserContainer.Background = null;
|
||||
//ImageEraser.Visibility = Visibility.Visible;
|
||||
if (isWaitUntilNextTouchDown) return;
|
||||
|
||||
// 修复触屏状态下几何绘制功能不可用的问题
|
||||
// 在几何绘制模式下,即使isWaitUntilNextTouchDown为true,也应该处理触摸移动事件
|
||||
// 只有当多点触控时才需要等待下一次触摸
|
||||
if (isWaitUntilNextTouchDown && dec.Count > 1) return;
|
||||
|
||||
if (dec.Count > 1) {
|
||||
isWaitUntilNextTouchDown = true;
|
||||
try {
|
||||
@@ -447,6 +478,11 @@ namespace Ink_Canvas {
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
// 在几何绘制模式下,确保处理单点触控的移动事件
|
||||
Point touchPoint = e.GetTouchPoint(inkCanvas).Position;
|
||||
MouseTouchMove(touchPoint);
|
||||
return; // 处理完几何绘制后直接返回,不执行后面的代码
|
||||
}
|
||||
|
||||
// 触摸移动时保持自定义光标显示
|
||||
@@ -1346,8 +1382,34 @@ namespace Ink_Canvas {
|
||||
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);
|
||||
if (dec.Count == 0) isWaitUntilNextTouchDown = false;
|
||||
// 修改此处逻辑,在长按选择图形模式下保持isWaitUntilNextTouchDown
|
||||
if (dec.Count == 0 && !isLongPressSelected) isWaitUntilNextTouchDown = false;
|
||||
}
|
||||
|
||||
private Stroke lastTempStroke = null;
|
||||
@@ -1537,17 +1599,37 @@ namespace Ink_Canvas {
|
||||
}
|
||||
|
||||
if (lastIsInMultiTouchMode) {
|
||||
ToggleSwitchEnableMultiTouchMode.IsOn = true;
|
||||
// 不再重新启用开关,而是恢复多指书写相关的事件处理
|
||||
// ToggleSwitchEnableMultiTouchMode.IsOn = true;
|
||||
|
||||
// 恢复多指书写事件处理
|
||||
inkCanvas.StylusDown += MainWindow_StylusDown;
|
||||
inkCanvas.StylusMove += MainWindow_StylusMove;
|
||||
inkCanvas.StylusUp += MainWindow_StylusUp;
|
||||
inkCanvas.TouchDown += MainWindow_TouchDown;
|
||||
|
||||
lastIsInMultiTouchMode = false;
|
||||
}
|
||||
}
|
||||
|
||||
// 修改此处逻辑,确保在正确的情况下才切换回笔模式
|
||||
if (drawingShapeMode != 9 && drawingShapeMode != 0 && drawingShapeMode != 24 && drawingShapeMode != 25) {
|
||||
if (isLongPressSelected) { }
|
||||
if (isLongPressSelected) {
|
||||
// 如果是长按选中的情况,保持图形模式,不做任何切换
|
||||
isWaitUntilNextTouchDown = true; // 保持当前绘图模式直到下一次触摸
|
||||
}
|
||||
else {
|
||||
BtnPen_Click(null, null); //画完一次还原到笔模式
|
||||
if (lastIsInMultiTouchMode) {
|
||||
ToggleSwitchEnableMultiTouchMode.IsOn = true;
|
||||
// 不再重新启用开关,而是恢复多指书写相关的事件处理
|
||||
// ToggleSwitchEnableMultiTouchMode.IsOn = true;
|
||||
|
||||
// 恢复多指书写事件处理
|
||||
inkCanvas.StylusDown += MainWindow_StylusDown;
|
||||
inkCanvas.StylusMove += MainWindow_StylusMove;
|
||||
inkCanvas.StylusUp += MainWindow_StylusUp;
|
||||
inkCanvas.TouchDown += MainWindow_TouchDown;
|
||||
|
||||
lastIsInMultiTouchMode = false;
|
||||
}
|
||||
}
|
||||
@@ -1573,7 +1655,15 @@ namespace Ink_Canvas {
|
||||
else {
|
||||
BtnPen_Click(null, null); //画完还原到笔模式
|
||||
if (lastIsInMultiTouchMode) {
|
||||
ToggleSwitchEnableMultiTouchMode.IsOn = true;
|
||||
// 不再重新启用开关,而是恢复多指书写相关的事件处理
|
||||
// ToggleSwitchEnableMultiTouchMode.IsOn = true;
|
||||
|
||||
// 恢复多指书写事件处理
|
||||
inkCanvas.StylusDown += MainWindow_StylusDown;
|
||||
inkCanvas.StylusMove += MainWindow_StylusMove;
|
||||
inkCanvas.StylusUp += MainWindow_StylusUp;
|
||||
inkCanvas.TouchDown += MainWindow_TouchDown;
|
||||
|
||||
lastIsInMultiTouchMode = false;
|
||||
}
|
||||
|
||||
@@ -1619,7 +1709,15 @@ namespace Ink_Canvas {
|
||||
|
||||
BtnPen_Click(null, null); //画完还原到笔模式
|
||||
if (lastIsInMultiTouchMode) {
|
||||
ToggleSwitchEnableMultiTouchMode.IsOn = true;
|
||||
// 不再重新启用开关,而是恢复多指书写相关的事件处理
|
||||
// ToggleSwitchEnableMultiTouchMode.IsOn = true;
|
||||
|
||||
// 恢复多指书写事件处理
|
||||
inkCanvas.StylusDown += MainWindow_StylusDown;
|
||||
inkCanvas.StylusMove += MainWindow_StylusMove;
|
||||
inkCanvas.StylusUp += MainWindow_StylusUp;
|
||||
inkCanvas.TouchDown += MainWindow_TouchDown;
|
||||
|
||||
lastIsInMultiTouchMode = false;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -91,6 +91,24 @@ namespace Ink_Canvas {
|
||||
ViewboxFloatingBar.IsHitTestVisible = false;
|
||||
BlackboardUIGridForInkReplay.IsHitTestVisible = false;
|
||||
|
||||
// 确保手写笔模式下显示光标
|
||||
if (Settings.Canvas.IsShowCursor) {
|
||||
inkCanvas.ForceCursor = true;
|
||||
inkCanvas.UseCustomCursor = true;
|
||||
|
||||
// 根据当前编辑模式设置不同的光标
|
||||
if (inkCanvas.EditingMode == InkCanvasEditingMode.EraseByPoint) {
|
||||
inkCanvas.Cursor = Cursors.Cross;
|
||||
} else if (inkCanvas.EditingMode == InkCanvasEditingMode.Ink) {
|
||||
var sri = Application.GetResourceStream(new Uri("Resources/Cursors/Pen.cur", UriKind.Relative));
|
||||
if (sri != null)
|
||||
inkCanvas.Cursor = new Cursor(sri.Stream);
|
||||
}
|
||||
|
||||
// 强制显示光标
|
||||
System.Windows.Forms.Cursor.Show();
|
||||
}
|
||||
|
||||
if (inkCanvas.EditingMode == InkCanvasEditingMode.EraseByPoint
|
||||
|| inkCanvas.EditingMode == InkCanvasEditingMode.EraseByStroke
|
||||
|| inkCanvas.EditingMode == InkCanvasEditingMode.Select) return;
|
||||
@@ -137,6 +155,13 @@ namespace Ink_Canvas {
|
||||
}
|
||||
catch { }
|
||||
|
||||
// 确保手写笔移动时光标保持可见
|
||||
if (Settings.Canvas.IsShowCursor) {
|
||||
inkCanvas.ForceCursor = true;
|
||||
inkCanvas.UseCustomCursor = true;
|
||||
System.Windows.Forms.Cursor.Show();
|
||||
}
|
||||
|
||||
var strokeVisual = GetStrokeVisual(e.StylusDevice.Id);
|
||||
var stylusPointCollection = e.GetStylusPoints(this);
|
||||
foreach (var stylusPoint in stylusPointCollection)
|
||||
@@ -224,8 +249,17 @@ namespace Ink_Canvas {
|
||||
break;
|
||||
}
|
||||
|
||||
inkCanvas.EraserShape = new EllipseStylusShape(boundsWidth * k * eraserMultiplier,
|
||||
boundsWidth * k * eraserMultiplier);
|
||||
// 根据EraserShapeType设置合适的橡皮擦形状
|
||||
if (Settings.Canvas.EraserShapeType == 0) {
|
||||
// 圆形擦
|
||||
inkCanvas.EraserShape = new EllipseStylusShape(boundsWidth * k * eraserMultiplier,
|
||||
boundsWidth * k * eraserMultiplier);
|
||||
} else if (Settings.Canvas.EraserShapeType == 1) {
|
||||
// 矩形黑板擦
|
||||
inkCanvas.EraserShape = new RectangleStylusShape(boundsWidth * k * eraserMultiplier * 0.6,
|
||||
boundsWidth * k * eraserMultiplier);
|
||||
}
|
||||
|
||||
inkCanvas.EditingMode = InkCanvasEditingMode.EraseByPoint;
|
||||
}
|
||||
else {
|
||||
@@ -245,7 +279,8 @@ namespace Ink_Canvas {
|
||||
isLastTouchEraser = false;
|
||||
// 修复面积擦时不显示橡皮形状:无论 forcePointEraser 状态,均显示 50x50 橡皮
|
||||
inkCanvas.EraserShape = new EllipseStylusShape(50, 50);
|
||||
if (forceEraser) return;
|
||||
// 修复触屏状态下几何绘制功能不可用的问题:在几何绘制模式下不应该因为forceEraser而直接返回
|
||||
if (forceEraser && drawingShapeMode == 0) return;
|
||||
inkCanvas.EditingMode = InkCanvasEditingMode.Ink;
|
||||
}
|
||||
}
|
||||
@@ -304,6 +339,16 @@ namespace Ink_Canvas {
|
||||
inkCanvas.EditingMode = lastInkCanvasEditingMode;
|
||||
dec.Remove(e.TouchDevice.Id);
|
||||
inkCanvas.Opacity = 1;
|
||||
|
||||
// 如果是手掌触发的面积擦抬起,需要确保橡皮擦形状被正确重置
|
||||
if (isLastTouchEraser && dec.Count == 0) {
|
||||
isLastTouchEraser = false;
|
||||
if (inkCanvas.EditingMode == InkCanvasEditingMode.EraseByPoint && forcePointEraser) {
|
||||
// 重新应用当前设置的橡皮擦形状
|
||||
ApplyCurrentEraserShape();
|
||||
}
|
||||
}
|
||||
|
||||
if (dec.Count == 0)
|
||||
if (lastTouchDownStrokeCollection.Count() != inkCanvas.Strokes.Count() &&
|
||||
!(drawingShapeMode == 9 && !isFirstTouchCuboid)) {
|
||||
|
||||
Binary file not shown.
@@ -1,4 +1,4 @@
|
||||
#pragma checksum "..\..\..\MainWindow.xaml" "{ff1816ec-aa5e-4d10-87f7-6f4963833460}" "A9A3B2D7B1A7EB897CCDEEA8991553AFAD256672"
|
||||
#pragma checksum "..\..\..\MainWindow.xaml" "{ff1816ec-aa5e-4d10-87f7-6f4963833460}" "C618DEE2BF2FDFC3FC9E2911171FB8CC42684DCF"
|
||||
//------------------------------------------------------------------------------
|
||||
// <auto-generated>
|
||||
// 此代码由工具生成。
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
#pragma checksum "..\..\..\MainWindow.xaml" "{ff1816ec-aa5e-4d10-87f7-6f4963833460}" "A9A3B2D7B1A7EB897CCDEEA8991553AFAD256672"
|
||||
#pragma checksum "..\..\..\MainWindow.xaml" "{ff1816ec-aa5e-4d10-87f7-6f4963833460}" "C618DEE2BF2FDFC3FC9E2911171FB8CC42684DCF"
|
||||
//------------------------------------------------------------------------------
|
||||
// <auto-generated>
|
||||
// 此代码由工具生成。
|
||||
|
||||
Reference in New Issue
Block a user