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; }