From 0478949305818c0ec007879376d75acac9d51552 Mon Sep 17 00:00:00 2001
From: CJKmkp <2564608840@qq.com>
Date: Tue, 12 Aug 2025 12:19:55 +0800
Subject: [PATCH] =?UTF-8?q?improve:=E5=BF=AB=E6=8D=B7=E8=B0=83=E8=89=B2?=
=?UTF-8?q?=E7=9B=98?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
Ink Canvas/MainWindow.xaml | 257 +++++++++++++++++-
Ink Canvas/MainWindow.xaml.cs | 12 +-
.../MainWindow_cs/MW_FloatingBarIcons.cs | 132 ++++++---
Ink Canvas/MainWindow_cs/MW_Settings.cs | 44 ++-
Ink Canvas/MainWindow_cs/MW_SettingsToLoad.cs | 1 +
Ink Canvas/Resources/Settings.cs | 3 +
6 files changed, 403 insertions(+), 46 deletions(-)
diff --git a/Ink Canvas/MainWindow.xaml b/Ink Canvas/MainWindow.xaml
index ee4e12e4..86f6a8c3 100644
--- a/Ink Canvas/MainWindow.xaml
+++ b/Ink Canvas/MainWindow.xaml
@@ -1251,6 +1251,17 @@
Toggled="ToggleSwitchShowQuickColorPalette_Toggled" />
+
+
+
+
+
+
+
+
@@ -6264,7 +6275,7 @@
Margin="0,1,0,0" TextAlignment="Center" />
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
/// 用於浮動工具欄的"手勢"按鈕和白板工具欄的"手勢"按鈕的點擊事件
@@ -814,28 +814,34 @@ namespace Ink_Canvas
switch (border.Name)
{
case "QuickColorWhite":
+ case "QuickColorWhiteSingle":
border.Background = new SolidColorBrush(Colors.White);
break;
case "QuickColorOrange":
+ case "QuickColorOrangeSingle":
border.Background = new SolidColorBrush(Color.FromRgb(255, 165, 0));
break;
case "QuickColorYellow":
+ case "QuickColorYellowSingle":
border.Background = new SolidColorBrush(Colors.Yellow);
break;
case "QuickColorBlack":
+ case "QuickColorBlackSingle":
border.Background = new SolidColorBrush(Colors.Black);
break;
case "QuickColorBlue":
- border.Background = new SolidColorBrush(Color.FromRgb(0, 102, 255));
+ border.Background = new SolidColorBrush(Color.FromRgb(37, 99, 235));
break;
case "QuickColorRed":
+ case "QuickColorRedSingle":
border.Background = new SolidColorBrush(Colors.Red);
break;
case "QuickColorGreen":
- border.Background = new SolidColorBrush(Colors.Green);
+ case "QuickColorGreenSingle":
+ border.Background = new SolidColorBrush(Color.FromRgb(22, 163, 74));
break;
case "QuickColorPurple":
- border.Background = new SolidColorBrush(Color.FromRgb(128, 0, 128));
+ border.Background = new SolidColorBrush(Color.FromRgb(147, 51, 234));
break;
}
}
@@ -1273,10 +1279,20 @@ namespace Ink_Canvas
double floatingBarWidth = ViewboxFloatingBar.ActualWidth * ViewboxFloatingBarScaleTransform.ScaleX;
// 如果快捷调色盘显示,确保有足够空间
- if (QuickColorPalettePanel != null && QuickColorPalettePanel.Visibility == Visibility.Visible)
+ if ((QuickColorPalettePanel != null && QuickColorPalettePanel.Visibility == Visibility.Visible) ||
+ (QuickColorPaletteSingleRowPanel != null && QuickColorPaletteSingleRowPanel.Visibility == Visibility.Visible))
{
- // 确保浮动栏有足够宽度容纳快捷调色盘
- floatingBarWidth = Math.Max(floatingBarWidth, 820 * ViewboxFloatingBarScaleTransform.ScaleX);
+ // 根据显示模式调整宽度
+ if (Settings.Appearance.QuickColorPaletteDisplayMode == 0)
+ {
+ // 单行显示模式,自适应宽度,但需要足够空间显示6个颜色
+ floatingBarWidth = Math.Max(floatingBarWidth, 120 * ViewboxFloatingBarScaleTransform.ScaleX);
+ }
+ else
+ {
+ // 双行显示模式,宽度较大
+ floatingBarWidth = Math.Max(floatingBarWidth, 820 * ViewboxFloatingBarScaleTransform.ScaleX);
+ }
}
pos.X = (screenWidth - floatingBarWidth) / 2;
@@ -1378,10 +1394,20 @@ namespace Ink_Canvas
double floatingBarWidth = ViewboxFloatingBar.ActualWidth * ViewboxFloatingBarScaleTransform.ScaleX;
// 如果快捷调色盘显示,确保有足够空间
- if (QuickColorPalettePanel != null && QuickColorPalettePanel.Visibility == Visibility.Visible)
+ if ((QuickColorPalettePanel != null && QuickColorPalettePanel.Visibility == Visibility.Visible) ||
+ (QuickColorPaletteSingleRowPanel != null && QuickColorPaletteSingleRowPanel.Visibility == Visibility.Visible))
{
- // 确保浮动栏有足够宽度容纳快捷调色盘
- floatingBarWidth = Math.Max(floatingBarWidth, 850 * ViewboxFloatingBarScaleTransform.ScaleX);
+ // 根据显示模式调整宽度
+ if (Settings.Appearance.QuickColorPaletteDisplayMode == 0)
+ {
+ // 单行显示模式,自适应宽度,但需要足够空间显示6个颜色
+ floatingBarWidth = Math.Max(floatingBarWidth, 120 * ViewboxFloatingBarScaleTransform.ScaleX);
+ }
+ else
+ {
+ // 双行显示模式,宽度较大
+ floatingBarWidth = Math.Max(floatingBarWidth, 850 * ViewboxFloatingBarScaleTransform.ScaleX);
+ }
}
pos.X = (screenWidth - floatingBarWidth) / 2;
@@ -1444,10 +1470,20 @@ namespace Ink_Canvas
double floatingBarWidth = ViewboxFloatingBar.ActualWidth * ViewboxFloatingBarScaleTransform.ScaleX;
// 如果快捷调色盘显示,确保有足够空间
- if (QuickColorPalettePanel != null && QuickColorPalettePanel.Visibility == Visibility.Visible)
+ if ((QuickColorPalettePanel != null && QuickColorPalettePanel.Visibility == Visibility.Visible) ||
+ (QuickColorPaletteSingleRowPanel != null && QuickColorPaletteSingleRowPanel.Visibility == Visibility.Visible))
{
- // 确保浮动栏有足够宽度容纳快捷调色盘
- floatingBarWidth = Math.Max(floatingBarWidth, 820 * ViewboxFloatingBarScaleTransform.ScaleX);
+ // 根据显示模式调整宽度
+ if (Settings.Appearance.QuickColorPaletteDisplayMode == 0)
+ {
+ // 单行显示模式,自适应宽度,但需要足够空间显示6个颜色
+ floatingBarWidth = Math.Max(floatingBarWidth, 120 * ViewboxFloatingBarScaleTransform.ScaleX);
+ }
+ else
+ {
+ // 双行显示模式,宽度较大
+ floatingBarWidth = Math.Max(floatingBarWidth, 820 * ViewboxFloatingBarScaleTransform.ScaleX);
+ }
}
pos.X = (screenWidth - floatingBarWidth) / 2;
@@ -1546,8 +1582,6 @@ namespace Ink_Canvas
if (currentMode != 0)
{
SaveStrokes();
- // 总是恢复备份墨迹,不管是否在PPT模式
- // PPT墨迹和白板墨迹应该分别管理,不应该互相影响
RestoreStrokes(true);
LogHelper.WriteLogToFile($"退出白板模式,恢复备份墨迹。当前模式:{(BtnPPTSlideShowEnd.Visibility == Visibility.Visible ? "PPT放映" : "桌面")}", LogHelper.LogType.Trace);
}
@@ -1569,6 +1603,10 @@ namespace Ink_Canvas
{
QuickColorPalettePanel.Visibility = Visibility.Collapsed;
}
+ if (QuickColorPaletteSingleRowPanel != null)
+ {
+ QuickColorPaletteSingleRowPanel.Visibility = Visibility.Collapsed;
+ }
if (!isFloatingBarFolded)
{
@@ -1647,9 +1685,21 @@ namespace Ink_Canvas
inkCanvas.EditingMode = InkCanvasEditingMode.Ink;
// 在批注模式下显示快捷调色盘(如果设置中启用了)
- if (Settings.Appearance.IsShowQuickColorPalette && QuickColorPalettePanel != null)
+ if (Settings.Appearance.IsShowQuickColorPalette && QuickColorPalettePanel != null && QuickColorPaletteSingleRowPanel != null)
{
- QuickColorPalettePanel.Visibility = Visibility.Visible;
+ // 根据显示模式选择显示哪个面板
+ if (Settings.Appearance.QuickColorPaletteDisplayMode == 0)
+ {
+ // 单行显示模式
+ QuickColorPalettePanel.Visibility = Visibility.Collapsed;
+ QuickColorPaletteSingleRowPanel.Visibility = Visibility.Visible;
+ }
+ else
+ {
+ // 双行显示模式
+ QuickColorPalettePanel.Visibility = Visibility.Visible;
+ QuickColorPaletteSingleRowPanel.Visibility = Visibility.Collapsed;
+ }
}
// 修复:从线擦切换到批注时,重置为默认笔模式(非高光显示)
@@ -1892,7 +1942,7 @@ namespace Ink_Canvas
private void QuickColorBlue_Click(object sender, RoutedEventArgs e)
{
- SetQuickColor(Color.FromRgb(0, 102, 255)); // 蓝色
+ SetQuickColor(Color.FromRgb(37, 99, 235)); // 蓝色
}
private void QuickColorRed_Click(object sender, RoutedEventArgs e)
@@ -1900,14 +1950,14 @@ namespace Ink_Canvas
SetQuickColor(Colors.Red);
}
- private void QuickColorGreen_Click(object sender, RoutedEventArgs e)
+ private void QuickColorGreen_Click(object sender, RoutedEventArgs e)
{
- SetQuickColor(Colors.Green);
+ SetQuickColor(Color.FromRgb(22, 163, 74));
}
private void QuickColorPurple_Click(object sender, RoutedEventArgs e)
{
- SetQuickColor(Color.FromRgb(128, 0, 128));
+ SetQuickColor(Color.FromRgb(147, 51, 234));
}
private void SetQuickColor(Color color)
@@ -1930,10 +1980,10 @@ namespace Ink_Canvas
else if (color == Color.FromRgb(255, 165, 0)) lastDesktopInkColor = 8; // 橙色
else if (color == Colors.Yellow) lastDesktopInkColor = 4;
else if (color == Colors.Black) lastDesktopInkColor = 0;
- else if (color == Color.FromRgb(0, 102, 255)) lastDesktopInkColor = 3; // 蓝色
+ else if (color == Color.FromRgb(37, 99, 235)) lastDesktopInkColor = 3; // 蓝色
else if (color == Colors.Red) lastDesktopInkColor = 1;
- else if (color == Colors.Green) lastDesktopInkColor = 2; // 绿色
- else if (color == Color.FromRgb(128, 0, 128)) lastDesktopInkColor = 6; // 紫色
+ else if (color == Colors.Green || color == Color.FromRgb(22, 163, 74)) lastDesktopInkColor = 2;
+ else if (color == Color.FromRgb(147, 51, 234)) lastDesktopInkColor = 6; // 紫色
}
else
{
@@ -1942,10 +1992,10 @@ namespace Ink_Canvas
else if (color == Color.FromRgb(255, 165, 0)) lastBoardInkColor = 8; // 橙色
else if (color == Colors.Yellow) lastBoardInkColor = 4;
else if (color == Colors.Black) lastBoardInkColor = 0;
- else if (color == Color.FromRgb(0, 102, 255)) lastBoardInkColor = 3; // 蓝色
+ else if (color == Color.FromRgb(37, 99, 235)) lastBoardInkColor = 3; // 蓝色
else if (color == Colors.Red) lastBoardInkColor = 1;
- else if (color == Colors.Green) lastBoardInkColor = 2; // 绿色
- else if (color == Color.FromRgb(128, 0, 128)) lastBoardInkColor = 6; // 紫色
+ else if (color == Colors.Green || color == Color.FromRgb(22, 163, 74)) lastBoardInkColor = 2;
+ else if (color == Color.FromRgb(147, 51, 234)) lastBoardInkColor = 6; // 紫色
}
// 更新快捷调色盘选择指示器
@@ -1957,7 +2007,7 @@ namespace Ink_Canvas
private void UpdateQuickColorPaletteIndicator(Color selectedColor)
{
- // 隐藏所有check图标
+ // 隐藏所有check图标(双行显示)
QuickColorWhiteCheck.Visibility = Visibility.Collapsed;
QuickColorOrangeCheck.Visibility = Visibility.Collapsed;
QuickColorYellowCheck.Visibility = Visibility.Collapsed;
@@ -1966,16 +2016,25 @@ namespace Ink_Canvas
QuickColorRedCheck.Visibility = Visibility.Collapsed;
QuickColorGreenCheck.Visibility = Visibility.Collapsed;
QuickColorPurpleCheck.Visibility = Visibility.Collapsed;
+
+ // 隐藏所有check图标(单行显示)
+ QuickColorWhiteCheckSingle.Visibility = Visibility.Collapsed;
+ QuickColorOrangeCheckSingle.Visibility = Visibility.Collapsed;
+ QuickColorYellowCheckSingle.Visibility = Visibility.Collapsed;
+ QuickColorBlackCheckSingle.Visibility = Visibility.Collapsed;
+ QuickColorRedCheckSingle.Visibility = Visibility.Collapsed;
+ QuickColorGreenCheckSingle.Visibility = Visibility.Collapsed;
// 显示当前选中颜色的check图标
- // 使用更精确的颜色匹配,减少容差范围避免误判
if (IsColorSimilar(selectedColor, Colors.White, 10) || IsColorSimilar(selectedColor, Color.FromRgb(250, 250, 250), 10))
{
QuickColorWhiteCheck.Visibility = Visibility.Visible;
+ QuickColorWhiteCheckSingle.Visibility = Visibility.Visible;
}
else if (IsColorSimilar(selectedColor, Colors.Black, 10))
{
QuickColorBlackCheck.Visibility = Visibility.Visible;
+ QuickColorBlackCheckSingle.Visibility = Visibility.Visible;
}
else if (IsColorSimilar(selectedColor, Colors.Yellow, 15) ||
IsColorSimilar(selectedColor, Color.FromRgb(234, 179, 8), 15) ||
@@ -1983,36 +2042,37 @@ namespace Ink_Canvas
IsColorSimilar(selectedColor, Color.FromRgb(253, 224, 71), 15))
{
QuickColorYellowCheck.Visibility = Visibility.Visible;
+ QuickColorYellowCheckSingle.Visibility = Visibility.Visible;
}
else if (IsColorSimilar(selectedColor, Color.FromRgb(255, 165, 0), 15) ||
IsColorSimilar(selectedColor, Color.FromRgb(249, 115, 22), 15) ||
IsColorSimilar(selectedColor, Color.FromRgb(234, 88, 12), 15))
{
QuickColorOrangeCheck.Visibility = Visibility.Visible;
+ QuickColorOrangeCheckSingle.Visibility = Visibility.Visible;
}
- else if (IsColorSimilar(selectedColor, Color.FromRgb(0, 102, 255), 15) ||
- IsColorSimilar(selectedColor, Color.FromRgb(37, 99, 235), 15) ||
- IsColorSimilar(selectedColor, Color.FromRgb(59, 130, 246), 15))
+ else if (IsColorSimilar(selectedColor, Color.FromRgb(37, 99, 235), 15))
{
QuickColorBlueCheck.Visibility = Visibility.Visible;
+ // 单行显示模式没有蓝色,所以不设置单行的check
}
else if (IsColorSimilar(selectedColor, Colors.Red, 15) ||
IsColorSimilar(selectedColor, Color.FromRgb(220, 38, 38), 15) ||
IsColorSimilar(selectedColor, Color.FromRgb(239, 68, 68), 15))
{
QuickColorRedCheck.Visibility = Visibility.Visible;
+ QuickColorRedCheckSingle.Visibility = Visibility.Visible;
}
else if (IsColorSimilar(selectedColor, Colors.Green, 15) ||
- IsColorSimilar(selectedColor, Color.FromRgb(34, 197, 94), 15) ||
IsColorSimilar(selectedColor, Color.FromRgb(22, 163, 74), 15))
{
QuickColorGreenCheck.Visibility = Visibility.Visible;
+ QuickColorGreenCheckSingle.Visibility = Visibility.Visible;
}
- else if (IsColorSimilar(selectedColor, Color.FromRgb(128, 0, 128), 15) ||
- IsColorSimilar(selectedColor, Color.FromRgb(147, 51, 234), 15) ||
- IsColorSimilar(selectedColor, Color.FromRgb(168, 85, 247), 15))
+ else if (IsColorSimilar(selectedColor, Color.FromRgb(147, 51, 234), 15))
{
QuickColorPurpleCheck.Visibility = Visibility.Visible;
+ // 单行显示模式没有紫色,所以不设置单行的check
}
}
diff --git a/Ink Canvas/MainWindow_cs/MW_Settings.cs b/Ink Canvas/MainWindow_cs/MW_Settings.cs
index 671b048f..005db747 100644
--- a/Ink Canvas/MainWindow_cs/MW_Settings.cs
+++ b/Ink Canvas/MainWindow_cs/MW_Settings.cs
@@ -1864,6 +1864,7 @@ namespace Ink_Canvas
Settings.Appearance.IsShowLassoSelectButton = true;
Settings.Appearance.IsShowClearAndMouseButton = true;
Settings.Appearance.IsShowQuickColorPalette = false;
+ Settings.Appearance.QuickColorPaletteDisplayMode = 1;
Settings.Appearance.EraserDisplayOption = 0;
Settings.Automation.IsAutoFoldInEasiNote = true;
@@ -2415,6 +2416,14 @@ namespace Ink_Canvas
SaveSettingsToFile();
}
+ private void ComboBoxQuickColorPaletteDisplayMode_SelectionChanged(object sender, SelectionChangedEventArgs e)
+ {
+ if (!isLoaded) return;
+ Settings.Appearance.QuickColorPaletteDisplayMode = ComboBoxQuickColorPaletteDisplayMode.SelectedIndex;
+ UpdateFloatingBarButtonsVisibility();
+ SaveSettingsToFile();
+ }
+
private void ComboBoxEraserDisplayOption_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
if (!isLoaded) return;
@@ -2452,19 +2461,32 @@ namespace Ink_Canvas
if (Fold_Icon != null)
Fold_Icon.Visibility = Settings.Appearance.IsShowHideButton ? Visibility.Visible : Visibility.Collapsed;
- // 快捷调色盘
- if (QuickColorPalettePanel != null)
+ // 快捷调色盘
+ if (QuickColorPalettePanel != null && QuickColorPaletteSingleRowPanel != null)
{
bool shouldShow = Settings.Appearance.IsShowQuickColorPalette && inkCanvas.EditingMode == InkCanvasEditingMode.Ink;
- bool wasVisible = QuickColorPalettePanel.Visibility == Visibility.Visible;
+ bool wasVisible = QuickColorPalettePanel.Visibility == Visibility.Visible || QuickColorPaletteSingleRowPanel.Visibility == Visibility.Visible;
if (shouldShow)
{
- QuickColorPalettePanel.Visibility = Visibility.Visible;
+ // 根据显示模式选择显示哪个面板
+ if (Settings.Appearance.QuickColorPaletteDisplayMode == 0)
+ {
+ // 单行显示模式
+ QuickColorPalettePanel.Visibility = Visibility.Collapsed;
+ QuickColorPaletteSingleRowPanel.Visibility = Visibility.Visible;
+ }
+ else
+ {
+ // 双行显示模式
+ QuickColorPalettePanel.Visibility = Visibility.Visible;
+ QuickColorPaletteSingleRowPanel.Visibility = Visibility.Collapsed;
+ }
}
else
{
QuickColorPalettePanel.Visibility = Visibility.Collapsed;
+ QuickColorPaletteSingleRowPanel.Visibility = Visibility.Collapsed;
}
// 如果快捷调色盘的可见性发生变化,重新计算浮动栏位置
@@ -2473,7 +2495,19 @@ namespace Ink_Canvas
if (BtnPPTSlideShowEnd.Visibility == Visibility.Visible)
ViewboxFloatingBarMarginAnimation(60);
else
- ViewboxFloatingBarMarginAnimation(100, true);
+ {
+ // 根据显示模式调整动画参数
+ if (Settings.Appearance.QuickColorPaletteDisplayMode == 0)
+ {
+ // 单行显示模式,动画参数较小
+ ViewboxFloatingBarMarginAnimation(60, true);
+ }
+ else
+ {
+ // 双行显示模式,动画参数较大
+ ViewboxFloatingBarMarginAnimation(100, true);
+ }
+ }
}
}
diff --git a/Ink Canvas/MainWindow_cs/MW_SettingsToLoad.cs b/Ink Canvas/MainWindow_cs/MW_SettingsToLoad.cs
index a7c867a5..6a514252 100644
--- a/Ink Canvas/MainWindow_cs/MW_SettingsToLoad.cs
+++ b/Ink Canvas/MainWindow_cs/MW_SettingsToLoad.cs
@@ -317,6 +317,7 @@ namespace Ink_Canvas
ToggleSwitchShowLassoSelectButton.IsOn = Settings.Appearance.IsShowLassoSelectButton;
ToggleSwitchShowClearAndMouseButton.IsOn = Settings.Appearance.IsShowClearAndMouseButton;
ComboBoxEraserDisplayOption.SelectedIndex = Settings.Appearance.EraserDisplayOption;
+ ComboBoxQuickColorPaletteDisplayMode.SelectedIndex = Settings.Appearance.QuickColorPaletteDisplayMode;
// 初始化快捷调色盘指示器
UpdateQuickColorPaletteIndicator(inkCanvas.DefaultDrawingAttributes.Color);
diff --git a/Ink Canvas/Resources/Settings.cs b/Ink Canvas/Resources/Settings.cs
index 9d1fe64c..e9f7031e 100644
--- a/Ink Canvas/Resources/Settings.cs
+++ b/Ink Canvas/Resources/Settings.cs
@@ -218,6 +218,9 @@ namespace Ink_Canvas
[JsonProperty("isShowQuickColorPalette")]
public bool IsShowQuickColorPalette { get; set; } = false;
+
+ [JsonProperty("quickColorPaletteDisplayMode")]
+ public int QuickColorPaletteDisplayMode { get; set; } = 1;
}