This commit is contained in:
2025-08-23 23:13:39 +08:00
parent 710a9014dd
commit 5665fcc823
8 changed files with 1019 additions and 93 deletions
+90 -18
View File
@@ -2405,74 +2405,146 @@ namespace Ink_Canvas
#region
private void ToggleSwitchShowShapeButton_Toggled(object sender, RoutedEventArgs e)
private void CheckBoxShowShapeButton_Checked(object sender, RoutedEventArgs e)
{
if (!isLoaded) return;
Settings.Appearance.IsShowShapeButton = ToggleSwitchShowShapeButton.IsOn;
Settings.Appearance.IsShowShapeButton = CheckBoxShowShapeButton.IsChecked ?? false;
UpdateFloatingBarButtonsVisibility();
SaveSettingsToFile();
}
private void ToggleSwitchShowUndoButton_Toggled(object sender, RoutedEventArgs e)
private void CheckBoxShowShapeButton_Unchecked(object sender, RoutedEventArgs e)
{
if (!isLoaded) return;
Settings.Appearance.IsShowUndoButton = ToggleSwitchShowUndoButton.IsOn;
Settings.Appearance.IsShowShapeButton = CheckBoxShowShapeButton.IsChecked ?? false;
UpdateFloatingBarButtonsVisibility();
SaveSettingsToFile();
}
private void ToggleSwitchShowRedoButton_Toggled(object sender, RoutedEventArgs e)
private void CheckBoxShowUndoButton_Checked(object sender, RoutedEventArgs e)
{
if (!isLoaded) return;
Settings.Appearance.IsShowRedoButton = ToggleSwitchShowRedoButton.IsOn;
Settings.Appearance.IsShowUndoButton = CheckBoxShowUndoButton.IsChecked ?? false;
UpdateFloatingBarButtonsVisibility();
SaveSettingsToFile();
}
private void ToggleSwitchShowClearButton_Toggled(object sender, RoutedEventArgs e)
private void CheckBoxShowUndoButton_Unchecked(object sender, RoutedEventArgs e)
{
if (!isLoaded) return;
Settings.Appearance.IsShowClearButton = ToggleSwitchShowClearButton.IsOn;
Settings.Appearance.IsShowUndoButton = CheckBoxShowUndoButton.IsChecked ?? false;
UpdateFloatingBarButtonsVisibility();
SaveSettingsToFile();
}
private void ToggleSwitchShowWhiteboardButton_Toggled(object sender, RoutedEventArgs e)
private void CheckBoxShowRedoButton_Checked(object sender, RoutedEventArgs e)
{
if (!isLoaded) return;
Settings.Appearance.IsShowWhiteboardButton = ToggleSwitchShowWhiteboardButton.IsOn;
Settings.Appearance.IsShowRedoButton = CheckBoxShowRedoButton.IsChecked ?? false;
UpdateFloatingBarButtonsVisibility();
SaveSettingsToFile();
}
private void CheckBoxShowRedoButton_Unchecked(object sender, RoutedEventArgs e)
{
if (!isLoaded) return;
Settings.Appearance.IsShowRedoButton = CheckBoxShowRedoButton.IsChecked ?? false;
UpdateFloatingBarButtonsVisibility();
SaveSettingsToFile();
}
private void CheckBoxShowClearButton_Checked(object sender, RoutedEventArgs e)
{
if (!isLoaded) return;
Settings.Appearance.IsShowClearButton = CheckBoxShowClearButton.IsChecked ?? false;
UpdateFloatingBarButtonsVisibility();
SaveSettingsToFile();
}
private void CheckBoxShowClearButton_Unchecked(object sender, RoutedEventArgs e)
{
if (!isLoaded) return;
Settings.Appearance.IsShowClearButton = CheckBoxShowClearButton.IsChecked ?? false;
UpdateFloatingBarButtonsVisibility();
SaveSettingsToFile();
}
private void CheckBoxShowWhiteboardButton_Checked(object sender, RoutedEventArgs e)
{
if (!isLoaded) return;
Settings.Appearance.IsShowWhiteboardButton = CheckBoxShowWhiteboardButton.IsChecked ?? false;
UpdateFloatingBarButtonsVisibility();
SaveSettingsToFile();
}
private void CheckBoxShowWhiteboardButton_Unchecked(object sender, RoutedEventArgs e)
{
if (!isLoaded) return;
Settings.Appearance.IsShowWhiteboardButton = CheckBoxShowWhiteboardButton.IsChecked ?? false;
UpdateFloatingBarButtonsVisibility();
SaveSettingsToFile();
}
private void ToggleSwitchShowLassoSelectButton_Toggled(object sender, RoutedEventArgs e)
private void CheckBoxShowLassoSelectButton_Checked(object sender, RoutedEventArgs e)
{
if (!isLoaded) return;
Settings.Appearance.IsShowLassoSelectButton = ToggleSwitchShowLassoSelectButton.IsOn;
Settings.Appearance.IsShowLassoSelectButton = CheckBoxShowLassoSelectButton.IsChecked ?? false;
UpdateFloatingBarButtonsVisibility();
SaveSettingsToFile();
}
private void ToggleSwitchShowClearAndMouseButton_Toggled(object sender, RoutedEventArgs e)
private void CheckBoxShowLassoSelectButton_Unchecked(object sender, RoutedEventArgs e)
{
if (!isLoaded) return;
Settings.Appearance.IsShowClearAndMouseButton = ToggleSwitchShowClearAndMouseButton.IsOn;
Settings.Appearance.IsShowLassoSelectButton = CheckBoxShowLassoSelectButton.IsChecked ?? false;
UpdateFloatingBarButtonsVisibility();
SaveSettingsToFile();
}
private void ToggleSwitchShowHideButton_Toggled(object sender, RoutedEventArgs e)
private void CheckBoxShowClearAndMouseButton_Checked(object sender, RoutedEventArgs e)
{
if (!isLoaded) return;
Settings.Appearance.IsShowHideButton = ToggleSwitchShowHideButton.IsOn;
Settings.Appearance.IsShowClearAndMouseButton = CheckBoxShowClearAndMouseButton.IsChecked ?? false;
UpdateFloatingBarButtonsVisibility();
SaveSettingsToFile();
}
private void ToggleSwitchShowQuickColorPalette_Toggled(object sender, RoutedEventArgs e)
private void CheckBoxShowClearAndMouseButton_Unchecked(object sender, RoutedEventArgs e)
{
if (!isLoaded) return;
Settings.Appearance.IsShowQuickColorPalette = ToggleSwitchShowQuickColorPalette.IsOn;
Settings.Appearance.IsShowClearAndMouseButton = CheckBoxShowClearAndMouseButton.IsChecked ?? false;
UpdateFloatingBarButtonsVisibility();
SaveSettingsToFile();
}
private void CheckBoxShowHideButton_Checked(object sender, RoutedEventArgs e)
{
if (!isLoaded) return;
Settings.Appearance.IsShowHideButton = CheckBoxShowHideButton.IsChecked ?? false;
UpdateFloatingBarButtonsVisibility();
SaveSettingsToFile();
}
private void CheckBoxShowHideButton_Unchecked(object sender, RoutedEventArgs e)
{
if (!isLoaded) return;
Settings.Appearance.IsShowHideButton = CheckBoxShowHideButton.IsChecked ?? false;
UpdateFloatingBarButtonsVisibility();
SaveSettingsToFile();
}
private void CheckBoxShowQuickColorPalette_Checked(object sender, RoutedEventArgs e)
{
if (!isLoaded) return;
Settings.Appearance.IsShowQuickColorPalette = CheckBoxShowQuickColorPalette.IsChecked ?? false;
UpdateFloatingBarButtonsVisibility();
SaveSettingsToFile();
}
private void CheckBoxShowQuickColorPalette_Unchecked(object sender, RoutedEventArgs e)
{
if (!isLoaded) return;
Settings.Appearance.IsShowQuickColorPalette = CheckBoxShowQuickColorPalette.IsChecked ?? false;
UpdateFloatingBarButtonsVisibility();
SaveSettingsToFile();
}
+54 -9
View File
@@ -307,15 +307,15 @@ namespace Ink_Canvas
Settings.Appearance.EnableChickenSoupInWhiteboardMode;
// 浮动栏按钮显示控制开关初始化
ToggleSwitchShowShapeButton.IsOn = Settings.Appearance.IsShowShapeButton;
ToggleSwitchShowUndoButton.IsOn = Settings.Appearance.IsShowUndoButton;
ToggleSwitchShowRedoButton.IsOn = Settings.Appearance.IsShowRedoButton;
ToggleSwitchShowClearButton.IsOn = Settings.Appearance.IsShowClearButton;
ToggleSwitchShowWhiteboardButton.IsOn = Settings.Appearance.IsShowWhiteboardButton;
ToggleSwitchShowHideButton.IsOn = Settings.Appearance.IsShowHideButton;
ToggleSwitchShowQuickColorPalette.IsOn = Settings.Appearance.IsShowQuickColorPalette;
ToggleSwitchShowLassoSelectButton.IsOn = Settings.Appearance.IsShowLassoSelectButton;
ToggleSwitchShowClearAndMouseButton.IsOn = Settings.Appearance.IsShowClearAndMouseButton;
CheckBoxShowShapeButton.IsChecked = Settings.Appearance.IsShowShapeButton;
CheckBoxShowUndoButton.IsChecked = Settings.Appearance.IsShowUndoButton;
CheckBoxShowRedoButton.IsChecked = Settings.Appearance.IsShowRedoButton;
CheckBoxShowClearButton.IsChecked = Settings.Appearance.IsShowClearButton;
CheckBoxShowWhiteboardButton.IsChecked = Settings.Appearance.IsShowWhiteboardButton;
CheckBoxShowHideButton.IsChecked = Settings.Appearance.IsShowHideButton;
CheckBoxShowQuickColorPalette.IsChecked = Settings.Appearance.IsShowQuickColorPalette;
CheckBoxShowLassoSelectButton.IsChecked = Settings.Appearance.IsShowLassoSelectButton;
CheckBoxShowClearAndMouseButton.IsChecked = Settings.Appearance.IsShowClearAndMouseButton;
ComboBoxEraserDisplayOption.SelectedIndex = Settings.Appearance.EraserDisplayOption;
ComboBoxQuickColorPaletteDisplayMode.SelectedIndex = Settings.Appearance.QuickColorPaletteDisplayMode;
@@ -883,6 +883,51 @@ namespace Ink_Canvas
{
ViewboxFloatingBarMarginAnimation(100, true);
}
// 加载墨迹渐隐设置
LoadInkFadeSettings();
}
/// <summary>
/// 加载墨迹渐隐设置
/// </summary>
private void LoadInkFadeSettings()
{
try
{
// 同步设置面板中的开关状态
if (ToggleSwitchEnableInkFade != null)
{
ToggleSwitchEnableInkFade.IsOn = Settings.Canvas.EnableInkFade;
}
// 同步批注子面板中的开关状态
if (ToggleSwitchInkFadeInPanel != null)
{
ToggleSwitchInkFadeInPanel.IsOn = Settings.Canvas.EnableInkFade;
}
// 同步滑块值
if (InkFadeTimeSlider != null)
{
InkFadeTimeSlider.Value = Settings.Canvas.InkFadeTime;
}
// 同步墨迹渐隐管理器的状态
if (_inkFadeManager != null)
{
_inkFadeManager.IsEnabled = Settings.Canvas.EnableInkFade;
_inkFadeManager.UpdateFadeTime(Settings.Canvas.InkFadeTime);
}
LogHelper.WriteLogToFile("墨迹渐隐设置已加载", LogHelper.LogType.Event);
}
catch (Exception ex)
{
LogHelper.WriteLogToFile($"加载墨迹渐隐设置时出错: {ex.Message}", LogHelper.LogType.Error);
}
}
}
}
@@ -56,6 +56,36 @@ namespace Ink_Canvas
private void inkCanvas_StrokeCollected(object sender, InkCanvasStrokeCollectedEventArgs e)
{
// 检查是否启用墨迹渐隐功能
if (Settings.Canvas.EnableInkFade)
{
LogHelper.WriteLogToFile("StrokeCollected: 进入墨迹渐隐模式", LogHelper.LogType.Info);
// 获取墨迹的起点和终点
var startPoint = e.Stroke.StylusPoints.Count > 0 ? e.Stroke.StylusPoints[0].ToPoint() : new Point();
var endPoint = e.Stroke.StylusPoints.Count > 0 ? e.Stroke.StylusPoints[e.Stroke.StylusPoints.Count - 1].ToPoint() : new Point();
// 从InkCanvas中移除墨迹,因为我们要用渐隐管理器来管理它
if (inkCanvas.Strokes.Contains(e.Stroke))
{
inkCanvas.Strokes.Remove(e.Stroke);
}
// 添加到墨迹渐隐管理器
if (_inkFadeManager != null)
{
_inkFadeManager.AddFadingStroke(e.Stroke, startPoint, endPoint);
LogHelper.WriteLogToFile($"StrokeCollected: 墨迹已添加到渐隐管理器,起点:{startPoint},终点:{endPoint}", LogHelper.LogType.Info);
}
else
{
LogHelper.WriteLogToFile("StrokeCollected: 墨迹渐隐管理器为空,无法添加墨迹", LogHelper.LogType.Error);
}
// 墨迹渐隐模式下不参与墨迹纠正和其他处理,直接返回
return;
}
// 标记是否进行了直线拉直
bool wasStraightened = false;
+21 -2
View File
@@ -139,10 +139,13 @@ namespace Ink_Canvas
private void MainWindow_StylusDown(object sender, StylusDownEventArgs e)
{
LogHelper.WriteLogToFile($"MainWindow_StylusDown 被调用,笔尾状态: {e.StylusDevice.Inverted}, 当前 drawingShapeMode: {drawingShapeMode}, 当前 EditingMode: {inkCanvas.EditingMode}", LogHelper.LogType.Info);
// 新增:根据是否为笔尾自动切换橡皮擦/画笔模式
if (e.StylusDevice.Inverted)
{
inkCanvas.EditingMode = InkCanvasEditingMode.EraseByPoint;
LogHelper.WriteLogToFile("检测到笔尾,设置 EditingMode 为 EraseByPoint", LogHelper.LogType.Info);
}
else
{
@@ -151,12 +154,18 @@ namespace Ink_Canvas
{
// 确保几何绘制模式下不切换到Ink模式,避免触摸轨迹被收集
inkCanvas.EditingMode = InkCanvasEditingMode.None;
LogHelper.WriteLogToFile("几何绘制模式,设置 EditingMode 为 None", LogHelper.LogType.Info);
return;
}
// 修复:保持当前的线擦模式,不要强制切换到Ink模式
if (inkCanvas.EditingMode != InkCanvasEditingMode.EraseByStroke)
{
inkCanvas.EditingMode = InkCanvasEditingMode.Ink;
LogHelper.WriteLogToFile("设置 EditingMode 为 Ink", LogHelper.LogType.Info);
}
else
{
LogHelper.WriteLogToFile("保持当前线擦模式", LogHelper.LogType.Info);
}
}
SetCursorBasedOnEditingMode(inkCanvas);
@@ -198,15 +207,25 @@ namespace Ink_Canvas
{
try
{
inkCanvas.Strokes.Add(GetStrokeVisual(e.StylusDevice.Id).Stroke);
LogHelper.WriteLogToFile($"MainWindow_StylusUp 被调用,EditingMode: {inkCanvas.EditingMode}, EnableInkFade: {Settings.Canvas.EnableInkFade}", LogHelper.LogType.Info);
var stroke = GetStrokeVisual(e.StylusDevice.Id).Stroke;
LogHelper.WriteLogToFile($"获取到墨迹,StylusPoints数量: {stroke.StylusPoints.Count}", LogHelper.LogType.Info);
// 正常模式:添加到画布并参与墨迹纠正
// 墨迹渐隐功能现在在 StrokeCollected 事件中统一处理所有输入方式
LogHelper.WriteLogToFile("StylusUp: 添加墨迹到画布", LogHelper.LogType.Info);
inkCanvas.Strokes.Add(stroke);
await Task.Delay(5); // 避免渲染墨迹完成前预览墨迹被删除导致墨迹闪烁
inkCanvas.Children.Remove(GetVisualCanvas(e.StylusDevice.Id));
inkCanvas_StrokeCollected(inkCanvas,
new InkCanvasStrokeCollectedEventArgs(GetStrokeVisual(e.StylusDevice.Id).Stroke));
new InkCanvasStrokeCollectedEventArgs(stroke));
}
catch (Exception ex)
{
LogHelper.WriteLogToFile($"MainWindow_StylusUp 出错: {ex}", LogHelper.LogType.Error);
Label.Content = ex.ToString();
}