优化代码
This commit is contained in:
@@ -748,19 +748,30 @@ namespace Ink_Canvas
|
||||
InkCanvas.SetLeft(clonedImage, InkCanvas.GetLeft(image) + 20);
|
||||
InkCanvas.SetTop(clonedImage, InkCanvas.GetTop(image) + 20);
|
||||
|
||||
// 设置图片属性,避免被InkCanvas选择系统处理
|
||||
clonedImage.IsHitTestVisible = true;
|
||||
clonedImage.Focusable = false;
|
||||
|
||||
// 初始化变换
|
||||
InitializeElementTransform(clonedImage);
|
||||
|
||||
// 绑定事件
|
||||
BindElementEvents(clonedImage);
|
||||
|
||||
// 添加到画布
|
||||
inkCanvas.Children.Add(clonedImage);
|
||||
|
||||
// 提交到时间机器以支持撤销
|
||||
timeMachine.CommitElementInsertHistory(clonedImage);
|
||||
|
||||
return clonedImage;
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
// 记录错误但不中断程序
|
||||
System.Diagnostics.Debug.WriteLine($"克隆图片时发生错误: {ex.Message}");
|
||||
LogHelper.WriteLogToFile($"克隆图片时发生错误: {ex.Message}", LogHelper.LogType.Error);
|
||||
return null;
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
@@ -1064,23 +1075,32 @@ namespace Ink_Canvas
|
||||
{
|
||||
if (currentSelectedElement is Image originalImage)
|
||||
{
|
||||
// 创建克隆图片
|
||||
Image clonedImage = CloneImage(originalImage);
|
||||
// 创建新页面
|
||||
BtnWhiteBoardAdd_Click(null, null);
|
||||
|
||||
// 这里可以添加切换到新页面的逻辑
|
||||
// 暂时先添加到当前页面
|
||||
inkCanvas.Children.Add(clonedImage);
|
||||
// 创建克隆图片(不添加到当前画布,因为已经创建了新页面)
|
||||
Image clonedImage = CreateClonedImage(originalImage);
|
||||
|
||||
// 初始化变换
|
||||
InitializeElementTransform(clonedImage);
|
||||
|
||||
// 绑定事件
|
||||
BindElementEvents(clonedImage);
|
||||
|
||||
// 记录历史
|
||||
timeMachine.CommitElementInsertHistory(clonedImage);
|
||||
|
||||
LogHelper.WriteLogToFile($"图片克隆到新页面完成: {clonedImage.Name}");
|
||||
if (clonedImage != null)
|
||||
{
|
||||
// 设置图片属性,避免被InkCanvas选择系统处理
|
||||
clonedImage.IsHitTestVisible = true;
|
||||
clonedImage.Focusable = false;
|
||||
|
||||
// 初始化变换
|
||||
InitializeElementTransform(clonedImage);
|
||||
|
||||
// 绑定事件
|
||||
BindElementEvents(clonedImage);
|
||||
|
||||
// 添加到新页面的画布
|
||||
inkCanvas.Children.Add(clonedImage);
|
||||
|
||||
// 记录历史
|
||||
timeMachine.CommitElementInsertHistory(clonedImage);
|
||||
|
||||
LogHelper.WriteLogToFile($"图片克隆到新页面完成: {clonedImage.Name}");
|
||||
}
|
||||
}
|
||||
}
|
||||
catch (Exception ex)
|
||||
@@ -1185,7 +1205,7 @@ namespace Ink_Canvas
|
||||
}
|
||||
}
|
||||
|
||||
// 克隆图片的辅助方法
|
||||
// 克隆图片的辅助方法(只创建图片,不添加到画布)
|
||||
private Image CreateClonedImage(Image originalImage)
|
||||
{
|
||||
try
|
||||
@@ -1204,7 +1224,7 @@ namespace Ink_Canvas
|
||||
clonedImage.Stretch = originalImage.Stretch;
|
||||
clonedImage.StretchDirection = originalImage.StretchDirection;
|
||||
|
||||
// 复制位置
|
||||
// 复制位置(在新页面中居中显示)
|
||||
double left = InkCanvas.GetLeft(originalImage);
|
||||
double top = InkCanvas.GetTop(originalImage);
|
||||
InkCanvas.SetLeft(clonedImage, left + 20); // 稍微偏移位置
|
||||
|
||||
@@ -2077,9 +2077,9 @@ namespace Ink_Canvas
|
||||
{
|
||||
highlighterColor = 100; // 黑色荧光笔
|
||||
}
|
||||
else if (color == Colors.Yellow || IsColorSimilar(color, Color.FromRgb(234, 179, 8), 15) ||
|
||||
IsColorSimilar(color, Color.FromRgb(250, 204, 21), 15) ||
|
||||
IsColorSimilar(color, Color.FromRgb(253, 224, 71), 15))
|
||||
else if (color == Colors.Yellow || IsColorSimilar(color, Color.FromRgb(234, 179, 8)) ||
|
||||
IsColorSimilar(color, Color.FromRgb(250, 204, 21)) ||
|
||||
IsColorSimilar(color, Color.FromRgb(253, 224, 71)))
|
||||
{
|
||||
highlighterColor = 103; // 黄色荧光笔
|
||||
}
|
||||
@@ -2094,12 +2094,12 @@ namespace Ink_Canvas
|
||||
{
|
||||
highlighterColor = 106; // 蓝色荧光笔
|
||||
}
|
||||
else if (color == Colors.Red || IsColorSimilar(color, Color.FromRgb(220, 38, 38), 15) ||
|
||||
IsColorSimilar(color, Color.FromRgb(239, 68, 68), 15))
|
||||
else if (color == Colors.Red || IsColorSimilar(color, Color.FromRgb(220, 38, 38)) ||
|
||||
IsColorSimilar(color, Color.FromRgb(239, 68, 68)))
|
||||
{
|
||||
highlighterColor = 102; // 红色荧光笔
|
||||
}
|
||||
else if (color == Colors.Green || IsColorSimilar(color, Color.FromRgb(22, 163, 74), 15))
|
||||
else if (color == Colors.Green || IsColorSimilar(color, Color.FromRgb(22, 163, 74)))
|
||||
{
|
||||
highlighterColor = 104; // 绿色荧光笔
|
||||
}
|
||||
|
||||
@@ -162,13 +162,13 @@ namespace Ink_Canvas
|
||||
return;
|
||||
}
|
||||
|
||||
LogHelper.WriteLogToFile($"MainWindow_StylusDown 被调用,笔尾状态: {e.StylusDevice.Inverted}, 当前 drawingShapeMode: {drawingShapeMode}, 当前 EditingMode: {inkCanvas.EditingMode}", LogHelper.LogType.Info);
|
||||
LogHelper.WriteLogToFile($"MainWindow_StylusDown 被调用,笔尾状态: {e.StylusDevice.Inverted}, 当前 drawingShapeMode: {drawingShapeMode}, 当前 EditingMode: {inkCanvas.EditingMode}");
|
||||
|
||||
// 新增:根据是否为笔尾自动切换橡皮擦/画笔模式
|
||||
if (e.StylusDevice.Inverted)
|
||||
{
|
||||
inkCanvas.EditingMode = InkCanvasEditingMode.EraseByPoint;
|
||||
LogHelper.WriteLogToFile("检测到笔尾,设置 EditingMode 为 EraseByPoint", LogHelper.LogType.Info);
|
||||
LogHelper.WriteLogToFile("检测到笔尾,设置 EditingMode 为 EraseByPoint");
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -177,18 +177,18 @@ namespace Ink_Canvas
|
||||
{
|
||||
// 确保几何绘制模式下不切换到Ink模式,避免触摸轨迹被收集
|
||||
inkCanvas.EditingMode = InkCanvasEditingMode.None;
|
||||
LogHelper.WriteLogToFile("几何绘制模式,设置 EditingMode 为 None", LogHelper.LogType.Info);
|
||||
LogHelper.WriteLogToFile("几何绘制模式,设置 EditingMode 为 None");
|
||||
return;
|
||||
}
|
||||
// 修复:保持当前的线擦模式,不要强制切换到Ink模式
|
||||
if (inkCanvas.EditingMode != InkCanvasEditingMode.EraseByStroke)
|
||||
{
|
||||
inkCanvas.EditingMode = InkCanvasEditingMode.Ink;
|
||||
LogHelper.WriteLogToFile("设置 EditingMode 为 Ink", LogHelper.LogType.Info);
|
||||
LogHelper.WriteLogToFile("设置 EditingMode 为 Ink");
|
||||
}
|
||||
else
|
||||
{
|
||||
LogHelper.WriteLogToFile("保持当前线擦模式", LogHelper.LogType.Info);
|
||||
LogHelper.WriteLogToFile("保持当前线擦模式");
|
||||
}
|
||||
}
|
||||
SetCursorBasedOnEditingMode(inkCanvas);
|
||||
@@ -230,14 +230,14 @@ namespace Ink_Canvas
|
||||
{
|
||||
try
|
||||
{
|
||||
LogHelper.WriteLogToFile($"MainWindow_StylusUp 被调用,EditingMode: {inkCanvas.EditingMode}, EnableInkFade: {Settings.Canvas.EnableInkFade}", LogHelper.LogType.Info);
|
||||
LogHelper.WriteLogToFile($"MainWindow_StylusUp 被调用,EditingMode: {inkCanvas.EditingMode}, EnableInkFade: {Settings.Canvas.EnableInkFade}");
|
||||
|
||||
var stroke = GetStrokeVisual(e.StylusDevice.Id).Stroke;
|
||||
LogHelper.WriteLogToFile($"获取到墨迹,StylusPoints数量: {stroke.StylusPoints.Count}", LogHelper.LogType.Info);
|
||||
LogHelper.WriteLogToFile($"获取到墨迹,StylusPoints数量: {stroke.StylusPoints.Count}");
|
||||
|
||||
// 正常模式:添加到画布并参与墨迹纠正
|
||||
// 墨迹渐隐功能现在在 StrokeCollected 事件中统一处理所有输入方式
|
||||
LogHelper.WriteLogToFile("StylusUp: 添加墨迹到画布", LogHelper.LogType.Info);
|
||||
LogHelper.WriteLogToFile("StylusUp: 添加墨迹到画布");
|
||||
|
||||
inkCanvas.Strokes.Add(stroke);
|
||||
await Task.Delay(5); // 避免渲染墨迹完成前预览墨迹被删除导致墨迹闪烁
|
||||
@@ -528,7 +528,7 @@ namespace Ink_Canvas
|
||||
StartPalmEraserRecoveryTimer();
|
||||
|
||||
// 记录日志
|
||||
LogHelper.WriteLogToFile($"Palm eraser activated - Sensitivity: {Settings.Canvas.PalmEraserSensitivity}, Touch bounds: {bounds.Width}x{bounds.Height}, Aspect ratio: {aspectRatio:F2}, Touch points: {dec.Count}", LogHelper.LogType.Info);
|
||||
LogHelper.WriteLogToFile($"Palm eraser activated - Sensitivity: {Settings.Canvas.PalmEraserSensitivity}, Touch bounds: {bounds.Width}x{bounds.Height}, Aspect ratio: {aspectRatio:F2}, Touch points: {dec.Count}");
|
||||
}
|
||||
}
|
||||
|
||||
@@ -623,7 +623,7 @@ namespace Ink_Canvas
|
||||
break;
|
||||
}
|
||||
|
||||
LogHelper.WriteLogToFile($"Palm eraser recovered to mode: {palmEraserLastEditingMode}", LogHelper.LogType.Info);
|
||||
LogHelper.WriteLogToFile($"Palm eraser recovered to mode: {palmEraserLastEditingMode}");
|
||||
}
|
||||
}
|
||||
catch (Exception ex)
|
||||
@@ -648,7 +648,7 @@ namespace Ink_Canvas
|
||||
ViewboxFloatingBar.IsHitTestVisible = true;
|
||||
BlackboardUIGridForInkReplay.IsHitTestVisible = true;
|
||||
|
||||
LogHelper.WriteLogToFile("Palm eraser state reset completed", LogHelper.LogType.Info);
|
||||
LogHelper.WriteLogToFile("Palm eraser state reset completed");
|
||||
}
|
||||
|
||||
// 新增:超时检测 - 如果手掌擦激活时间过长,强制重置状态
|
||||
@@ -697,7 +697,7 @@ namespace Ink_Canvas
|
||||
// 停止恢复定时器
|
||||
StopPalmEraserRecoveryTimer();
|
||||
|
||||
LogHelper.WriteLogToFile("Palm eraser timeout recovery completed", LogHelper.LogType.Info);
|
||||
LogHelper.WriteLogToFile("Palm eraser timeout recovery completed");
|
||||
}
|
||||
}
|
||||
// 修复:几何绘制模式下,触摸抬手时应该正确处理,而不是简单模拟鼠标事件
|
||||
@@ -1033,7 +1033,7 @@ namespace Ink_Canvas
|
||||
break;
|
||||
}
|
||||
|
||||
LogHelper.WriteLogToFile($"Palm eraser timer recovery to mode: {palmEraserLastEditingMode}", LogHelper.LogType.Info);
|
||||
LogHelper.WriteLogToFile($"Palm eraser timer recovery to mode: {palmEraserLastEditingMode}");
|
||||
}
|
||||
}
|
||||
catch (Exception ex)
|
||||
@@ -1055,7 +1055,7 @@ namespace Ink_Canvas
|
||||
// 停止定时器
|
||||
StopPalmEraserRecoveryTimer();
|
||||
|
||||
LogHelper.WriteLogToFile("Palm eraser timer recovery completed", LogHelper.LogType.Info);
|
||||
LogHelper.WriteLogToFile("Palm eraser timer recovery completed");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user