improve:快捷调色盘

This commit is contained in:
2025-08-12 12:19:55 +08:00
parent 34172a54fe
commit 0478949305
6 changed files with 403 additions and 46 deletions
+96 -36
View File
@@ -27,7 +27,7 @@ namespace Ink_Canvas
{
public partial class MainWindow : Window
{
#region
#region "按鈕
/// <summary>
/// 用於浮動工具欄的"手勢"按鈕和白板工具欄的"手勢"按鈕的點擊事件
@@ -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
}
}
+39 -5
View File
@@ -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);
}
}
}
}
@@ -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);