diff --git a/Ink Canvas/Helpers/Converters.cs b/Ink Canvas/Helpers/Converters.cs index 15fe2f3..4b7f47f 100644 --- a/Ink Canvas/Helpers/Converters.cs +++ b/Ink Canvas/Helpers/Converters.cs @@ -1,9 +1,36 @@ using System; +using System.Globalization; using System.Windows; using System.Windows.Data; namespace Ink_Canvas.Converter { + public class BooleanToVisibilityConverter : IValueConverter + { + public object Convert(object value, Type targetType, object parameter, CultureInfo culture) + { + if ((bool)value == true) + { + return Visibility.Visible; + } + else + { + return Visibility.Collapsed; + } + } + + public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) + { + if ((bool)value == true) + { + return Visibility.Visible; + } + else + { + return Visibility.Collapsed; + } + } + } public class VisibilityConverter : IValueConverter { public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) diff --git a/Ink Canvas/Ink Canvas.csproj b/Ink Canvas/Ink Canvas.csproj index 3194d64..2f95b7b 100644 --- a/Ink Canvas/Ink Canvas.csproj +++ b/Ink Canvas/Ink Canvas.csproj @@ -185,6 +185,7 @@ + @@ -304,7 +305,9 @@ + + @@ -325,6 +328,7 @@ + @@ -443,9 +447,13 @@ + + + + diff --git a/Ink Canvas/MainWindow.xaml b/Ink Canvas/MainWindow.xaml index 947a721..c54de78 100644 --- a/Ink Canvas/MainWindow.xaml +++ b/Ink Canvas/MainWindow.xaml @@ -30,6 +30,7 @@ + @@ -812,9 +813,9 @@ - - - + + + @@ -836,10 +837,14 @@ - - - - + + + + + + + + - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + - - - - - - - + + + + + + + + + + + + + + - + + + + @@ -898,11 +903,17 @@ - - - - - + + + + + + + + + + + @@ -916,7 +927,8 @@ - + + @@ -946,6 +958,8 @@ + + @@ -1635,14 +1649,43 @@ - + - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + @@ -1687,7 +1730,16 @@ - + + + + + + + @@ -1756,6 +1808,153 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -1779,7 +1978,7 @@ - - + + + + @@ -1916,10 +2118,13 @@ - + - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -2024,7 +2256,10 @@ - + + + + diff --git a/Ink Canvas/MainWindow.xaml.cs b/Ink Canvas/MainWindow.xaml.cs index 6a39ba9..46fe64a 100644 --- a/Ink Canvas/MainWindow.xaml.cs +++ b/Ink Canvas/MainWindow.xaml.cs @@ -81,6 +81,7 @@ namespace Ink_Canvas { } CheckColorTheme(true); + CheckPenTypeUIState(); } #endregion @@ -211,5 +212,6 @@ namespace Ink_Canvas { } #endregion Definations and Loading + } } \ No newline at end of file diff --git a/Ink Canvas/MainWindow_cs/MW_Colors.cs b/Ink Canvas/MainWindow_cs/MW_Colors.cs new file mode 100644 index 0000000..c3fe9f9 --- /dev/null +++ b/Ink Canvas/MainWindow_cs/MW_Colors.cs @@ -0,0 +1,627 @@ +using Ink_Canvas.Helpers; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Controls; +using System.Windows.Ink; +using System.Windows.Media.Imaging; +using System.Windows.Media; +using System.Windows; +using System.Windows.Input; + +namespace Ink_Canvas +{ + public partial class MainWindow : Window + { + int inkColor = 1; + + private void ColorSwitchCheck() + { + HideSubPanels("color"); + if (Main_Grid.Background == Brushes.Transparent) + { + if (currentMode == 1) + { + currentMode = 0; + GridBackgroundCover.Visibility = Visibility.Collapsed; + AnimationsHelper.HideWithSlideAndFade(BlackboardLeftSide); + AnimationsHelper.HideWithSlideAndFade(BlackboardCenterSide); + AnimationsHelper.HideWithSlideAndFade(BlackboardRightSide); + } + BtnHideInkCanvas_Click(BtnHideInkCanvas, null); + } + + StrokeCollection strokes = inkCanvas.GetSelectedStrokes(); + if (strokes.Count != 0) + { + foreach (Stroke stroke in strokes) + { + try + { + stroke.DrawingAttributes.Color = inkCanvas.DefaultDrawingAttributes.Color; + } + catch { } + } + } + else + { + inkCanvas.IsManipulationEnabled = true; + drawingShapeMode = 0; + inkCanvas.EditingMode = InkCanvasEditingMode.Ink; + CancelSingleFingerDragMode(); + forceEraser = false; + CheckColorTheme(); + } + + isLongPressSelected = false; + } + + bool isUselightThemeColor = false, isDesktopUselightThemeColor = false; + int penType = 0; // 0是签字笔,1是荧光笔 + int lastDesktopInkColor = 1, lastBoardInkColor = 5; + int highlighterColor = 102; + + private void CheckColorTheme(bool changeColorTheme = false) + { + if (changeColorTheme) + { + if (currentMode != 0) + { + if (Settings.Canvas.UsingWhiteboard) + { + GridBackgroundCover.Background = new SolidColorBrush(Color.FromRgb(234, 235, 237)); + WaterMarkTime.Foreground = new SolidColorBrush(Color.FromRgb(22, 41, 36)); + WaterMarkDate.Foreground = new SolidColorBrush(Color.FromRgb(22, 41, 36)); + BlackBoardWaterMark.Foreground = new SolidColorBrush(Color.FromRgb(22, 41, 36)); + isUselightThemeColor = false; + } + else + { + GridBackgroundCover.Background = new SolidColorBrush(Color.FromRgb(22, 41, 36)); + WaterMarkTime.Foreground = new SolidColorBrush(Color.FromRgb(234, 235, 237)); + WaterMarkDate.Foreground = new SolidColorBrush(Color.FromRgb(234, 235, 237)); + BlackBoardWaterMark.Foreground = new SolidColorBrush(Color.FromRgb(234, 235, 237)); + isUselightThemeColor = true; + } + } + } + + if (currentMode == 0) + { + isUselightThemeColor = isDesktopUselightThemeColor; + inkColor = lastDesktopInkColor; + } + else + { + inkColor = lastBoardInkColor; + } + + double alpha = inkCanvas.DefaultDrawingAttributes.Color.A; + + if (inkColor == 0) + { // Black + inkCanvas.DefaultDrawingAttributes.Color = Color.FromArgb((byte)alpha, 0, 0, 0); + } + else if (inkColor == 5) + { // White + inkCanvas.DefaultDrawingAttributes.Color = Color.FromArgb((byte)alpha, 255, 255, 255); + } + else if (penType==0) + { + if (isUselightThemeColor) + { + if (inkColor == 1) + { // Red + inkCanvas.DefaultDrawingAttributes.Color = Color.FromArgb((byte)alpha, 239, 68, 68); + } + else if (inkColor == 2) + { // Green + inkCanvas.DefaultDrawingAttributes.Color = Color.FromArgb((byte)alpha, 34, 197, 94); + } + else if (inkColor == 3) + { // Blue + inkCanvas.DefaultDrawingAttributes.Color = Color.FromArgb((byte)alpha, 59, 130, 246); + } + else if (inkColor == 4) + { // Yellow + inkCanvas.DefaultDrawingAttributes.Color = Color.FromArgb((byte)alpha, 250, 204, 21); + } + else if (inkColor == 6) + { // Pink + inkCanvas.DefaultDrawingAttributes.Color = Color.FromArgb((byte)alpha, 236, 72, 153); + } + else if (inkColor == 7) + { // Teal (亮色) + inkCanvas.DefaultDrawingAttributes.Color = Color.FromArgb((byte)alpha, 20, 184, 166); + } + else if (inkColor == 8) + { // Orange (亮色) + inkCanvas.DefaultDrawingAttributes.Color = Color.FromArgb((byte)alpha, 249, 115, 22); + } + } + else + { + if (inkColor == 1) + { // Red + inkCanvas.DefaultDrawingAttributes.Color = Color.FromArgb((byte)alpha, 220, 38, 38); + } + else if (inkColor == 2) + { // Green + inkCanvas.DefaultDrawingAttributes.Color = Color.FromArgb((byte)alpha, 22, 163, 74); + } + else if (inkColor == 3) + { // Blue + inkCanvas.DefaultDrawingAttributes.Color = Color.FromArgb((byte)alpha, 37, 99, 235); + } + else if (inkColor == 4) + { // Yellow + inkCanvas.DefaultDrawingAttributes.Color = Color.FromArgb((byte)alpha, 234, 179, 8); + } + else if (inkColor == 6) + { // Pink ( Purple ) + inkCanvas.DefaultDrawingAttributes.Color = Color.FromArgb((byte)alpha, 147, 51, 234); + } + else if (inkColor == 7) + { // Teal (暗色) + inkCanvas.DefaultDrawingAttributes.Color = Color.FromArgb((byte)alpha, 13, 148, 136); + } + else if (inkColor == 8) + { // Orange (暗色) + inkCanvas.DefaultDrawingAttributes.Color = Color.FromArgb((byte)alpha, 234, 88, 12); + } + } + } else if (penType==1) + { + if (highlighterColor == 100) + { // Black + inkCanvas.DefaultDrawingAttributes.Color = Color.FromRgb(0,0,0); + } + else if (highlighterColor == 101) + { // White + inkCanvas.DefaultDrawingAttributes.Color = Color.FromRgb(250, 250, 250); + } + else if (highlighterColor == 102) + { // Red + inkCanvas.DefaultDrawingAttributes.Color = Color.FromRgb(239, 68, 68); + } + else if (highlighterColor == 103) + { // Yellow + inkCanvas.DefaultDrawingAttributes.Color = Color.FromRgb(253, 224, 71); + } + else if (highlighterColor == 104) + { // Green + inkCanvas.DefaultDrawingAttributes.Color = Color.FromRgb(74, 222, 128); + } + else if (highlighterColor == 105) + { // Zinc + inkCanvas.DefaultDrawingAttributes.Color = Color.FromRgb(113, 113, 122); + } + else if (highlighterColor == 106) + { // Blue + inkCanvas.DefaultDrawingAttributes.Color = Color.FromRgb(59, 130, 246); + } + else if (highlighterColor == 107) + { // Purple + inkCanvas.DefaultDrawingAttributes.Color = Color.FromRgb(168, 85, 247); + } + else if (highlighterColor == 108) + { // teal + inkCanvas.DefaultDrawingAttributes.Color = Color.FromRgb(45, 212, 191); + } + else if (highlighterColor == 109) + { // Orange + inkCanvas.DefaultDrawingAttributes.Color = Color.FromRgb(249, 115, 22); + } + } + if (isUselightThemeColor) + { // 亮系 + // 亮色的红色 + BorderPenColorRed.Background = new SolidColorBrush(Color.FromRgb(239, 68, 68)); + BoardBorderPenColorRed.Background = new SolidColorBrush(Color.FromRgb(239, 68, 68)); + // 亮色的绿色 + BorderPenColorGreen.Background = new SolidColorBrush(Color.FromRgb(34, 197, 94)); + BoardBorderPenColorGreen.Background = new SolidColorBrush(Color.FromRgb(34, 197, 94)); + // 亮色的蓝色 + BorderPenColorBlue.Background = new SolidColorBrush(Color.FromRgb(59, 130, 246)); + BoardBorderPenColorBlue.Background = new SolidColorBrush(Color.FromRgb(59, 130, 246)); + // 亮色的黄色 + BorderPenColorYellow.Background = new SolidColorBrush(Color.FromRgb(250, 204, 21)); + BoardBorderPenColorYellow.Background = new SolidColorBrush(Color.FromRgb(250, 204, 21)); + // 亮色的粉色 + BorderPenColorPink.Background = new SolidColorBrush(Color.FromRgb(236, 72, 153)); + BoardBorderPenColorPink.Background = new SolidColorBrush(Color.FromRgb(236, 72, 153)); + // 亮色的Teal + BorderPenColorTeal.Background = new SolidColorBrush(Color.FromRgb(20, 184, 166)); + // 亮色的Orange + BorderPenColorOrange.Background = new SolidColorBrush(Color.FromRgb(249, 115, 22)); + + BitmapImage newImageSource = new BitmapImage(); + newImageSource.BeginInit(); + newImageSource.UriSource = new Uri("/Resources/Icons-Fluent/ic_fluent_weather_moon_24_regular.png", UriKind.RelativeOrAbsolute); + newImageSource.EndInit(); + ColorThemeSwitchIcon.Source = newImageSource; + BoardColorThemeSwitchIcon.Source = newImageSource; + + ColorThemeSwitchTextBlock.Text = "暗系"; + BoardColorThemeSwitchTextBlock.Text = "暗系"; + } + else + { // 暗系 + // 暗色的红色 + BorderPenColorRed.Background = new SolidColorBrush(Color.FromRgb(220, 38, 38)); + BoardBorderPenColorRed.Background = new SolidColorBrush(Color.FromRgb(220, 38, 38)); + // 暗色的绿色 + BorderPenColorGreen.Background = new SolidColorBrush(Color.FromRgb(22, 163, 74)); + BoardBorderPenColorGreen.Background = new SolidColorBrush(Color.FromRgb(22, 163, 74)); + // 暗色的蓝色 + BorderPenColorBlue.Background = new SolidColorBrush(Color.FromRgb(37, 99, 235)); + BoardBorderPenColorBlue.Background = new SolidColorBrush(Color.FromRgb(37, 99, 235)); + // 暗色的黄色 + BorderPenColorYellow.Background = new SolidColorBrush(Color.FromRgb(234, 179, 8)); + BoardBorderPenColorYellow.Background = new SolidColorBrush(Color.FromRgb(234, 179, 8)); + // 暗色的紫色对应亮色的粉色 + BorderPenColorPink.Background = new SolidColorBrush(Color.FromRgb(147, 51, 234)); + BoardBorderPenColorPink.Background = new SolidColorBrush(Color.FromRgb(147, 51, 234)); + // 暗色的Teal + BorderPenColorTeal.Background = new SolidColorBrush(Color.FromRgb(13, 148, 136)); + // 暗色的Orange + BorderPenColorOrange.Background = new SolidColorBrush(Color.FromRgb(234, 88, 12)); + + BitmapImage newImageSource = new BitmapImage(); + newImageSource.BeginInit(); + newImageSource.UriSource = new Uri("/Resources/Icons-Fluent/ic_fluent_weather_sunny_24_regular.png", UriKind.RelativeOrAbsolute); + newImageSource.EndInit(); + ColorThemeSwitchIcon.Source = newImageSource; + BoardColorThemeSwitchIcon.Source = newImageSource; + + ColorThemeSwitchTextBlock.Text = "亮系"; + BoardColorThemeSwitchTextBlock.Text = "亮系"; + } + + // 改变选中提示 + ViewboxBtnColorBlackContent.Visibility = Visibility.Collapsed; + ViewboxBtnColorBlueContent.Visibility = Visibility.Collapsed; + ViewboxBtnColorGreenContent.Visibility = Visibility.Collapsed; + ViewboxBtnColorRedContent.Visibility = Visibility.Collapsed; + ViewboxBtnColorYellowContent.Visibility = Visibility.Collapsed; + ViewboxBtnColorWhiteContent.Visibility = Visibility.Collapsed; + ViewboxBtnColorPinkContent.Visibility = Visibility.Collapsed; + ViewboxBtnColorTealContent.Visibility = Visibility.Collapsed; + ViewboxBtnColorOrangeContent.Visibility = Visibility.Collapsed; + BoardViewboxBtnColorBlackContent.Visibility = Visibility.Collapsed; + BoardViewboxBtnColorBlueContent.Visibility = Visibility.Collapsed; + BoardViewboxBtnColorGreenContent.Visibility = Visibility.Collapsed; + BoardViewboxBtnColorRedContent.Visibility = Visibility.Collapsed; + BoardViewboxBtnColorYellowContent.Visibility = Visibility.Collapsed; + BoardViewboxBtnColorWhiteContent.Visibility = Visibility.Collapsed; + BoardViewboxBtnColorPinkContent.Visibility = Visibility.Collapsed; + + HighlighterPenViewboxBtnColorBlackContent.Visibility = Visibility.Collapsed; + HighlighterPenViewboxBtnColorBlueContent.Visibility= Visibility.Collapsed; + HighlighterPenViewboxBtnColorGreenContent.Visibility= Visibility.Collapsed; + HighlighterPenViewboxBtnColorOrangeContent.Visibility= Visibility.Collapsed; + HighlighterPenViewboxBtnColorPurpleContent.Visibility= Visibility.Collapsed; + HighlighterPenViewboxBtnColorRedContent.Visibility= Visibility.Collapsed; + HighlighterPenViewboxBtnColorTealContent.Visibility=Visibility.Collapsed; + HighlighterPenViewboxBtnColorWhiteContent.Visibility= Visibility.Collapsed; + HighlighterPenViewboxBtnColorYellowContent.Visibility=Visibility.Collapsed; + HighlighterPenViewboxBtnColorZincContent.Visibility=Visibility.Collapsed; + + switch (inkColor) + { + case 0: + ViewboxBtnColorBlackContent.Visibility = Visibility.Visible; + BoardViewboxBtnColorBlackContent.Visibility = Visibility.Visible; + break; + case 1: + ViewboxBtnColorRedContent.Visibility = Visibility.Visible; + BoardViewboxBtnColorRedContent.Visibility = Visibility.Visible; + break; + case 2: + ViewboxBtnColorGreenContent.Visibility = Visibility.Visible; + BoardViewboxBtnColorGreenContent.Visibility = Visibility.Visible; + break; + case 3: + ViewboxBtnColorBlueContent.Visibility = Visibility.Visible; + BoardViewboxBtnColorBlueContent.Visibility = Visibility.Visible; + break; + case 4: + ViewboxBtnColorYellowContent.Visibility = Visibility.Visible; + BoardViewboxBtnColorYellowContent.Visibility = Visibility.Visible; + break; + case 5: + ViewboxBtnColorWhiteContent.Visibility = Visibility.Visible; + BoardViewboxBtnColorWhiteContent.Visibility = Visibility.Visible; + break; + case 6: + ViewboxBtnColorPinkContent.Visibility = Visibility.Visible; + BoardViewboxBtnColorPinkContent.Visibility = Visibility.Visible; + break; + case 7: + ViewboxBtnColorTealContent.Visibility = Visibility.Visible; + break; + case 8: + ViewboxBtnColorOrangeContent.Visibility = Visibility.Visible; + break; + } + + switch (highlighterColor) + { + case 100: + HighlighterPenViewboxBtnColorBlackContent.Visibility = Visibility.Visible; + break; + case 101: + HighlighterPenViewboxBtnColorWhiteContent.Visibility = Visibility.Visible; + break; + case 102: + HighlighterPenViewboxBtnColorRedContent.Visibility = Visibility.Visible; + break; + case 103: + HighlighterPenViewboxBtnColorYellowContent.Visibility = Visibility.Visible; + break; + case 104: + HighlighterPenViewboxBtnColorGreenContent.Visibility = Visibility.Visible; + break; + case 105: + HighlighterPenViewboxBtnColorZincContent.Visibility = Visibility.Visible; + break; + case 106: + HighlighterPenViewboxBtnColorBlueContent.Visibility = Visibility.Visible; + break; + case 107: + HighlighterPenViewboxBtnColorPurpleContent.Visibility = Visibility.Visible; + break; + case 108: + HighlighterPenViewboxBtnColorTealContent.Visibility = Visibility.Visible; + break; + case 109: + HighlighterPenViewboxBtnColorOrangeContent.Visibility = Visibility.Visible; + break; + } + + } + + private void CheckLastColor(int inkColor, bool isHighlighter = false) + { + if (isHighlighter==true) + { + highlighterColor = inkColor; + } else + { + if (currentMode == 0) lastDesktopInkColor = inkColor; + else lastBoardInkColor = inkColor; + } + + } + + private void CheckPenTypeUIState() + { + if (penType==0) + { + DefaultPenPropsPanel.Visibility = Visibility.Visible; + DefaultPenColorsPanel.Visibility = Visibility.Visible; + HighlighterPenColorsPanel.Visibility = Visibility.Collapsed; + HighlighterPenPropsPanel.Visibility = Visibility.Collapsed; + PenPalette.Margin = new Thickness(-160, -200, -33, 32); + DefaultPenTabButton.Opacity = 1; + DefaultPenTabButtonText.FontWeight = FontWeights.Bold; + DefaultPenTabButtonText.Margin = new Thickness(2, 0.5, 0, 0); + DefaultPenTabButtonText.FontSize = 9.5; + DefaultPenTabButton.Background = new SolidColorBrush(Color.FromArgb(72, 219, 234, 254)); + DefaultPenTabButtonIndicator.Visibility = Visibility.Visible; + HighlightPenTabButton.Opacity = 0.9; + HighlightPenTabButtonText.FontWeight = FontWeights.Normal; + HighlightPenTabButtonText.FontSize = 9; + HighlightPenTabButtonText.Margin = new Thickness(2, 1, 0, 0); + HighlightPenTabButton.Background = new SolidColorBrush(Colors.Transparent); + HighlightPenTabButtonIndicator.Visibility = Visibility.Collapsed; + } else if (penType==1) + { + DefaultPenPropsPanel.Visibility = Visibility.Collapsed; + DefaultPenColorsPanel.Visibility = Visibility.Collapsed; + HighlighterPenColorsPanel.Visibility = Visibility.Visible; + HighlighterPenPropsPanel.Visibility = Visibility.Visible; + PenPalette.Margin = new Thickness(-160, -157, -33, 32); + DefaultPenTabButton.Opacity = 0.9; + DefaultPenTabButtonText.FontWeight = FontWeights.Normal; + DefaultPenTabButtonText.FontSize = 9; + DefaultPenTabButtonText.Margin = new Thickness(2, 1, 0, 0); + DefaultPenTabButton.Background = new SolidColorBrush(Colors.Transparent); + DefaultPenTabButtonIndicator.Visibility = Visibility.Collapsed; + HighlightPenTabButton.Opacity = 1; + HighlightPenTabButtonText.FontWeight = FontWeights.Bold; + HighlightPenTabButtonText.FontSize = 9.5; + HighlightPenTabButtonText.Margin = new Thickness(2, 0.5, 0, 0); + HighlightPenTabButton.Background = new SolidColorBrush(Color.FromArgb(72, 219, 234, 254)); + HighlightPenTabButtonIndicator.Visibility = Visibility.Visible; + } + } + + private void SwitchToDefaultPen(object sender, MouseButtonEventArgs e) + { + penType = 0; + CheckPenTypeUIState(); + CheckColorTheme(); + drawingAttributes.Width = Settings.Canvas.InkWidth; + drawingAttributes.Height = Settings.Canvas.InkWidth; + drawingAttributes.StylusTip = StylusTip.Ellipse; + drawingAttributes.IsHighlighter = false; + } + + private void SwitchToHighlighterPen(object sender, MouseButtonEventArgs e) + { + penType = 1; + CheckPenTypeUIState(); + CheckColorTheme(); + drawingAttributes.Width = Settings.Canvas.HighlighterWidth/2; + drawingAttributes.Height = Settings.Canvas.HighlighterWidth; + drawingAttributes.StylusTip = StylusTip.Rectangle; + drawingAttributes.IsHighlighter = true; + } + + private void BtnColorBlack_Click(object sender, RoutedEventArgs e) + { + CheckLastColor(0); + forceEraser = false; + ColorSwitchCheck(); + } + + private void BtnColorRed_Click(object sender, RoutedEventArgs e) + { + CheckLastColor(1); + forceEraser = false; + ColorSwitchCheck(); + } + + private void BtnColorGreen_Click(object sender, RoutedEventArgs e) + { + CheckLastColor(2); + forceEraser = false; + ColorSwitchCheck(); + } + + private void BtnColorBlue_Click(object sender, RoutedEventArgs e) + { + CheckLastColor(3); + forceEraser = false; + ColorSwitchCheck(); + } + + private void BtnColorYellow_Click(object sender, RoutedEventArgs e) + { + CheckLastColor(4); + forceEraser = false; + ColorSwitchCheck(); + } + + private void BtnColorWhite_Click(object sender, RoutedEventArgs e) + { + CheckLastColor(5); + forceEraser = false; + ColorSwitchCheck(); + } + + private void BtnColorPink_Click(object sender, RoutedEventArgs e) + { + CheckLastColor(6); + forceEraser = false; + ColorSwitchCheck(); + } + + private void BtnColorOrange_Click(object sender, RoutedEventArgs e) + { + CheckLastColor(8); + forceEraser = false; + ColorSwitchCheck(); + } + + private void BtnColorTeal_Click(object sender, RoutedEventArgs e) + { + CheckLastColor(7); + forceEraser = false; + ColorSwitchCheck(); + } + + private void BtnHighlighterColorBlack_Click(object sender, RoutedEventArgs e) + { + CheckLastColor(100,true); + penType = 1; + forceEraser = false; + CheckPenTypeUIState(); + ColorSwitchCheck(); + } + private void BtnHighlighterColorWhite_Click(object sender, RoutedEventArgs e) + { + CheckLastColor(101, true); + penType = 1; + forceEraser = false; + CheckPenTypeUIState(); + ColorSwitchCheck(); + } + private void BtnHighlighterColorRed_Click(object sender, RoutedEventArgs e) + { + CheckLastColor(102, true); + penType = 1; + forceEraser = false; + CheckPenTypeUIState(); + ColorSwitchCheck(); + } + private void BtnHighlighterColorYellow_Click(object sender, RoutedEventArgs e) + { + CheckLastColor(103, true); + penType = 1; + forceEraser = false; + CheckPenTypeUIState(); + ColorSwitchCheck(); + } + private void BtnHighlighterColorGreen_Click(object sender, RoutedEventArgs e) + { + CheckLastColor(104, true); + penType = 1; + forceEraser = false; + CheckPenTypeUIState(); + ColorSwitchCheck(); + } + private void BtnHighlighterColorZinc_Click(object sender, RoutedEventArgs e) + { + CheckLastColor(105, true); + penType = 1; + forceEraser = false; + CheckPenTypeUIState(); + ColorSwitchCheck(); + } + private void BtnHighlighterColorBlue_Click(object sender, RoutedEventArgs e) + { + CheckLastColor(106, true); + penType = 1; + forceEraser = false; + CheckPenTypeUIState(); + ColorSwitchCheck(); + } + private void BtnHighlighterColorPurple_Click(object sender, RoutedEventArgs e) + { + CheckLastColor(107, true); + penType = 1; + forceEraser = false; + CheckPenTypeUIState(); + ColorSwitchCheck(); + } + private void BtnHighlighterColorTeal_Click(object sender, RoutedEventArgs e) + { + CheckLastColor(108, true); + penType = 1; + forceEraser = false; + CheckPenTypeUIState(); + ColorSwitchCheck(); + } + private void BtnHighlighterColorOrange_Click(object sender, RoutedEventArgs e) + { + CheckLastColor(109, true); + penType = 1; + forceEraser = false; + CheckPenTypeUIState(); + ColorSwitchCheck(); + } + + private Color StringToColor(string colorStr) + { + Byte[] argb = new Byte[4]; + for (int i = 0; i < 4; i++) + { + char[] charArray = colorStr.Substring(i * 2 + 1, 2).ToCharArray(); + Byte b1 = toByte(charArray[0]); + Byte b2 = toByte(charArray[1]); + argb[i] = (Byte)(b2 | (b1 << 4)); + } + return Color.FromArgb(argb[0], argb[1], argb[2], argb[3]);//#FFFFFFFF + } + + private static byte toByte(char c) + { + byte b = (byte)"0123456789ABCDEF".IndexOf(c); + return b; + } + } +} diff --git a/Ink Canvas/MainWindow_cs/MW_FloatingBarIcons.cs b/Ink Canvas/MainWindow_cs/MW_FloatingBarIcons.cs index e351b8d..f1712c7 100644 --- a/Ink Canvas/MainWindow_cs/MW_FloatingBarIcons.cs +++ b/Ink Canvas/MainWindow_cs/MW_FloatingBarIcons.cs @@ -20,12 +20,16 @@ using System.IO; using System.Windows.Media.Effects; using static System.Net.Mime.MediaTypeNames; using System.Text; +using System.Globalization; +using System.Windows.Data; namespace Ink_Canvas { public partial class MainWindow : Window { #region TwoFingZoomBtn + + private void TwoFingerGestureBorder_MouseUp(object sender, RoutedEventArgs e) { FloatingBarIcons_MouseUp_New(sender); if (TwoFingerGestureBorder.Visibility == Visibility.Visible) { @@ -484,6 +488,7 @@ namespace Ink_Canvas { }); })).Start(); + SwitchToDefaultPen(null, null); CheckColorTheme(true); } @@ -510,6 +515,39 @@ namespace Ink_Canvas { new RandWindow().Show(); } + public void CheckEraserTypeTab() + { + if (Settings.Canvas.EraserShapeType==0) + { + CircleEraserTabButton.Background = new SolidColorBrush(Color.FromArgb(85, 59, 130, 246)); + CircleEraserTabButton.Opacity = 1; + CircleEraserTabButtonText.FontWeight = FontWeights.Bold; + CircleEraserTabButtonText.Margin = new Thickness(2, 0.5, 0, 0); + CircleEraserTabButtonText.FontSize = 9.5; + CircleEraserTabButtonIndicator.Visibility = Visibility.Visible; + RectangleEraserTabButton.Background = new SolidColorBrush(Colors.Transparent); + RectangleEraserTabButton.Opacity = 0.75; + RectangleEraserTabButtonText.FontWeight = FontWeights.Normal; + RectangleEraserTabButtonText.FontSize = 9; + RectangleEraserTabButtonText.Margin = new Thickness(2, 1, 0, 0); + RectangleEraserTabButtonIndicator.Visibility = Visibility.Collapsed; + } else + { + RectangleEraserTabButton.Background = new SolidColorBrush(Color.FromArgb(85, 59, 130, 246)); + RectangleEraserTabButton.Opacity = 1; + RectangleEraserTabButtonText.FontWeight = FontWeights.Bold; + RectangleEraserTabButtonText.Margin = new Thickness(2, 0.5, 0, 0); + RectangleEraserTabButtonText.FontSize = 9.5; + RectangleEraserTabButtonIndicator.Visibility = Visibility.Visible; + CircleEraserTabButton.Background = new SolidColorBrush(Colors.Transparent); + CircleEraserTabButton.Opacity = 0.75; + CircleEraserTabButtonText.FontWeight = FontWeights.Normal; + CircleEraserTabButtonText.FontSize = 9; + CircleEraserTabButtonText.Margin = new Thickness(2, 1, 0, 0); + CircleEraserTabButtonIndicator.Visibility = Visibility.Collapsed; + } + } + private void SymbolIconRandOne_MouseUp(object sender, MouseButtonEventArgs e) { if (lastBorderMouseDownObject != sender) return; @@ -831,22 +869,46 @@ namespace Ink_Canvas { FloatingBarIcons_MouseUp_New(sender); forceEraser = true; forcePointEraser = true; - double k = 1; - switch (Settings.Canvas.EraserSize) { - case 0: - k = 0.5; - break; - case 1: - k = 0.8; - break; - case 3: - k = 1.25; - break; - case 4: - k = 1.8; - break; + if (Settings.Canvas.EraserShapeType == 0) + { + double k = 1; + switch (Settings.Canvas.EraserSize) + { + case 0: + k = 0.5; + break; + case 1: + k = 0.8; + break; + case 3: + k = 1.25; + break; + case 4: + k = 1.8; + break; + } + inkCanvas.EraserShape = new EllipseStylusShape(k * 90, k * 90); + } + else if (Settings.Canvas.EraserShapeType == 1) + { + double k = 1; + switch (Settings.Canvas.EraserSize) + { + case 0: + k = 0.7; + break; + case 1: + k = 0.9; + break; + case 3: + k = 1.2; + break; + case 4: + k = 1.6; + break; + } + inkCanvas.EraserShape = new RectangleStylusShape(k * 90 * 0.6, k * 90); } - inkCanvas.EraserShape = new EllipseStylusShape(k * 90, k * 90); if (inkCanvas.EditingMode == InkCanvasEditingMode.EraseByPoint) { @@ -1190,12 +1252,17 @@ namespace Ink_Canvas { inkCanvas.Children.Clear(); CancelSingleFingerDragMode(); + + if (Settings.Canvas.ClearCanvasAndClearTimeMachine) + { + timeMachine.ClearStrokeHistory(); + } } - bool lastIsInMultiTouchMode = false; - private void CancelSingleFingerDragMode() - { - if (ToggleSwitchDrawShapeBorderAutoHide.IsOn) { + bool lastIsInMultiTouchMode = false; + private void CancelSingleFingerDragMode() + { + if (ToggleSwitchDrawShapeBorderAutoHide.IsOn) { CollapseBorderDrawShape(); } @@ -1205,7 +1272,7 @@ namespace Ink_Canvas { BtnFingerDragMode_Click(BtnFingerDragMode, null); } isLongPressSelected = false; - } + } private void BtnHideControl_Click(object sender, RoutedEventArgs e) { if (StackPanelControl.Visibility == Visibility.Visible) { @@ -1423,341 +1490,5 @@ namespace Ink_Canvas { #endregion - #region Right Side Panel (Buttons - Color) - - int inkColor = 1; - - private void ColorSwitchCheck() { - HideSubPanels("color"); - if (Main_Grid.Background == Brushes.Transparent) { - if (currentMode == 1) { - currentMode = 0; - GridBackgroundCover.Visibility = Visibility.Collapsed; - AnimationsHelper.HideWithSlideAndFade(BlackboardLeftSide); - AnimationsHelper.HideWithSlideAndFade(BlackboardCenterSide); - AnimationsHelper.HideWithSlideAndFade(BlackboardRightSide); - } - BtnHideInkCanvas_Click(BtnHideInkCanvas, null); - } - - StrokeCollection strokes = inkCanvas.GetSelectedStrokes(); - if (strokes.Count != 0) { - foreach (Stroke stroke in strokes) { - try { - stroke.DrawingAttributes.Color = inkCanvas.DefaultDrawingAttributes.Color; - } catch { } - } - } else { - inkCanvas.IsManipulationEnabled = true; - drawingShapeMode = 0; - inkCanvas.EditingMode = InkCanvasEditingMode.Ink; - CancelSingleFingerDragMode(); - forceEraser = false; - CheckColorTheme(); - } - - isLongPressSelected = false; - } - - bool isUselightThemeColor = false, isDesktopUselightThemeColor = false; - int lastDesktopInkColor = 1, lastBoardInkColor = 5; - - private void CheckColorTheme(bool changeColorTheme = false) { - if (changeColorTheme) { - if (currentMode != 0) { - if (Settings.Canvas.UsingWhiteboard) { - GridBackgroundCover.Background = new SolidColorBrush(Color.FromRgb(234,235,237)); - WaterMarkTime.Foreground= new SolidColorBrush(Color.FromRgb(22, 41, 36)); - WaterMarkDate.Foreground= new SolidColorBrush(Color.FromRgb(22, 41, 36)); - BlackBoardWaterMark.Foreground = new SolidColorBrush(Color.FromRgb(22, 41, 36)); - isUselightThemeColor = false; - } else { - GridBackgroundCover.Background = new SolidColorBrush(Color.FromRgb(22,41,36)); - WaterMarkTime.Foreground = new SolidColorBrush(Color.FromRgb(234, 235, 237)); - WaterMarkDate.Foreground = new SolidColorBrush(Color.FromRgb(234, 235, 237)); - BlackBoardWaterMark.Foreground = new SolidColorBrush(Color.FromRgb(234, 235, 237)); - isUselightThemeColor = true; - } - } - } - - if (currentMode == 0) { - isUselightThemeColor = isDesktopUselightThemeColor; - inkColor = lastDesktopInkColor; - } else { - inkColor = lastBoardInkColor; - } - - double alpha = inkCanvas.DefaultDrawingAttributes.Color.A; - - if (inkColor == 0) { // Black - inkCanvas.DefaultDrawingAttributes.Color = Color.FromArgb((byte)alpha,0,0,0); - } else if (inkColor == 5) { // White - inkCanvas.DefaultDrawingAttributes.Color = Color.FromArgb((byte)alpha, 255, 255, 255); - } else if (isUselightThemeColor) { - if (inkColor == 1) { // Red - inkCanvas.DefaultDrawingAttributes.Color = Color.FromArgb((byte)alpha, 239,68,68); - } else if (inkColor == 2) { // Green - inkCanvas.DefaultDrawingAttributes.Color = Color.FromArgb((byte)alpha, 34,197,94); - } else if (inkColor == 3) { // Blue - inkCanvas.DefaultDrawingAttributes.Color = Color.FromArgb((byte)alpha, 59, 130, 246); - } else if (inkColor == 4) { // Yellow - inkCanvas.DefaultDrawingAttributes.Color = Color.FromArgb((byte)alpha, 250, 204, 21); - } else if (inkColor == 6) { // Pink - inkCanvas.DefaultDrawingAttributes.Color = Color.FromArgb((byte)alpha, 236, 72, 153); - } else if (inkColor == 7) { // Teal (亮色) - inkCanvas.DefaultDrawingAttributes.Color = Color.FromArgb((byte)alpha, 20, 184, 166); - } else if (inkColor == 8) { // Orange (亮色) - inkCanvas.DefaultDrawingAttributes.Color = Color.FromArgb((byte)alpha, 249, 115, 22); - } - } else { - if (inkColor == 1) { // Red - inkCanvas.DefaultDrawingAttributes.Color = Color.FromArgb((byte)alpha, 220, 38, 38); - } else if (inkColor == 2) { // Green - inkCanvas.DefaultDrawingAttributes.Color = Color.FromArgb((byte)alpha, 22, 163, 74); - } else if (inkColor == 3) { // Blue - inkCanvas.DefaultDrawingAttributes.Color = Color.FromArgb((byte)alpha, 37, 99, 235); - } else if (inkColor == 4) { // Yellow - inkCanvas.DefaultDrawingAttributes.Color = Color.FromArgb((byte)alpha, 234, 179, 8); - } else if (inkColor == 6) { // Pink ( Purple ) - inkCanvas.DefaultDrawingAttributes.Color = Color.FromArgb((byte)alpha, 147, 51, 234); - } else if (inkColor == 7) { // Teal (暗色) - inkCanvas.DefaultDrawingAttributes.Color = Color.FromArgb((byte)alpha, 13, 148, 136); - } else if (inkColor == 8) { // Orange (暗色) - inkCanvas.DefaultDrawingAttributes.Color = Color.FromArgb((byte)alpha, 234, 88, 12); - } - } - if (isUselightThemeColor) { // 亮系 - // 亮色的红色 - BorderPenColorRed.Background = new SolidColorBrush(Color.FromRgb(239, 68, 68)); - BoardBorderPenColorRed.Background = new SolidColorBrush(Color.FromRgb(239, 68, 68)); - // 亮色的绿色 - BorderPenColorGreen.Background = new SolidColorBrush(Color.FromRgb(34, 197, 94)); - BoardBorderPenColorGreen.Background = new SolidColorBrush(Color.FromRgb(34, 197, 94)); - // 亮色的蓝色 - BorderPenColorBlue.Background = new SolidColorBrush(Color.FromRgb(59, 130, 246)); - BoardBorderPenColorBlue.Background = new SolidColorBrush(Color.FromRgb(59, 130, 246)); - // 亮色的黄色 - BorderPenColorYellow.Background = new SolidColorBrush(Color.FromRgb(250, 204, 21)); - BoardBorderPenColorYellow.Background = new SolidColorBrush(Color.FromRgb(250, 204, 21)); - // 亮色的粉色 - BorderPenColorPink.Background = new SolidColorBrush(Color.FromRgb(236, 72, 153)); - BoardBorderPenColorPink.Background = new SolidColorBrush(Color.FromRgb(236, 72, 153)); - // 亮色的Teal - BorderPenColorTeal.Background = new SolidColorBrush(Color.FromRgb(20, 184, 166)); - // 亮色的Orange - BorderPenColorOrange.Background = new SolidColorBrush(Color.FromRgb(249, 115, 22)); - - BitmapImage newImageSource = new BitmapImage(); - newImageSource.BeginInit(); - newImageSource.UriSource = new Uri("/Resources/Icons-Fluent/ic_fluent_weather_moon_24_regular.png", UriKind.RelativeOrAbsolute); - newImageSource.EndInit(); - ColorThemeSwitchIcon.Source = newImageSource; - BoardColorThemeSwitchIcon.Source = newImageSource; - - ColorThemeSwitchTextBlock.Text = "暗系"; - BoardColorThemeSwitchTextBlock.Text = "暗系"; - } else { // 暗系 - // 暗色的红色 - BorderPenColorRed.Background = new SolidColorBrush(Color.FromRgb(220, 38, 38)); - BoardBorderPenColorRed.Background = new SolidColorBrush(Color.FromRgb(220, 38, 38)); - // 暗色的绿色 - BorderPenColorGreen.Background = new SolidColorBrush(Color.FromRgb(22, 163, 74)); - BoardBorderPenColorGreen.Background = new SolidColorBrush(Color.FromRgb(22, 163, 74)); - // 暗色的蓝色 - BorderPenColorBlue.Background = new SolidColorBrush(Color.FromRgb(37, 99, 235)); - BoardBorderPenColorBlue.Background = new SolidColorBrush(Color.FromRgb(37, 99, 235)); - // 暗色的黄色 - BorderPenColorYellow.Background = new SolidColorBrush(Color.FromRgb(234, 179, 8)); - BoardBorderPenColorYellow.Background = new SolidColorBrush(Color.FromRgb(234, 179, 8)); - // 暗色的紫色对应亮色的粉色 - BorderPenColorPink.Background = new SolidColorBrush(Color.FromRgb(147, 51, 234)); - BoardBorderPenColorPink.Background = new SolidColorBrush(Color.FromRgb(147, 51, 234)); - // 暗色的Teal - BorderPenColorTeal.Background = new SolidColorBrush(Color.FromRgb(13, 148, 136)); - // 暗色的Orange - BorderPenColorOrange.Background = new SolidColorBrush(Color.FromRgb(234, 88, 12)); - - BitmapImage newImageSource = new BitmapImage(); - newImageSource.BeginInit(); - newImageSource.UriSource = new Uri("/Resources/Icons-Fluent/ic_fluent_weather_sunny_24_regular.png", UriKind.RelativeOrAbsolute); - newImageSource.EndInit(); - ColorThemeSwitchIcon.Source = newImageSource; - BoardColorThemeSwitchIcon.Source = newImageSource; - - ColorThemeSwitchTextBlock.Text = "亮系"; - BoardColorThemeSwitchTextBlock.Text = "亮系"; - } - - // 改变选中提示 - ViewboxBtnColorBlackContent.Visibility = Visibility.Collapsed; - ViewboxBtnColorBlueContent.Visibility = Visibility.Collapsed; - ViewboxBtnColorGreenContent.Visibility = Visibility.Collapsed; - ViewboxBtnColorRedContent.Visibility = Visibility.Collapsed; - ViewboxBtnColorYellowContent.Visibility = Visibility.Collapsed; - ViewboxBtnColorWhiteContent.Visibility = Visibility.Collapsed; - ViewboxBtnColorPinkContent.Visibility = Visibility.Collapsed; - ViewboxBtnColorTealContent.Visibility = Visibility.Collapsed; - ViewboxBtnColorOrangeContent.Visibility = Visibility.Collapsed; - BoardViewboxBtnColorBlackContent.Visibility = Visibility.Collapsed; - BoardViewboxBtnColorBlueContent.Visibility = Visibility.Collapsed; - BoardViewboxBtnColorGreenContent.Visibility = Visibility.Collapsed; - BoardViewboxBtnColorRedContent.Visibility = Visibility.Collapsed; - BoardViewboxBtnColorYellowContent.Visibility = Visibility.Collapsed; - BoardViewboxBtnColorWhiteContent.Visibility = Visibility.Collapsed; - BoardViewboxBtnColorPinkContent.Visibility = Visibility.Collapsed; - switch (inkColor) { - case 0: - ViewboxBtnColorBlackContent.Visibility = Visibility.Visible; - BoardViewboxBtnColorBlackContent.Visibility = Visibility.Visible; - break; - case 1: - ViewboxBtnColorRedContent.Visibility = Visibility.Visible; - BoardViewboxBtnColorRedContent.Visibility = Visibility.Visible; - break; - case 2: - ViewboxBtnColorGreenContent.Visibility = Visibility.Visible; - BoardViewboxBtnColorGreenContent.Visibility = Visibility.Visible; - break; - case 3: - ViewboxBtnColorBlueContent.Visibility = Visibility.Visible; - BoardViewboxBtnColorBlueContent.Visibility = Visibility.Visible; - break; - case 4: - ViewboxBtnColorYellowContent.Visibility = Visibility.Visible; - BoardViewboxBtnColorYellowContent.Visibility = Visibility.Visible; - break; - case 5: - ViewboxBtnColorWhiteContent.Visibility = Visibility.Visible; - BoardViewboxBtnColorWhiteContent.Visibility = Visibility.Visible; - break; - case 6: - ViewboxBtnColorPinkContent.Visibility = Visibility.Visible; - BoardViewboxBtnColorPinkContent.Visibility = Visibility.Visible; - break; - case 7: - ViewboxBtnColorTealContent.Visibility = Visibility.Visible; - break; - case 8: - ViewboxBtnColorOrangeContent.Visibility = Visibility.Visible; - break; - } - } - - private void BtnColorBlack_Click(object sender, RoutedEventArgs e) { - if (currentMode == 0) { - lastDesktopInkColor = 0; - } else { - lastBoardInkColor = 0; - } - forceEraser = false; - ColorSwitchCheck(); - } - - private void BtnColorRed_Click(object sender, RoutedEventArgs e) { - if (currentMode == 0) { - lastDesktopInkColor = 1; - } else { - lastBoardInkColor = 1; - } - forceEraser = false; - ColorSwitchCheck(); - } - - private void BtnColorGreen_Click(object sender, RoutedEventArgs e) { - if (currentMode == 0) { - lastDesktopInkColor = 2; - } else { - lastBoardInkColor = 2; - } - forceEraser = false; - ColorSwitchCheck(); - } - - private void BtnColorBlue_Click(object sender, RoutedEventArgs e) { - if (currentMode == 0) { - lastDesktopInkColor = 3; - } else { - lastBoardInkColor = 3; - } - forceEraser = false; - ColorSwitchCheck(); - } - - private void BtnColorYellow_Click(object sender, RoutedEventArgs e) { - if (currentMode == 0) { - lastDesktopInkColor = 4; - } else { - lastBoardInkColor = 4; - } - forceEraser = false; - ColorSwitchCheck(); - } - - private void BtnColorWhite_Click(object sender, RoutedEventArgs e) { - if (currentMode == 0) { - lastDesktopInkColor = 5; - } else { - lastBoardInkColor = 5; - } - forceEraser = false; - ColorSwitchCheck(); - } - - private void BtnColorPink_Click(object sender, RoutedEventArgs e) { - if (currentMode == 0) { - lastDesktopInkColor = 6; - } else { - lastBoardInkColor = 6; - } - forceEraser = false; - ColorSwitchCheck(); - } - - private void BtnColorOrange_Click(object sender, RoutedEventArgs e) - { - if (currentMode == 0) - { - lastDesktopInkColor = 8; - } - else - { - lastBoardInkColor = 8; - } - forceEraser = false; - ColorSwitchCheck(); - } - - private void BtnColorTeal_Click(object sender, RoutedEventArgs e) - { - if (currentMode == 0) - { - lastDesktopInkColor = 7; - } - else - { - lastBoardInkColor = 7; - } - forceEraser = false; - ColorSwitchCheck(); - } - - private Color StringToColor(string colorStr) { - Byte[] argb = new Byte[4]; - for (int i = 0; i < 4; i++) { - char[] charArray = colorStr.Substring(i * 2 + 1, 2).ToCharArray(); - Byte b1 = toByte(charArray[0]); - Byte b2 = toByte(charArray[1]); - argb[i] = (Byte)(b2 | (b1 << 4)); - } - return Color.FromArgb(argb[0], argb[1], argb[2], argb[3]);//#FFFFFFFF - } - - private static byte toByte(char c) { - byte b = (byte)"0123456789ABCDEF".IndexOf(c); - return b; - } - - #endregion } } \ No newline at end of file diff --git a/Ink Canvas/MainWindow_cs/MW_Settings.cs b/Ink Canvas/MainWindow_cs/MW_Settings.cs index ed0b830..928a4fd 100644 --- a/Ink Canvas/MainWindow_cs/MW_Settings.cs +++ b/Ink Canvas/MainWindow_cs/MW_Settings.cs @@ -198,6 +198,58 @@ namespace Ink_Canvas { { if (!isLoaded) return; Settings.Canvas.EraserSize = ComboBoxEraserSizeFloatingBar.SelectedIndex; + ComboBoxEraserSize.SelectedIndex = ComboBoxEraserSizeFloatingBar.SelectedIndex; + if (Settings.Canvas.EraserShapeType == 0) + { + double k = 1; + switch (ComboBoxEraserSizeFloatingBar.SelectedIndex) + { + case 0: + k = 0.5; + break; + case 1: + k = 0.8; + break; + case 3: + k = 1.25; + break; + case 4: + k = 1.8; + break; + } + inkCanvas.EraserShape = new EllipseStylusShape(k * 90, k * 90); + } + else if (Settings.Canvas.EraserShapeType == 1) + { + double k = 1; + switch (ComboBoxEraserSizeFloatingBar.SelectedIndex) + { + case 0: + k = 0.7; + break; + case 1: + k = 0.9; + break; + case 3: + k = 1.2; + break; + case 4: + k = 1.6; + break; + } + inkCanvas.EraserShape = new RectangleStylusShape(k * 90 * 0.6, k * 90); + } + inkCanvas.EditingMode = InkCanvasEditingMode.Ink; + inkCanvas.EditingMode = InkCanvasEditingMode.EraseByPoint; + SaveSettingsToFile(); + } + + private void SwitchToCircleEraser(object sender, MouseButtonEventArgs e) + { + if (!isLoaded) return; + Settings.Canvas.EraserShapeType = 0; + SaveSettingsToFile(); + CheckEraserTypeTab(); double k = 1; switch (ComboBoxEraserSizeFloatingBar.SelectedIndex) { @@ -215,10 +267,35 @@ namespace Ink_Canvas { break; } inkCanvas.EraserShape = new EllipseStylusShape(k * 90, k * 90); - // inkCanvas.EraserShape = new RectangleStylusShape(k * 90, k * 90); inkCanvas.EditingMode = InkCanvasEditingMode.Ink; inkCanvas.EditingMode = InkCanvasEditingMode.EraseByPoint; + } + + private void SwitchToRectangleEraser(object sender, MouseButtonEventArgs e) + { + if (!isLoaded) return; + Settings.Canvas.EraserShapeType = 1; SaveSettingsToFile(); + CheckEraserTypeTab(); + double k = 1; + switch (ComboBoxEraserSizeFloatingBar.SelectedIndex) + { + case 0: + k = 0.7; + break; + case 1: + k = 0.9; + break; + case 3: + k = 1.2; + break; + case 4: + k = 1.6; + break; + } + inkCanvas.EraserShape = new RectangleStylusShape(k * 90 * 0.6, k * 90); + inkCanvas.EditingMode = InkCanvasEditingMode.Ink; + inkCanvas.EditingMode = InkCanvasEditingMode.EraseByPoint; } @@ -232,6 +309,17 @@ namespace Ink_Canvas { SaveSettingsToFile(); } + private void HighlighterWidthSlider_ValueChanged(object sender, RoutedPropertyChangedEventArgs e) + { + if (!isLoaded) return; + // if (sender == BoardInkWidthSlider) InkWidthSlider.Value = ((Slider)sender).Value; + // if (sender == InkWidthSlider) BoardInkWidthSlider.Value = ((Slider)sender).Value; + drawingAttributes.Height = ((Slider)sender).Value; + drawingAttributes.Width = ((Slider)sender).Value / 2; + Settings.Canvas.HighlighterWidth = ((Slider)sender).Value; + SaveSettingsToFile(); + } + private void InkAlphaSlider_ValueChanged(object sender, RoutedPropertyChangedEventArgs e) { if (!isLoaded) return; @@ -397,6 +485,13 @@ namespace Ink_Canvas { SaveSettingsToFile(); } + private void ToggleSwitchClearCanvasAndClearTimeMachine_Toggled(object sender, RoutedEventArgs e) + { + if (!isLoaded) return; + Settings.Canvas.ClearCanvasAndClearTimeMachine = ToggleSwitchClearCanvasAndClearTimeMachine.IsOn; + SaveSettingsToFile(); + } + private void ToggleSwitchFitToCurve_Toggled(object sender, RoutedEventArgs e) { if (!isLoaded) return; @@ -642,9 +737,12 @@ namespace Ink_Canvas { Settings.Canvas.InkWidth = 2.5; Settings.Canvas.IsShowCursor = false; Settings.Canvas.InkStyle = 0; + Settings.Canvas.HighlighterWidth = 20; Settings.Canvas.EraserSize = 1; Settings.Canvas.EraserType = 0; + Settings.Canvas.EraserShapeType = 1; Settings.Canvas.HideStrokeWhenSelecting = false; + Settings.Canvas.ClearCanvasAndClearTimeMachine = false; Settings.Canvas.FitToCurve = true; Settings.Canvas.UsingWhiteboard = false; Settings.Canvas.HyperbolaAsymptoteOption = 0; diff --git a/Ink Canvas/MainWindow_cs/MW_SettingsToLoad.cs b/Ink Canvas/MainWindow_cs/MW_SettingsToLoad.cs index 2d5e04d..504a1c7 100644 --- a/Ink Canvas/MainWindow_cs/MW_SettingsToLoad.cs +++ b/Ink Canvas/MainWindow_cs/MW_SettingsToLoad.cs @@ -3,6 +3,8 @@ using Newtonsoft.Json; using System; using System.Reflection; using System.Windows; +using System.Windows.Controls; +using System.Windows.Ink; using System.Windows.Media; using File = System.IO.File; @@ -55,7 +57,7 @@ namespace Ink_Canvas { ToggleSwitchIsAutoUpdate.IsOn = true; AutoUpdate(); } - ToggleSwitchIsAutoUpdateWithSilence.Visibility = Settings.Startup.IsAutoUpdate ? Visibility.Visible : Visibility.Collapsed; + // ToggleSwitchIsAutoUpdateWithSilence.Visibility = Settings.Startup.IsAutoUpdate ? Visibility.Visible : Visibility.Collapsed; if (Settings.Startup.IsAutoUpdateWithSilence) { ToggleSwitchIsAutoUpdateWithSilence.IsOn = true; } @@ -290,6 +292,7 @@ namespace Ink_Canvas { drawingAttributes.Width = Settings.Canvas.InkWidth; InkWidthSlider.Value = Settings.Canvas.InkWidth * 2; + HighlighterWidthSlider.Value = Settings.Canvas.HighlighterWidth; ComboBoxHyperbolaAsymptoteOption.SelectedIndex = (int)Settings.Canvas.HyperbolaAsymptoteOption; @@ -313,6 +316,58 @@ namespace Ink_Canvas { ComboBoxEraserSize.SelectedIndex = Settings.Canvas.EraserSize; ComboBoxEraserSizeFloatingBar.SelectedIndex = Settings.Canvas.EraserSize; + if (Settings.Canvas.ClearCanvasAndClearTimeMachine==true) { + ToggleSwitchClearCanvasAndClearTimeMachine.IsOn = true; + } else + { + ToggleSwitchClearCanvasAndClearTimeMachine.IsOn = false; + } + + if (Settings.Canvas.EraserShapeType==0) + { + double k = 1; + switch (Settings.Canvas.EraserSize) + { + case 0: + k = 0.5; + break; + case 1: + k = 0.8; + break; + case 3: + k = 1.25; + break; + case 4: + k = 1.8; + break; + } + inkCanvas.EraserShape = new EllipseStylusShape(k * 90, k * 90); + inkCanvas.EditingMode = InkCanvasEditingMode.None; + + } else if (Settings.Canvas.EraserShapeType == 1) + { + double k = 1; + switch (Settings.Canvas.EraserSize) + { + case 0: + k = 0.7; + break; + case 1: + k = 0.9; + break; + case 3: + k = 1.2; + break; + case 4: + k = 1.6; + break; + } + inkCanvas.EraserShape = new RectangleStylusShape(k * 90 * 0.6, k * 90); + inkCanvas.EditingMode = InkCanvasEditingMode.None; + } + + CheckEraserTypeTab(); + if (Settings.Canvas.HideStrokeWhenSelecting) { ToggleSwitchHideStrokeWhenSelecting.IsOn = true; } else { diff --git a/Ink Canvas/MainWindow_cs/MW_SimulatePressure&InkToShape.cs b/Ink Canvas/MainWindow_cs/MW_SimulatePressure&InkToShape.cs index a5bd82f..777d196 100644 --- a/Ink Canvas/MainWindow_cs/MW_SimulatePressure&InkToShape.cs +++ b/Ink Canvas/MainWindow_cs/MW_SimulatePressure&InkToShape.cs @@ -311,68 +311,75 @@ namespace Ink_Canvas { switch (Settings.Canvas.InkStyle) { case 1: - try { - StylusPointCollection stylusPoints = new StylusPointCollection(); - int n = e.Stroke.StylusPoints.Count - 1; - string s = ""; + if (penType == 0) + { + try { + StylusPointCollection stylusPoints = new StylusPointCollection(); + int n = e.Stroke.StylusPoints.Count - 1; + string s = ""; - for (int i = 0; i <= n; i++) { - double speed = GetPointSpeed(e.Stroke.StylusPoints[Math.Max(i - 1, 0)].ToPoint(), e.Stroke.StylusPoints[i].ToPoint(), e.Stroke.StylusPoints[Math.Min(i + 1, n)].ToPoint()); - s += speed.ToString() + "\t"; - StylusPoint point = new StylusPoint(); - if (speed >= 0.25) { - point.PressureFactor = (float)(0.5 - 0.3 * (Math.Min(speed, 1.5) - 0.3) / 1.2); - } else if (speed >= 0.05) { - point.PressureFactor = (float)0.5; - } else { - point.PressureFactor = (float)(0.5 + 0.4 * (0.05 - speed) / 0.05); + for (int i = 0; i <= n; i++) { + double speed = GetPointSpeed(e.Stroke.StylusPoints[Math.Max(i - 1, 0)].ToPoint(), e.Stroke.StylusPoints[i].ToPoint(), e.Stroke.StylusPoints[Math.Min(i + 1, n)].ToPoint()); + s += speed.ToString() + "\t"; + StylusPoint point = new StylusPoint(); + if (speed >= 0.25) { + point.PressureFactor = (float)(0.5 - 0.3 * (Math.Min(speed, 1.5) - 0.3) / 1.2); + } else if (speed >= 0.05) { + point.PressureFactor = (float)0.5; + } else { + point.PressureFactor = (float)(0.5 + 0.4 * (0.05 - speed) / 0.05); + } + point.X = e.Stroke.StylusPoints[i].X; + point.Y = e.Stroke.StylusPoints[i].Y; + stylusPoints.Add(point); } - point.X = e.Stroke.StylusPoints[i].X; - point.Y = e.Stroke.StylusPoints[i].Y; - stylusPoints.Add(point); - } - e.Stroke.StylusPoints = stylusPoints; - } catch { + e.Stroke.StylusPoints = stylusPoints; + } catch { + } } + break; case 0: - try { - StylusPointCollection stylusPoints = new StylusPointCollection(); - int n = e.Stroke.StylusPoints.Count - 1; - double pressure = 0.1; - int x = 10; - if (n == 1) return; - if (n >= x) { - for (int i = 0; i < n - x; i++) { - StylusPoint point = new StylusPoint(); + if (penType==0) + { + try { + StylusPointCollection stylusPoints = new StylusPointCollection(); + int n = e.Stroke.StylusPoints.Count - 1; + double pressure = 0.1; + int x = 10; + if (n == 1) return; + if (n >= x) { + for (int i = 0; i < n - x; i++) { + StylusPoint point = new StylusPoint(); - point.PressureFactor = (float)0.5; - point.X = e.Stroke.StylusPoints[i].X; - point.Y = e.Stroke.StylusPoints[i].Y; - stylusPoints.Add(point); - } - for (int i = n - x; i <= n; i++) { - StylusPoint point = new StylusPoint(); + point.PressureFactor = (float)0.5; + point.X = e.Stroke.StylusPoints[i].X; + point.Y = e.Stroke.StylusPoints[i].Y; + stylusPoints.Add(point); + } + for (int i = n - x; i <= n; i++) { + StylusPoint point = new StylusPoint(); - point.PressureFactor = (float)((0.5 - pressure) * (n - i) / x + pressure); - point.X = e.Stroke.StylusPoints[i].X; - point.Y = e.Stroke.StylusPoints[i].Y; - stylusPoints.Add(point); - } - } else { - for (int i = 0; i <= n; i++) { - StylusPoint point = new StylusPoint(); + point.PressureFactor = (float)((0.5 - pressure) * (n - i) / x + pressure); + point.X = e.Stroke.StylusPoints[i].X; + point.Y = e.Stroke.StylusPoints[i].Y; + stylusPoints.Add(point); + } + } else { + for (int i = 0; i <= n; i++) { + StylusPoint point = new StylusPoint(); - point.PressureFactor = (float)(0.4 * (n - i) / n + pressure); - point.X = e.Stroke.StylusPoints[i].X; - point.Y = e.Stroke.StylusPoints[i].Y; - stylusPoints.Add(point); + point.PressureFactor = (float)(0.4 * (n - i) / n + pressure); + point.X = e.Stroke.StylusPoints[i].X; + point.Y = e.Stroke.StylusPoints[i].Y; + stylusPoints.Add(point); + } } + e.Stroke.StylusPoints = stylusPoints; + } catch { + } - e.Stroke.StylusPoints = stylusPoints; - } catch { - } break; case 3: //根据 mode == 0 改写,目前暂未完成 @@ -472,7 +479,7 @@ namespace Ink_Canvas { } public StylusPointCollection GenerateFakePressureTriangle(StylusPointCollection points) { - if (Settings.InkToShape.IsInkToShapeNoFakePressureTriangle == true) + if (Settings.InkToShape.IsInkToShapeNoFakePressureTriangle == true || penType==1) { var newPoint = new StylusPointCollection(); newPoint.Add(new StylusPoint(points[0].X, points[0].Y)); @@ -508,7 +515,7 @@ namespace Ink_Canvas { } public StylusPointCollection GenerateFakePressureRectangle(StylusPointCollection points) { - if (Settings.InkToShape.IsInkToShapeNoFakePressureRectangle == true) { + if (Settings.InkToShape.IsInkToShapeNoFakePressureRectangle == true || penType == 1) { return points; } else { diff --git a/Ink Canvas/Resources/Icons-png/transparent-grid.png b/Ink Canvas/Resources/Icons-png/transparent-grid.png new file mode 100644 index 0000000..21c0146 Binary files /dev/null and b/Ink Canvas/Resources/Icons-png/transparent-grid.png differ diff --git a/Ink Canvas/Resources/Settings.cs b/Ink Canvas/Resources/Settings.cs index e6f4efc..2abb028 100644 --- a/Ink Canvas/Resources/Settings.cs +++ b/Ink Canvas/Resources/Settings.cs @@ -28,6 +28,8 @@ namespace Ink_Canvas { [JsonProperty("inkWidth")] public double InkWidth { get; set; } = 2.5; + [JsonProperty("highlighterWidth")] + public double HighlighterWidth { get; set; } = 20; [JsonProperty("inkAlpha")] public double InkAlpha { get; set; } = 255; [JsonProperty("isShowCursor")] @@ -38,10 +40,14 @@ namespace Ink_Canvas public int EraserSize { get; set; } = 2; [JsonProperty("eraserType")] public int EraserType { get; set; } = 0; // 0 - 图标切换模式 1 - 面积擦 2 - 线条擦 + [JsonProperty("eraserShapeType")] + public int EraserShapeType { get; set; } = 0; // 0 - 圆形擦 1 - 黑板擦 [JsonProperty("hideStrokeWhenSelecting")] public bool HideStrokeWhenSelecting { get; set; } = true; [JsonProperty("fitToCurve")] public bool FitToCurve { get; set; } = true; + [JsonProperty("clearCanvasAndClearTimeMachine")] + public bool ClearCanvasAndClearTimeMachine { get; set; } = false; [JsonProperty("usingWhiteboard")] public bool UsingWhiteboard { get; set; } diff --git a/Ink Canvas/Resources/new-icons/highlighter-white.png b/Ink Canvas/Resources/new-icons/highlighter-white.png new file mode 100644 index 0000000..527592a Binary files /dev/null and b/Ink Canvas/Resources/new-icons/highlighter-white.png differ diff --git a/Ink Canvas/Resources/new-icons/osu-lazer-triangles.png b/Ink Canvas/Resources/new-icons/osu-lazer-triangles.png new file mode 100644 index 0000000..3b94d73 Binary files /dev/null and b/Ink Canvas/Resources/new-icons/osu-lazer-triangles.png differ diff --git a/Ink Canvas/Resources/new-icons/pen-white.png b/Ink Canvas/Resources/new-icons/pen-white.png new file mode 100644 index 0000000..0fda1ac Binary files /dev/null and b/Ink Canvas/Resources/new-icons/pen-white.png differ