diff --git a/Ink Canvas/MainWindow.xaml.cs b/Ink Canvas/MainWindow.xaml.cs index 1249e39..1346c01 100644 --- a/Ink Canvas/MainWindow.xaml.cs +++ b/Ink Canvas/MainWindow.xaml.cs @@ -13,15 +13,11 @@ using MessageBox = System.Windows.MessageBox; using System.Runtime.InteropServices; using System.Windows.Interop; -namespace Ink_Canvas -{ - public partial class MainWindow : Window - { - +namespace Ink_Canvas { + public partial class MainWindow : Window { #region Window Initialization - public MainWindow() - { + public MainWindow() { /* 处于画板模式内:Topmost == false / currentMode != 0 处于 PPT 放映内:BtnPPTSlideShowEnd.Visibility @@ -46,39 +42,36 @@ namespace Ink_Canvas ViewBoxStackPanelMain.Visibility = Visibility.Collapsed; ViewBoxStackPanelShapes.Visibility = Visibility.Collapsed; - ViewboxFloatingBar.Margin = new Thickness((SystemParameters.WorkArea.Width - 284) / 2, SystemParameters.WorkArea.Height - 60, -2000, -200); + ViewboxFloatingBar.Margin = new Thickness((SystemParameters.WorkArea.Width - 284) / 2, + SystemParameters.WorkArea.Height - 60, -2000, -200); ViewboxFloatingBarMarginAnimation(100, true); - try - { + try { if (File.Exists("debug.ini")) Label.Visibility = Visibility.Visible; } - catch (Exception ex) - { + catch (Exception ex) { LogHelper.WriteLogToFile(ex.ToString(), LogHelper.LogType.Error); } - try - { - if (File.Exists("Log.txt")) - { - FileInfo fileInfo = new FileInfo("Log.txt"); - long fileSizeInKB = fileInfo.Length / 1024; + + try { + if (File.Exists("Log.txt")) { + var fileInfo = new FileInfo("Log.txt"); + var fileSizeInKB = fileInfo.Length / 1024; if (fileSizeInKB > 512) - { - try - { + try { File.Delete("Log.txt"); - LogHelper.WriteLogToFile("The Log.txt file has been successfully deleted. Original file size: " + fileSizeInKB + " KB", LogHelper.LogType.Info); + LogHelper.WriteLogToFile( + "The Log.txt file has been successfully deleted. Original file size: " + fileSizeInKB + + " KB", LogHelper.LogType.Info); } - catch (Exception ex) - { - LogHelper.WriteLogToFile(ex + " | Can not delete the Log.txt file. File size: " + fileSizeInKB + " KB", LogHelper.LogType.Error); + catch (Exception ex) { + LogHelper.WriteLogToFile( + ex + " | Can not delete the Log.txt file. File size: " + fileSizeInKB + " KB", + LogHelper.LogType.Error); } - } } } - catch (Exception ex) - { + catch (Exception ex) { LogHelper.WriteLogToFile(ex.ToString(), LogHelper.LogType.Error); } @@ -88,12 +81,10 @@ namespace Ink_Canvas inkCanvas.Strokes.StrokesChanged += StrokesOnStrokesChanged; Microsoft.Win32.SystemEvents.UserPreferenceChanged += SystemEvents_UserPreferenceChanged; - try - { + try { if (File.Exists("SpecialVersion.ini")) SpecialVersionResetToSuggestion_Click(); } - catch (Exception ex) - { + catch (Exception ex) { LogHelper.WriteLogToFile(ex.ToString(), LogHelper.LogType.Error); } @@ -105,15 +96,13 @@ namespace Ink_Canvas #region Ink Canvas Functions - Color Ink_DefaultColor = Colors.Red; + private Color Ink_DefaultColor = Colors.Red; - DrawingAttributes drawingAttributes; - private void loadPenCanvas() - { - try - { + private DrawingAttributes drawingAttributes; - double alpha = Settings.Canvas.InkAlpha; + private void loadPenCanvas() { + try { + var alpha = Settings.Canvas.InkAlpha; Trace.WriteLine(alpha); //drawingAttributes = new DrawingAttributes(); drawingAttributes = inkCanvas.DefaultDrawingAttributes; @@ -129,51 +118,38 @@ namespace Ink_Canvas } catch { } } + //ApplicationGesture lastApplicationGesture = ApplicationGesture.AllGestures; - DateTime lastGestureTime = DateTime.Now; - private void InkCanvas_Gesture(object sender, InkCanvasGestureEventArgs e) - { - ReadOnlyCollection gestures = e.GetGestureRecognitionResults(); - try - { - foreach (GestureRecognitionResult gest in gestures) - { + private DateTime lastGestureTime = DateTime.Now; + + private void InkCanvas_Gesture(object sender, InkCanvasGestureEventArgs e) { + var gestures = e.GetGestureRecognitionResults(); + try { + foreach (var gest in gestures) //Trace.WriteLine(string.Format("Gesture: {0}, Confidence: {1}", gest.ApplicationGesture, gest.RecognitionConfidence)); - if (StackPanelPPTControls.Visibility == Visibility.Visible) - { + if (StackPanelPPTControls.Visibility == Visibility.Visible) { if (gest.ApplicationGesture == ApplicationGesture.Left) - { BtnPPTSlidesDown_Click(BtnPPTSlidesDown, null); - } if (gest.ApplicationGesture == ApplicationGesture.Right) - { BtnPPTSlidesUp_Click(BtnPPTSlidesUp, null); - } } - } } catch { } } - private void inkCanvas_EditingModeChanged(object sender, RoutedEventArgs e) - { + private void inkCanvas_EditingModeChanged(object sender, RoutedEventArgs e) { var inkCanvas1 = sender as InkCanvas; if (inkCanvas1 == null) return; - if (Settings.Canvas.IsShowCursor) - { + if (Settings.Canvas.IsShowCursor) { if (inkCanvas1.EditingMode == InkCanvasEditingMode.Ink || drawingShapeMode != 0) - { inkCanvas1.ForceCursor = true; - } else - { inkCanvas1.ForceCursor = false; - } } - else - { + else { inkCanvas1.ForceCursor = false; } + if (inkCanvas1.EditingMode == InkCanvasEditingMode.Ink) forcePointEraser = !forcePointEraser; } @@ -183,18 +159,14 @@ namespace Ink_Canvas public static Settings Settings = new Settings(); public static string settingsFileName = "Settings.json"; - bool isLoaded = false; + private bool isLoaded = false; - private void Window_Loaded(object sender, RoutedEventArgs e) - { + private void Window_Loaded(object sender, RoutedEventArgs e) { loadPenCanvas(); //加载设置 LoadSettings(true); // HasNewUpdateWindow hasNewUpdateWindow = new HasNewUpdateWindow(); - if (Environment.Is64BitProcess) - { - GroupBoxInkRecognition.Visibility = Visibility.Collapsed; - } + if (Environment.Is64BitProcess) GroupBoxInkRecognition.Visibility = Visibility.Collapsed; ThemeManager.Current.ApplicationTheme = ApplicationTheme.Light; SystemEvents_UserPreferenceChanged(null, null); @@ -204,65 +176,50 @@ namespace Ink_Canvas isLoaded = true; } - private void Window_Closing(object sender, System.ComponentModel.CancelEventArgs e) - { + private void Window_Closing(object sender, System.ComponentModel.CancelEventArgs e) { LogHelper.WriteLogToFile("Ink Canvas closing", LogHelper.LogType.Event); - if (!CloseIsFromButton && Settings.Advanced.IsSecondConfimeWhenShutdownApp) - { + if (!CloseIsFromButton && Settings.Advanced.IsSecondConfirmWhenShutdownApp) { e.Cancel = true; - if (MessageBox.Show("是否继续关闭 InkCanvasForClass,这将丢失当前未保存的墨迹。", "InkCanvasForClass", MessageBoxButton.OKCancel, MessageBoxImage.Warning) == MessageBoxResult.OK) - { - if (MessageBox.Show("真的狠心关闭 InkCanvasForClass吗?", "InkCanvasForClass", MessageBoxButton.OKCancel, MessageBoxImage.Error) == MessageBoxResult.OK) - { - if (MessageBox.Show("是否取消关闭 InkCanvasForClass?", "InkCanvasForClass", MessageBoxButton.OKCancel, MessageBoxImage.Error) != MessageBoxResult.OK) - { + if (MessageBox.Show("是否继续关闭 InkCanvasForClass,这将丢失当前未保存的墨迹。", "InkCanvasForClass", + MessageBoxButton.OKCancel, MessageBoxImage.Warning) == MessageBoxResult.OK) + if (MessageBox.Show("真的狠心关闭 InkCanvasForClass吗?", "InkCanvasForClass", MessageBoxButton.OKCancel, + MessageBoxImage.Error) == MessageBoxResult.OK) + if (MessageBox.Show("是否取消关闭 InkCanvasForClass?", "InkCanvasForClass", MessageBoxButton.OKCancel, + MessageBoxImage.Error) != MessageBoxResult.OK) e.Cancel = false; - } - } - } - } - if (e.Cancel) - { - LogHelper.WriteLogToFile("Ink Canvas closing cancelled", LogHelper.LogType.Event); } + + if (e.Cancel) LogHelper.WriteLogToFile("Ink Canvas closing cancelled", LogHelper.LogType.Event); } - private void Window_Closed(object sender, EventArgs e) - { + private void Window_Closed(object sender, EventArgs e) { LogHelper.WriteLogToFile("Ink Canvas closed", LogHelper.LogType.Event); } - private async void AutoUpdate() - { + private async void AutoUpdate() { AvailableLatestVersion = await AutoUpdateHelper.CheckForUpdates(); - if (AvailableLatestVersion != null) - { - bool IsDownloadSuccessful = false; + if (AvailableLatestVersion != null) { + var IsDownloadSuccessful = false; IsDownloadSuccessful = await AutoUpdateHelper.DownloadSetupFileAndSaveStatus(AvailableLatestVersion); - if (IsDownloadSuccessful) - { - if (!Settings.Startup.IsAutoUpdateWithSilence) - { - if (MessageBox.Show("InkCanvasForClass 新版本安装包已下载完成,是否立即更新?", "InkCanvasForClass New Version Available", MessageBoxButton.YesNo, MessageBoxImage.Question) == MessageBoxResult.Yes) - { - AutoUpdateHelper.InstallNewVersionApp(AvailableLatestVersion, false); - } + if (IsDownloadSuccessful) { + if (!Settings.Startup.IsAutoUpdateWithSilence) { + if (MessageBox.Show("InkCanvasForClass 新版本安装包已下载完成,是否立即更新?", + "InkCanvasForClass New Version Available", MessageBoxButton.YesNo, + MessageBoxImage.Question) == + MessageBoxResult.Yes) AutoUpdateHelper.InstallNewVersionApp(AvailableLatestVersion, false); } - else - { + else { timerCheckAutoUpdateWithSilence.Start(); } } } - else - { + else { AutoUpdateHelper.DeleteUpdatesFolder(); } } #endregion Definations and Loading - } } \ No newline at end of file diff --git a/Ink Canvas/MainWindow_cs/MW_AutoFold.cs b/Ink Canvas/MainWindow_cs/MW_AutoFold.cs index 3c2a52d..f06910e 100644 --- a/Ink Canvas/MainWindow_cs/MW_AutoFold.cs +++ b/Ink Canvas/MainWindow_cs/MW_AutoFold.cs @@ -7,23 +7,16 @@ using System.Windows.Media; using System.Windows.Media.Animation; using System.Windows.Media.Imaging; -namespace Ink_Canvas -{ - public partial class MainWindow : Window - { - bool isFloatingBarFolded = false, isFloatingBarChangingHideMode = false; +namespace Ink_Canvas { + public partial class MainWindow : Window { + private bool isFloatingBarFolded = false, isFloatingBarChangingHideMode = false; - private async void FoldFloatingBar_MouseUp(object sender, MouseButtonEventArgs e) - { + private async void FoldFloatingBar_MouseUp(object sender, MouseButtonEventArgs e) { // FloatingBarIcons_MouseUp_New(sender); if (sender == null) - { foldFloatingBarByUser = false; - } else - { foldFloatingBarByUser = true; - } unfoldFloatingBarByUser = false; if (isFloatingBarChangingHideMode) return; @@ -33,12 +26,8 @@ namespace Ink_Canvas isFloatingBarFolded = true; if (currentMode != 0) ImageBlackboard_MouseUp(null, null); if (StackPanelCanvasControls.Visibility == Visibility.Visible) - { if (foldFloatingBarByUser && inkCanvas.Strokes.Count > 2) - { ShowNotification("正在清空墨迹并收纳至侧边栏,可进入批注模式后通过【撤销】功能来恢复原先墨迹。"); - } - } lastBorderMouseDownObject = sender; CursorWithDelIcon_Click(sender, null); SidePannelMarginAnimation(-10); @@ -57,21 +46,17 @@ namespace Ink_Canvas isFloatingBarChangingHideMode = false; } - private async void LeftUnFoldButtonDisplayQuickPanel_MouseUp(object sender, MouseButtonEventArgs e) - { - if (Settings.Appearance.IsShowQuickPanel == true) - { + private async void LeftUnFoldButtonDisplayQuickPanel_MouseUp(object sender, MouseButtonEventArgs e) { + if (Settings.Appearance.IsShowQuickPanel == true) { HideRightQuickPanel(); LeftUnFoldButtonQuickPanel.Visibility = Visibility.Visible; - await Dispatcher.InvokeAsync(() => - { - ThicknessAnimation marginAnimation = new ThicknessAnimation - { + await Dispatcher.InvokeAsync(() => { + var marginAnimation = new ThicknessAnimation { Duration = TimeSpan.FromSeconds(0.1), From = new Thickness(-50, 0, 0, -150), To = new Thickness(-1, 0, 0, -150) }; - LeftUnFoldButtonQuickPanel.BeginAnimation(FrameworkElement.MarginProperty, marginAnimation); + LeftUnFoldButtonQuickPanel.BeginAnimation(MarginProperty, marginAnimation); }); await Task.Delay(100); @@ -79,26 +64,22 @@ namespace Ink_Canvas LeftUnFoldButtonQuickPanel.Margin = new Thickness(-1, 0, 0, -150); }); } - else - { + else { UnFoldFloatingBar_MouseUp(sender, e); } } - private async void RightUnFoldButtonDisplayQuickPanel_MouseUp(object sender, MouseButtonEventArgs e) - { - if (Settings.Appearance.IsShowQuickPanel == true) - { + + private async void RightUnFoldButtonDisplayQuickPanel_MouseUp(object sender, MouseButtonEventArgs e) { + if (Settings.Appearance.IsShowQuickPanel == true) { HideLeftQuickPanel(); RightUnFoldButtonQuickPanel.Visibility = Visibility.Visible; - await Dispatcher.InvokeAsync(() => - { - ThicknessAnimation marginAnimation = new ThicknessAnimation - { + await Dispatcher.InvokeAsync(() => { + var marginAnimation = new ThicknessAnimation { Duration = TimeSpan.FromSeconds(0.1), From = new Thickness(0, 0, -50, -150), To = new Thickness(0, 0, -1, -150) }; - RightUnFoldButtonQuickPanel.BeginAnimation(FrameworkElement.MarginProperty, marginAnimation); + RightUnFoldButtonQuickPanel.BeginAnimation(MarginProperty, marginAnimation); }); await Task.Delay(100); @@ -106,25 +87,20 @@ namespace Ink_Canvas RightUnFoldButtonQuickPanel.Margin = new Thickness(0, 0, -1, -150); }); } - else - { + else { UnFoldFloatingBar_MouseUp(sender, e); } } - private async void HideLeftQuickPanel() - { - if (LeftUnFoldButtonQuickPanel.Visibility == Visibility.Visible) - { - await Dispatcher.InvokeAsync(() => - { - ThicknessAnimation marginAnimation = new ThicknessAnimation - { + private async void HideLeftQuickPanel() { + if (LeftUnFoldButtonQuickPanel.Visibility == Visibility.Visible) { + await Dispatcher.InvokeAsync(() => { + var marginAnimation = new ThicknessAnimation { Duration = TimeSpan.FromSeconds(0.1), From = new Thickness(-1, 0, 0, -150), To = new Thickness(-50, 0, 0, -150) }; - LeftUnFoldButtonQuickPanel.BeginAnimation(FrameworkElement.MarginProperty, marginAnimation); + LeftUnFoldButtonQuickPanel.BeginAnimation(MarginProperty, marginAnimation); }); await Task.Delay(100); @@ -135,19 +111,15 @@ namespace Ink_Canvas } } - private async void HideRightQuickPanel() - { - if (RightUnFoldButtonQuickPanel.Visibility == Visibility.Visible) - { - await Dispatcher.InvokeAsync(() => - { - ThicknessAnimation marginAnimation = new ThicknessAnimation - { + private async void HideRightQuickPanel() { + if (RightUnFoldButtonQuickPanel.Visibility == Visibility.Visible) { + await Dispatcher.InvokeAsync(() => { + var marginAnimation = new ThicknessAnimation { Duration = TimeSpan.FromSeconds(0.1), From = new Thickness(0, 0, -1, -150), To = new Thickness(0, 0, -50, -150) }; - RightUnFoldButtonQuickPanel.BeginAnimation(FrameworkElement.MarginProperty, marginAnimation); + RightUnFoldButtonQuickPanel.BeginAnimation(MarginProperty, marginAnimation); }); await Task.Delay(100); @@ -158,27 +130,20 @@ namespace Ink_Canvas } } - private void HideQuickPanel_MouseUp(object sender, MouseButtonEventArgs e) - { + private void HideQuickPanel_MouseUp(object sender, MouseButtonEventArgs e) { HideLeftQuickPanel(); HideRightQuickPanel(); } - private async void UnFoldFloatingBar_MouseUp(object sender, MouseButtonEventArgs e) - { - await Dispatcher.InvokeAsync(() => - { + private async void UnFoldFloatingBar_MouseUp(object sender, MouseButtonEventArgs e) { + await Dispatcher.InvokeAsync(() => { LeftUnFoldButtonQuickPanel.Visibility = Visibility.Collapsed; RightUnFoldButtonQuickPanel.Visibility = Visibility.Collapsed; }); if (sender == null || StackPanelPPTControls.Visibility == Visibility.Visible) - { unfoldFloatingBarByUser = false; - } else - { unfoldFloatingBarByUser = true; - } foldFloatingBarByUser = false; if (isFloatingBarChangingHideMode) return; @@ -191,53 +156,47 @@ namespace Ink_Canvas await Task.Delay(0); await Dispatcher.InvokeAsync(() => { - if (StackPanelPPTControls.Visibility == Visibility.Visible) - { - if (Settings.PowerPointSettings.IsShowBottomPPTNavigationPanel && isDisplayingOrHidingBlackboard == false) - { + if (StackPanelPPTControls.Visibility == Visibility.Visible) { + if (Settings.PowerPointSettings.IsShowBottomPPTNavigationPanel && + isDisplayingOrHidingBlackboard == false) AnimationsHelper.ShowWithSlideFromBottomAndFade(BottomViewboxPPTSidesControl); - } - if (Settings.PowerPointSettings.IsShowSidePPTNavigationPanel && isDisplayingOrHidingBlackboard == false) - { + if (Settings.PowerPointSettings.IsShowSidePPTNavigationPanel && + isDisplayingOrHidingBlackboard == false) { AnimationsHelper.ShowWithScaleFromLeft(LeftSidePanelForPPTNavigation); AnimationsHelper.ShowWithScaleFromRight(RightSidePanelForPPTNavigation); } } + if (BtnPPTSlideShowEnd.Visibility == Visibility.Visible) - { ViewboxFloatingBarMarginAnimation(60); - } else - { ViewboxFloatingBarMarginAnimation(100, true); - } SidePannelMarginAnimation(-50, !unfoldFloatingBarByUser); }); isFloatingBarChangingHideMode = false; } - private async void SidePannelMarginAnimation(int MarginFromEdge, bool isNoAnimation = false) // Possible value: -50, -10 + private async void + SidePannelMarginAnimation(int MarginFromEdge, bool isNoAnimation = false) // Possible value: -50, -10 { await Dispatcher.InvokeAsync(() => { if (MarginFromEdge == -10) LeftSidePanel.Visibility = Visibility.Visible; - ThicknessAnimation LeftSidePanelmarginAnimation = new ThicknessAnimation - { + var LeftSidePanelmarginAnimation = new ThicknessAnimation { Duration = isNoAnimation == true ? TimeSpan.FromSeconds(0) : TimeSpan.FromSeconds(0.175), From = LeftSidePanel.Margin, To = new Thickness(MarginFromEdge, 0, 0, -150) }; LeftSidePanelmarginAnimation.EasingFunction = new CubicEase(); - ThicknessAnimation RightSidePanelmarginAnimation = new ThicknessAnimation - { + var RightSidePanelmarginAnimation = new ThicknessAnimation { Duration = isNoAnimation == true ? TimeSpan.FromSeconds(0) : TimeSpan.FromSeconds(0.175), From = RightSidePanel.Margin, To = new Thickness(0, 0, MarginFromEdge, -150) }; RightSidePanelmarginAnimation.EasingFunction = new CubicEase(); - LeftSidePanel.BeginAnimation(FrameworkElement.MarginProperty, LeftSidePanelmarginAnimation); - RightSidePanel.BeginAnimation(FrameworkElement.MarginProperty, RightSidePanelmarginAnimation); + LeftSidePanel.BeginAnimation(MarginProperty, LeftSidePanelmarginAnimation); + RightSidePanel.BeginAnimation(MarginProperty, RightSidePanelmarginAnimation); }); await Task.Delay(600); diff --git a/Ink Canvas/MainWindow_cs/MW_AutoStart.cs b/Ink Canvas/MainWindow_cs/MW_AutoStart.cs index 9ffd83c..b7887e5 100644 --- a/Ink Canvas/MainWindow_cs/MW_AutoStart.cs +++ b/Ink Canvas/MainWindow_cs/MW_AutoStart.cs @@ -6,13 +6,14 @@ namespace Ink_Canvas { public partial class MainWindow : Window { public static bool StartAutomaticallyCreate(string exeName) { try { - WshShell shell = new WshShell(); - IWshShortcut shortcut = (IWshShortcut)shell.CreateShortcut(Environment.GetFolderPath(Environment.SpecialFolder.Startup) + "\\" + exeName + ".lnk"); + var shell = new WshShell(); + var shortcut = (IWshShortcut)shell.CreateShortcut( + Environment.GetFolderPath(Environment.SpecialFolder.Startup) + "\\" + exeName + ".lnk"); //设置快捷方式的目标所在的位置(源程序完整路径) shortcut.TargetPath = System.Windows.Forms.Application.ExecutablePath; //应用程序的工作目录 //当用户没有指定一个具体的目录时,快捷方式的目标应用程序将使用该属性所指定的目录来装载或保存文件。 - shortcut.WorkingDirectory = System.Environment.CurrentDirectory; + shortcut.WorkingDirectory = Environment.CurrentDirectory; //目标应用程序窗口类型(1.Normal window普通窗口,3.Maximized最大化窗口,7.Minimized最小化) shortcut.WindowStyle = 1; //快捷方式的描述 @@ -21,15 +22,20 @@ namespace Ink_Canvas { //shortcut.Hotkey = "CTRL+ALT+D"; shortcut.Save(); return true; - } catch (Exception) { } + } + catch (Exception) { } + return false; } public static bool StartAutomaticallyDel(string exeName) { try { - System.IO.File.Delete(Environment.GetFolderPath(Environment.SpecialFolder.Startup) + "\\" + exeName + ".lnk"); + System.IO.File.Delete(Environment.GetFolderPath(Environment.SpecialFolder.Startup) + "\\" + exeName + + ".lnk"); return true; - } catch (Exception) { } + } + catch (Exception) { } + return false; } } diff --git a/Ink Canvas/MainWindow_cs/MW_AutoTheme.cs b/Ink Canvas/MainWindow_cs/MW_AutoTheme.cs index da4a146..7f0d715 100644 --- a/Ink Canvas/MainWindow_cs/MW_AutoTheme.cs +++ b/Ink Canvas/MainWindow_cs/MW_AutoTheme.cs @@ -7,35 +7,44 @@ using Application = System.Windows.Application; namespace Ink_Canvas { public partial class MainWindow : Window { - Color FloatBarForegroundColor = Color.FromRgb(102, 102, 102); + private Color FloatBarForegroundColor = Color.FromRgb(102, 102, 102); + private void SetTheme(string theme) { if (theme == "Light") { - ResourceDictionary rd1 = new ResourceDictionary() { Source = new Uri("Resources/Styles/Light.xaml", UriKind.Relative) }; + var rd1 = new ResourceDictionary() + { Source = new Uri("Resources/Styles/Light.xaml", UriKind.Relative) }; Application.Current.Resources.MergedDictionaries.Add(rd1); - ResourceDictionary rd2 = new ResourceDictionary() { Source = new Uri("Resources/DrawShapeImageDictionary.xaml", UriKind.Relative) }; + var rd2 = new ResourceDictionary() + { Source = new Uri("Resources/DrawShapeImageDictionary.xaml", UriKind.Relative) }; Application.Current.Resources.MergedDictionaries.Add(rd2); - ResourceDictionary rd3 = new ResourceDictionary() { Source = new Uri("Resources/SeewoImageDictionary.xaml", UriKind.Relative) }; + var rd3 = new ResourceDictionary() + { Source = new Uri("Resources/SeewoImageDictionary.xaml", UriKind.Relative) }; Application.Current.Resources.MergedDictionaries.Add(rd3); - ResourceDictionary rd4 = new ResourceDictionary() { Source = new Uri("Resources/IconImageDictionary.xaml", UriKind.Relative) }; + var rd4 = new ResourceDictionary() + { Source = new Uri("Resources/IconImageDictionary.xaml", UriKind.Relative) }; Application.Current.Resources.MergedDictionaries.Add(rd4); ThemeManager.SetRequestedTheme(window, ElementTheme.Light); FloatBarForegroundColor = (Color)Application.Current.FindResource("FloatBarForegroundColor"); - } else if (theme == "Dark") { - ResourceDictionary rd1 = new ResourceDictionary() { Source = new Uri("Resources/Styles/Dark.xaml", UriKind.Relative) }; + } + else if (theme == "Dark") { + var rd1 = new ResourceDictionary() { Source = new Uri("Resources/Styles/Dark.xaml", UriKind.Relative) }; Application.Current.Resources.MergedDictionaries.Add(rd1); - ResourceDictionary rd2 = new ResourceDictionary() { Source = new Uri("Resources/DrawShapeImageDictionary.xaml", UriKind.Relative) }; + var rd2 = new ResourceDictionary() + { Source = new Uri("Resources/DrawShapeImageDictionary.xaml", UriKind.Relative) }; Application.Current.Resources.MergedDictionaries.Add(rd2); - ResourceDictionary rd3 = new ResourceDictionary() { Source = new Uri("Resources/SeewoImageDictionary.xaml", UriKind.Relative) }; + var rd3 = new ResourceDictionary() + { Source = new Uri("Resources/SeewoImageDictionary.xaml", UriKind.Relative) }; Application.Current.Resources.MergedDictionaries.Add(rd3); - ResourceDictionary rd4 = new ResourceDictionary() { Source = new Uri("Resources/IconImageDictionary.xaml", UriKind.Relative) }; + var rd4 = new ResourceDictionary() + { Source = new Uri("Resources/IconImageDictionary.xaml", UriKind.Relative) }; Application.Current.Resources.MergedDictionaries.Add(rd4); ThemeManager.SetRequestedTheme(window, ElementTheme.Dark); @@ -44,7 +53,7 @@ namespace Ink_Canvas { } } - private void SystemEvents_UserPreferenceChanged(object sender, Microsoft.Win32.UserPreferenceChangedEventArgs e) { + private void SystemEvents_UserPreferenceChanged(object sender, UserPreferenceChangedEventArgs e) { switch (Settings.Appearance.Theme) { case 0: SetTheme("Light"); @@ -60,16 +69,17 @@ namespace Ink_Canvas { } private bool IsSystemThemeLight() { - bool light = false; + var light = false; try { - RegistryKey registryKey = Registry.CurrentUser; - RegistryKey themeKey = registryKey.OpenSubKey("software\\Microsoft\\Windows\\CurrentVersion\\Themes\\Personalize"); - int keyValue = 0; - if (themeKey != null) { - keyValue = (int)themeKey.GetValue("SystemUsesLightTheme"); - } + var registryKey = Registry.CurrentUser; + var themeKey = + registryKey.OpenSubKey("software\\Microsoft\\Windows\\CurrentVersion\\Themes\\Personalize"); + var keyValue = 0; + if (themeKey != null) keyValue = (int)themeKey.GetValue("SystemUsesLightTheme"); if (keyValue == 1) light = true; - } catch { } + } + catch { } + return light; } } diff --git a/Ink Canvas/MainWindow_cs/MW_BoardControls.cs b/Ink Canvas/MainWindow_cs/MW_BoardControls.cs index a9730c9..195daa9 100644 --- a/Ink Canvas/MainWindow_cs/MW_BoardControls.cs +++ b/Ink Canvas/MainWindow_cs/MW_BoardControls.cs @@ -6,21 +6,21 @@ using System.Windows.Media.Imaging; namespace Ink_Canvas { public partial class MainWindow : Window { - StrokeCollection[] strokeCollections = new StrokeCollection[101]; - bool[] whiteboadLastModeIsRedo = new bool[101]; - StrokeCollection lastTouchDownStrokeCollection = new StrokeCollection(); + private StrokeCollection[] strokeCollections = new StrokeCollection[101]; + private bool[] whiteboadLastModeIsRedo = new bool[101]; + private StrokeCollection lastTouchDownStrokeCollection = new StrokeCollection(); - int CurrentWhiteboardIndex = 1; - int WhiteboardTotalCount = 1; - TimeMachineHistory[][] TimeMachineHistories = new TimeMachineHistory[101][]; //最多99页,0用来存储非白板时的墨迹以便还原 + private int CurrentWhiteboardIndex = 1; + private int WhiteboardTotalCount = 1; + private TimeMachineHistory[][] TimeMachineHistories = new TimeMachineHistory[101][]; //最多99页,0用来存储非白板时的墨迹以便还原 private void SaveStrokes(bool isBackupMain = false) { if (isBackupMain) { var timeMachineHistory = timeMachine.ExportTimeMachineHistory(); TimeMachineHistories[0] = timeMachineHistory; timeMachine.ClearStrokeHistory(); - - } else { + } + else { var timeMachineHistory = timeMachine.ExportTimeMachineHistory(); TimeMachineHistories[CurrentWhiteboardIndex] = timeMachineHistory; timeMachine.ClearStrokeHistory(); @@ -28,7 +28,6 @@ namespace Ink_Canvas { } private void ClearStrokes(bool isErasedByCode) { - _currentCommitType = CommitReason.ClearingCanvas; if (isErasedByCode) _currentCommitType = CommitReason.CodeInput; inkCanvas.Strokes.Clear(); @@ -41,17 +40,17 @@ namespace Ink_Canvas { if (isBackupMain) { _currentCommitType = CommitReason.CodeInput; timeMachine.ImportTimeMachineHistory(TimeMachineHistories[0]); - foreach (var item in TimeMachineHistories[0]) { - ApplyHistoryToCanvas(item); - } - } else { + foreach (var item in TimeMachineHistories[0]) ApplyHistoryToCanvas(item); + } + else { _currentCommitType = CommitReason.CodeInput; timeMachine.ImportTimeMachineHistory(TimeMachineHistories[CurrentWhiteboardIndex]); - foreach (var item in TimeMachineHistories[CurrentWhiteboardIndex]) { - ApplyHistoryToCanvas(item); - } + foreach (var item in TimeMachineHistories[CurrentWhiteboardIndex]) ApplyHistoryToCanvas(item); } - } catch { } + } + catch { + // ignored + } } private void BtnWhiteBoardSwitchPrevious_Click(object sender, EventArgs e) { @@ -68,13 +67,13 @@ namespace Ink_Canvas { } private void BtnWhiteBoardSwitchNext_Click(object sender, EventArgs e) { - if (Settings.Automation.IsAutoSaveStrokesAtClear && inkCanvas.Strokes.Count > Settings.Automation.MinimumAutomationStrokeNumber) { - SaveScreenShot(true); - } + if (Settings.Automation.IsAutoSaveStrokesAtClear && + inkCanvas.Strokes.Count > Settings.Automation.MinimumAutomationStrokeNumber) SaveScreenShot(true); if (CurrentWhiteboardIndex >= WhiteboardTotalCount) { BtnWhiteBoardAdd_Click(sender, e); return; } + SaveStrokes(); @@ -88,20 +87,17 @@ namespace Ink_Canvas { private void BtnWhiteBoardAdd_Click(object sender, EventArgs e) { if (WhiteboardTotalCount >= 99) return; - if (Settings.Automation.IsAutoSaveStrokesAtClear && inkCanvas.Strokes.Count > Settings.Automation.MinimumAutomationStrokeNumber) { - SaveScreenShot(true); - } + if (Settings.Automation.IsAutoSaveStrokesAtClear && + inkCanvas.Strokes.Count > Settings.Automation.MinimumAutomationStrokeNumber) SaveScreenShot(true); SaveStrokes(); ClearStrokes(true); WhiteboardTotalCount++; CurrentWhiteboardIndex++; - if (CurrentWhiteboardIndex != WhiteboardTotalCount) { - for (int i = WhiteboardTotalCount; i > CurrentWhiteboardIndex; i--) { + if (CurrentWhiteboardIndex != WhiteboardTotalCount) + for (var i = WhiteboardTotalCount; i > CurrentWhiteboardIndex; i--) TimeMachineHistories[i] = TimeMachineHistories[i - 1]; - } - } UpdateIndexInfoDisplay(); @@ -111,13 +107,11 @@ namespace Ink_Canvas { private void BtnWhiteBoardDelete_Click(object sender, RoutedEventArgs e) { ClearStrokes(true); - if (CurrentWhiteboardIndex != WhiteboardTotalCount) { - for (int i = CurrentWhiteboardIndex; i <= WhiteboardTotalCount; i++) { + if (CurrentWhiteboardIndex != WhiteboardTotalCount) + for (var i = CurrentWhiteboardIndex; i <= WhiteboardTotalCount; i++) TimeMachineHistories[i] = TimeMachineHistories[i + 1]; - } - } else { + else CurrentWhiteboardIndex--; - } WhiteboardTotalCount--; @@ -129,21 +123,26 @@ namespace Ink_Canvas { } private void UpdateIndexInfoDisplay() { - TextBlockWhiteBoardIndexInfo.Text = string.Format("{0} / {1}", CurrentWhiteboardIndex, WhiteboardTotalCount); + TextBlockWhiteBoardIndexInfo.Text = + $"{CurrentWhiteboardIndex} / {WhiteboardTotalCount}"; if (CurrentWhiteboardIndex == WhiteboardTotalCount) { - BitmapImage newImageSource = new BitmapImage(); + var newImageSource = new BitmapImage(); newImageSource.BeginInit(); - newImageSource.UriSource = new Uri("/Resources/Icons-Fluent/ic_fluent_add_circle_24_regular.png", UriKind.RelativeOrAbsolute); + newImageSource.UriSource = new Uri("/Resources/Icons-Fluent/ic_fluent_add_circle_24_regular.png", + UriKind.RelativeOrAbsolute); newImageSource.EndInit(); BoardLeftPannelNextPage.Source = newImageSource; BoardRightPannelNextPage.Source = newImageSource; BoardRightPannelNextPageTextBlock.Text = "加页"; BoardLeftPannelNextPageTextBlock.Text = "加页"; - } else { - BitmapImage newImageSource = new BitmapImage(); + } + else { + var newImageSource = new BitmapImage(); newImageSource.BeginInit(); - newImageSource.UriSource = new Uri("/Resources/Icons-Fluent/ic_fluent_arrow_circle_right_24_regular.png", UriKind.RelativeOrAbsolute); + newImageSource.UriSource = + new Uri("/Resources/Icons-Fluent/ic_fluent_arrow_circle_right_24_regular.png", + UriKind.RelativeOrAbsolute); newImageSource.EndInit(); BoardLeftPannelNextPage.Source = newImageSource; BoardRightPannelNextPage.Source = newImageSource; @@ -151,23 +150,11 @@ namespace Ink_Canvas { BoardLeftPannelNextPageTextBlock.Text = "下一页"; } - if (CurrentWhiteboardIndex == 1) { - BtnWhiteBoardSwitchPrevious.IsEnabled = false; - } else { - BtnWhiteBoardSwitchPrevious.IsEnabled = true; - } + BtnWhiteBoardSwitchPrevious.IsEnabled = CurrentWhiteboardIndex != 1; - if (CurrentWhiteboardIndex == WhiteboardTotalCount) { - BtnWhiteBoardSwitchNext.IsEnabled = false; - } else { - BtnWhiteBoardSwitchNext.IsEnabled = true; - } + BtnWhiteBoardSwitchNext.IsEnabled = CurrentWhiteboardIndex != WhiteboardTotalCount; - if (WhiteboardTotalCount == 1) { - BtnWhiteBoardDelete.IsEnabled = false; - } else { - BtnWhiteBoardDelete.IsEnabled = true; - } + BtnWhiteBoardDelete.IsEnabled = WhiteboardTotalCount != 1; } } } \ No newline at end of file diff --git a/Ink Canvas/MainWindow_cs/MW_BoardIcons.cs b/Ink Canvas/MainWindow_cs/MW_BoardIcons.cs index 37bfaf5..2dc44a6 100644 --- a/Ink Canvas/MainWindow_cs/MW_BoardIcons.cs +++ b/Ink Canvas/MainWindow_cs/MW_BoardIcons.cs @@ -13,16 +13,19 @@ namespace Ink_Canvas { SaveSettingsToFile(); if (Settings.Canvas.UsingWhiteboard) { if (inkColor == 5) lastBoardInkColor = 0; - } else { + } + else { if (inkColor == 0) lastBoardInkColor = 5; } + CheckColorTheme(true); } private void BoardEraserIcon_Click(object sender, RoutedEventArgs e) { if (BoardEraser.Background.ToString() == "#FF679CF4") { AnimationsHelper.ShowWithSlideFromBottomAndFade(BoardDeleteIcon); - } else { + } + else { forceEraser = true; forcePointEraser = true; double k = 1; @@ -40,6 +43,7 @@ namespace Ink_Canvas { k = 1.8; break; } + inkCanvas.EraserShape = new EllipseStylusShape(k * 90, k * 90); inkCanvas.EditingMode = InkCanvasEditingMode.EraseByPoint; drawingShapeMode = 0; @@ -54,7 +58,8 @@ namespace Ink_Canvas { private void BoardEraserIconByStrokes_Click(object sender, RoutedEventArgs e) { if (BoardEraserByStrokes.Background.ToString() == "#FF679CF4") { AnimationsHelper.ShowWithSlideFromBottomAndFade(BoardDeleteIcon); - } else { + } + else { forceEraser = true; forcePointEraser = false; @@ -84,6 +89,5 @@ namespace Ink_Canvas { ImageBlackboard_MouseUp(null, null); Process.Start("https://www.desmos.com/calculator?lang=zh-CN"); } - } } \ No newline at end of file diff --git a/Ink Canvas/MainWindow_cs/MW_Colors.cs b/Ink Canvas/MainWindow_cs/MW_Colors.cs index 9208f6f..f168d43 100644 --- a/Ink Canvas/MainWindow_cs/MW_Colors.cs +++ b/Ink Canvas/MainWindow_cs/MW_Colors.cs @@ -12,42 +12,35 @@ using System.Windows; using System.Windows.Input; using System.Windows.Media.Animation; -namespace Ink_Canvas -{ - public partial class MainWindow : Window - { - int inkColor = 1; +namespace Ink_Canvas { + public partial class MainWindow : Window { + private int inkColor = 1; - private void ColorSwitchCheck() - { + private void ColorSwitchCheck() { HideSubPanels("color"); - if (GridTransparencyFakeBackground.Background == Brushes.Transparent) - { - if (currentMode == 1) - { + if (GridTransparencyFakeBackground.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 - { + var strokes = inkCanvas.GetSelectedStrokes(); + if (strokes.Count != 0) { + foreach (var stroke in strokes) + try { stroke.DrawingAttributes.Color = inkCanvas.DefaultDrawingAttributes.Color; } - catch { } - } + catch { + // ignored + } } - else - { + else { inkCanvas.IsManipulationEnabled = true; drawingShapeMode = 0; inkCanvas.EditingMode = InkCanvasEditingMode.Ink; @@ -59,27 +52,22 @@ namespace Ink_Canvas isLongPressSelected = false; } - bool isUselightThemeColor = false, isDesktopUselightThemeColor = false; - int penType = 0; // 0是签字笔,1是荧光笔 - int lastDesktopInkColor = 1, lastBoardInkColor = 5; - int highlighterColor = 102; + private bool isUselightThemeColor = false, isDesktopUselightThemeColor = false; + private int penType = 0; // 0是签字笔,1是荧光笔 + private int lastDesktopInkColor = 1, lastBoardInkColor = 5; + private int highlighterColor = 102; - private void CheckColorTheme(bool changeColorTheme = false) - { + private void CheckColorTheme(bool changeColorTheme = false) { if (changeColorTheme) - { - if (currentMode != 0) - { - if (Settings.Canvas.UsingWhiteboard) - { + 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 - { + 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)); @@ -87,138 +75,108 @@ namespace Ink_Canvas isUselightThemeColor = true; } } - } - if (currentMode == 0) - { + if (currentMode == 0) { isUselightThemeColor = isDesktopUselightThemeColor; inkColor = lastDesktopInkColor; } - else - { + else { inkColor = lastBoardInkColor; } double alpha = inkCanvas.DefaultDrawingAttributes.Color.A; - if (penType == 0) - { - if (inkColor == 0) - { // Black + if (penType == 0) { + if (inkColor == 0) { + // Black inkCanvas.DefaultDrawingAttributes.Color = Color.FromArgb((byte)alpha, 0, 0, 0); } - else if (inkColor == 5) - { // White + else if (inkColor == 5) { + // White inkCanvas.DefaultDrawingAttributes.Color = Color.FromArgb((byte)alpha, 255, 255, 255); } - else if (isUselightThemeColor) - { + else if (isUselightThemeColor) { if (inkColor == 1) - { // Red + // Red inkCanvas.DefaultDrawingAttributes.Color = Color.FromArgb((byte)alpha, 239, 68, 68); - } else if (inkColor == 2) - { // Green + // Green inkCanvas.DefaultDrawingAttributes.Color = Color.FromArgb((byte)alpha, 34, 197, 94); - } else if (inkColor == 3) - { // Blue + // Blue inkCanvas.DefaultDrawingAttributes.Color = Color.FromArgb((byte)alpha, 59, 130, 246); - } else if (inkColor == 4) - { // Yellow + // Yellow inkCanvas.DefaultDrawingAttributes.Color = Color.FromArgb((byte)alpha, 250, 204, 21); - } else if (inkColor == 6) - { // Pink + // Pink inkCanvas.DefaultDrawingAttributes.Color = Color.FromArgb((byte)alpha, 236, 72, 153); - } else if (inkColor == 7) - { // Teal (亮色) + // Teal (亮色) inkCanvas.DefaultDrawingAttributes.Color = Color.FromArgb((byte)alpha, 20, 184, 166); - } else if (inkColor == 8) - { // Orange (亮色) + // Orange (亮色) inkCanvas.DefaultDrawingAttributes.Color = Color.FromArgb((byte)alpha, 249, 115, 22); - } } - else - { + else { if (inkColor == 1) - { // Red + // Red inkCanvas.DefaultDrawingAttributes.Color = Color.FromArgb((byte)alpha, 220, 38, 38); - } else if (inkColor == 2) - { // Green + // Green inkCanvas.DefaultDrawingAttributes.Color = Color.FromArgb((byte)alpha, 22, 163, 74); - } else if (inkColor == 3) - { // Blue + // Blue inkCanvas.DefaultDrawingAttributes.Color = Color.FromArgb((byte)alpha, 37, 99, 235); - } else if (inkColor == 4) - { // Yellow + // Yellow inkCanvas.DefaultDrawingAttributes.Color = Color.FromArgb((byte)alpha, 234, 179, 8); - } else if (inkColor == 6) - { // Pink ( Purple ) + // Pink ( Purple ) inkCanvas.DefaultDrawingAttributes.Color = Color.FromArgb((byte)alpha, 147, 51, 234); - } else if (inkColor == 7) - { // Teal (暗色) + // Teal (暗色) inkCanvas.DefaultDrawingAttributes.Color = Color.FromArgb((byte)alpha, 13, 148, 136); - } else if (inkColor == 8) - { // Orange (暗色) + // Orange (暗色) inkCanvas.DefaultDrawingAttributes.Color = Color.FromArgb((byte)alpha, 234, 88, 12); - } } } - else if (penType == 1) - { + else if (penType == 1) { if (highlighterColor == 100) - { // Black + // Black inkCanvas.DefaultDrawingAttributes.Color = Color.FromRgb(0, 0, 0); - } else if (highlighterColor == 101) - { // White + // White inkCanvas.DefaultDrawingAttributes.Color = Color.FromRgb(250, 250, 250); - } else if (highlighterColor == 102) - { // Red + // Red inkCanvas.DefaultDrawingAttributes.Color = Color.FromRgb(239, 68, 68); - } else if (highlighterColor == 103) - { // Yellow + // Yellow inkCanvas.DefaultDrawingAttributes.Color = Color.FromRgb(253, 224, 71); - } else if (highlighterColor == 104) - { // Green + // Green inkCanvas.DefaultDrawingAttributes.Color = Color.FromRgb(74, 222, 128); - } else if (highlighterColor == 105) - { // Zinc + // Zinc inkCanvas.DefaultDrawingAttributes.Color = Color.FromRgb(113, 113, 122); - } else if (highlighterColor == 106) - { // Blue + // Blue inkCanvas.DefaultDrawingAttributes.Color = Color.FromRgb(59, 130, 246); - } else if (highlighterColor == 107) - { // Purple + // Purple inkCanvas.DefaultDrawingAttributes.Color = Color.FromRgb(168, 85, 247); - } else if (highlighterColor == 108) - { // teal + // teal inkCanvas.DefaultDrawingAttributes.Color = Color.FromRgb(45, 212, 191); - } else if (highlighterColor == 109) - { // Orange + // Orange inkCanvas.DefaultDrawingAttributes.Color = Color.FromRgb(249, 115, 22); - } } - if (isUselightThemeColor) - { // 亮系 + + if (isUselightThemeColor) { + // 亮系 // 亮色的红色 BorderPenColorRed.Background = new SolidColorBrush(Color.FromRgb(239, 68, 68)); BoardBorderPenColorRed.Background = new SolidColorBrush(Color.FromRgb(239, 68, 68)); @@ -239,9 +197,10 @@ namespace Ink_Canvas // 亮色的Orange BorderPenColorOrange.Background = new SolidColorBrush(Color.FromRgb(249, 115, 22)); - BitmapImage newImageSource = new BitmapImage(); + var newImageSource = new BitmapImage(); newImageSource.BeginInit(); - newImageSource.UriSource = new Uri("/Resources/Icons-Fluent/ic_fluent_weather_moon_24_regular.png", UriKind.RelativeOrAbsolute); + newImageSource.UriSource = new Uri("/Resources/Icons-Fluent/ic_fluent_weather_moon_24_regular.png", + UriKind.RelativeOrAbsolute); newImageSource.EndInit(); ColorThemeSwitchIcon.Source = newImageSource; BoardColorThemeSwitchIcon.Source = newImageSource; @@ -249,8 +208,8 @@ namespace Ink_Canvas ColorThemeSwitchTextBlock.Text = "暗系"; BoardColorThemeSwitchTextBlock.Text = "暗系"; } - else - { // 暗系 + else { + // 暗系 // 暗色的红色 BorderPenColorRed.Background = new SolidColorBrush(Color.FromRgb(220, 38, 38)); BoardBorderPenColorRed.Background = new SolidColorBrush(Color.FromRgb(220, 38, 38)); @@ -271,9 +230,10 @@ namespace Ink_Canvas // 暗色的Orange BorderPenColorOrange.Background = new SolidColorBrush(Color.FromRgb(234, 88, 12)); - BitmapImage newImageSource = new BitmapImage(); + var newImageSource = new BitmapImage(); newImageSource.BeginInit(); - newImageSource.UriSource = new Uri("/Resources/Icons-Fluent/ic_fluent_weather_sunny_24_regular.png", UriKind.RelativeOrAbsolute); + newImageSource.UriSource = new Uri("/Resources/Icons-Fluent/ic_fluent_weather_sunny_24_regular.png", + UriKind.RelativeOrAbsolute); newImageSource.EndInit(); ColorThemeSwitchIcon.Source = newImageSource; BoardColorThemeSwitchIcon.Source = newImageSource; @@ -311,8 +271,7 @@ namespace Ink_Canvas HighlighterPenViewboxBtnColorYellowContent.Visibility = Visibility.Collapsed; HighlighterPenViewboxBtnColorZincContent.Visibility = Visibility.Collapsed; - switch (inkColor) - { + switch (inkColor) { case 0: ViewboxBtnColorBlackContent.Visibility = Visibility.Visible; BoardViewboxBtnColorBlackContent.Visibility = Visibility.Visible; @@ -349,8 +308,7 @@ namespace Ink_Canvas break; } - switch (highlighterColor) - { + switch (highlighterColor) { case 100: HighlighterPenViewboxBtnColorBlackContent.Visibility = Visibility.Visible; break; @@ -382,27 +340,20 @@ namespace Ink_Canvas HighlighterPenViewboxBtnColorOrangeContent.Visibility = Visibility.Visible; break; } - } - private void CheckLastColor(int inkColor, bool isHighlighter = false) - { - if (isHighlighter == true) - { + private void CheckLastColor(int inkColor, bool isHighlighter = false) { + if (isHighlighter == true) { highlighterColor = inkColor; } - else - { + else { if (currentMode == 0) lastDesktopInkColor = inkColor; else lastBoardInkColor = inkColor; } - } - private async void CheckPenTypeUIState() - { - if (penType == 0) - { + private async void CheckPenTypeUIState() { + if (penType == 0) { DefaultPenPropsPanel.Visibility = Visibility.Visible; DefaultPenColorsPanel.Visibility = Visibility.Visible; HighlighterPenColorsPanel.Visibility = Visibility.Collapsed; @@ -421,25 +372,21 @@ namespace Ink_Canvas HighlightPenTabButtonIndicator.Visibility = Visibility.Collapsed; // PenPalette.Margin = new Thickness(-160, -200, -33, 32); - await Dispatcher.InvokeAsync(() => - { - ThicknessAnimation marginAnimation = new ThicknessAnimation + await Dispatcher.InvokeAsync(() => { + var marginAnimation = new ThicknessAnimation { Duration = TimeSpan.FromSeconds(0.1), From = PenPalette.Margin, - To = new Thickness(-160, -200, -33, 32) + To = new Thickness(-160, -200, -33, 32), + EasingFunction = new CubicEase() }; - marginAnimation.EasingFunction = new CubicEase(); - PenPalette.BeginAnimation(FrameworkElement.MarginProperty, marginAnimation); + PenPalette.BeginAnimation(MarginProperty, marginAnimation); }); await Task.Delay(100); - await Dispatcher.InvokeAsync(() => { - PenPalette.Margin = new Thickness(-160, -200, -33, 32); - }); + await Dispatcher.InvokeAsync(() => { PenPalette.Margin = new Thickness(-160, -200, -33, 32); }); } - else if (penType == 1) - { + else if (penType == 1) { DefaultPenPropsPanel.Visibility = Visibility.Collapsed; DefaultPenColorsPanel.Visibility = Visibility.Collapsed; HighlighterPenColorsPanel.Visibility = Visibility.Visible; @@ -458,27 +405,23 @@ namespace Ink_Canvas HighlightPenTabButtonIndicator.Visibility = Visibility.Visible; // PenPalette.Margin = new Thickness(-160, -157, -33, 32); - await Dispatcher.InvokeAsync(() => - { - ThicknessAnimation marginAnimation = new ThicknessAnimation + await Dispatcher.InvokeAsync(() => { + var marginAnimation = new ThicknessAnimation { Duration = TimeSpan.FromSeconds(0.1), From = PenPalette.Margin, - To = new Thickness(-160, -157, -33, 32) + To = new Thickness(-160, -157, -33, 32), + EasingFunction = new CubicEase() }; - marginAnimation.EasingFunction = new CubicEase(); - PenPalette.BeginAnimation(FrameworkElement.MarginProperty, marginAnimation); + PenPalette.BeginAnimation(MarginProperty, marginAnimation); }); await Task.Delay(100); - await Dispatcher.InvokeAsync(() => { - PenPalette.Margin = new Thickness(-160, -157, -33, 32); - }); + await Dispatcher.InvokeAsync(() => { PenPalette.Margin = new Thickness(-160, -157, -33, 32); }); } } - private void SwitchToDefaultPen(object sender, MouseButtonEventArgs e) - { + private void SwitchToDefaultPen(object sender, MouseButtonEventArgs e) { penType = 0; CheckPenTypeUIState(); CheckColorTheme(); @@ -488,8 +431,7 @@ namespace Ink_Canvas drawingAttributes.IsHighlighter = false; } - private void SwitchToHighlighterPen(object sender, MouseButtonEventArgs e) - { + private void SwitchToHighlighterPen(object sender, MouseButtonEventArgs e) { penType = 1; CheckPenTypeUIState(); CheckColorTheme(); @@ -499,143 +441,133 @@ namespace Ink_Canvas drawingAttributes.IsHighlighter = true; } - private void BtnColorBlack_Click(object sender, RoutedEventArgs e) - { + private void BtnColorBlack_Click(object sender, RoutedEventArgs e) { CheckLastColor(0); forceEraser = false; ColorSwitchCheck(); } - private void BtnColorRed_Click(object sender, RoutedEventArgs e) - { + private void BtnColorRed_Click(object sender, RoutedEventArgs e) { CheckLastColor(1); forceEraser = false; ColorSwitchCheck(); } - private void BtnColorGreen_Click(object sender, RoutedEventArgs e) - { + private void BtnColorGreen_Click(object sender, RoutedEventArgs e) { CheckLastColor(2); forceEraser = false; ColorSwitchCheck(); } - private void BtnColorBlue_Click(object sender, RoutedEventArgs e) - { + private void BtnColorBlue_Click(object sender, RoutedEventArgs e) { CheckLastColor(3); forceEraser = false; ColorSwitchCheck(); } - private void BtnColorYellow_Click(object sender, RoutedEventArgs e) - { + private void BtnColorYellow_Click(object sender, RoutedEventArgs e) { CheckLastColor(4); forceEraser = false; ColorSwitchCheck(); } - private void BtnColorWhite_Click(object sender, RoutedEventArgs e) - { + private void BtnColorWhite_Click(object sender, RoutedEventArgs e) { CheckLastColor(5); forceEraser = false; ColorSwitchCheck(); } - private void BtnColorPink_Click(object sender, RoutedEventArgs e) - { + private void BtnColorPink_Click(object sender, RoutedEventArgs e) { CheckLastColor(6); forceEraser = false; ColorSwitchCheck(); } - private void BtnColorOrange_Click(object sender, RoutedEventArgs e) - { + private void BtnColorOrange_Click(object sender, RoutedEventArgs e) { CheckLastColor(8); forceEraser = false; ColorSwitchCheck(); } - private void BtnColorTeal_Click(object sender, RoutedEventArgs e) - { + private void BtnColorTeal_Click(object sender, RoutedEventArgs e) { CheckLastColor(7); forceEraser = false; ColorSwitchCheck(); } - private void BtnHighlighterColorBlack_Click(object sender, RoutedEventArgs e) - { + 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) - { + + 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) - { + + 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) - { + + 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) - { + + 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) - { + + 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) - { + + 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) - { + + 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) - { + + 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) - { + + private void BtnHighlighterColorOrange_Click(object sender, RoutedEventArgs e) { CheckLastColor(109, true); penType = 1; forceEraser = false; @@ -643,23 +575,21 @@ namespace Ink_Canvas 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)); + private Color StringToColor(string colorStr) { + var argb = new byte[4]; + for (var i = 0; i < 4; i++) { + var charArray = colorStr.Substring(i * 2 + 1, 2).ToCharArray(); + var b1 = toByte(charArray[0]); + var b2 = toByte(charArray[1]); + argb[i] = (byte)(b2 | (b1 << 4)); } - return Color.FromArgb(argb[0], argb[1], argb[2], argb[3]);//#FFFFFFFF + + return Color.FromArgb(argb[0], argb[1], argb[2], argb[3]); //#FFFFFFFF } - private static byte toByte(char c) - { - byte b = (byte)"0123456789ABCDEF".IndexOf(c); + private static byte toByte(char c) { + var b = (byte)"0123456789ABCDEF".IndexOf(c); return b; } } -} +} \ No newline at end of file diff --git a/Ink Canvas/MainWindow_cs/MW_FloatingBarIcons.cs b/Ink Canvas/MainWindow_cs/MW_FloatingBarIcons.cs index 1164453..ed36b40 100644 --- a/Ink Canvas/MainWindow_cs/MW_FloatingBarIcons.cs +++ b/Ink Canvas/MainWindow_cs/MW_FloatingBarIcons.cs @@ -24,127 +24,109 @@ using System.Globalization; using System.Windows.Data; using System.Xml.Linq; -namespace Ink_Canvas -{ - - public partial class MainWindow : Window - { +namespace Ink_Canvas { + public partial class MainWindow : Window { #region TwoFingZoomBtn - - - private void TwoFingerGestureBorder_MouseUp(object sender, RoutedEventArgs e) - { - - if (TwoFingerGestureBorder.Visibility == Visibility.Visible) - { + private void TwoFingerGestureBorder_MouseUp(object sender, RoutedEventArgs e) { + if (TwoFingerGestureBorder.Visibility == Visibility.Visible) { AnimationsHelper.HideWithSlideAndFade(TwoFingerGestureBorder); AnimationsHelper.HideWithSlideAndFade(BoardTwoFingerGestureBorder); } - else - { + else { AnimationsHelper.ShowWithSlideFromBottomAndFade(TwoFingerGestureBorder); AnimationsHelper.ShowWithSlideFromBottomAndFade(BoardTwoFingerGestureBorder); } } - private void CheckEnableTwoFingerGestureBtnColorPrompt() - { - if (ToggleSwitchEnableMultiTouchMode.IsOn) - { + private void CheckEnableTwoFingerGestureBtnColorPrompt() { + if (ToggleSwitchEnableMultiTouchMode.IsOn) { TwoFingerGestureSimpleStackPanel.Opacity = 0.5; TwoFingerGestureSimpleStackPanel.IsHitTestVisible = false; - EnableTwoFingerGestureBtn.Source = new BitmapImage(new Uri("/Resources/new-icons/gesture.png", UriKind.Relative)); - BoardEnableTwoFingerGestureBtn.Source = new BitmapImage(new Uri("/Resources/new-icons/gesture.png", UriKind.Relative)); + EnableTwoFingerGestureBtn.Source = + new BitmapImage(new Uri("/Resources/new-icons/gesture.png", UriKind.Relative)); + BoardEnableTwoFingerGestureBtn.Source = + new BitmapImage(new Uri("/Resources/new-icons/gesture.png", UriKind.Relative)); } - else - { + else { TwoFingerGestureSimpleStackPanel.Opacity = 1; TwoFingerGestureSimpleStackPanel.IsHitTestVisible = true; - if (Settings.Gesture.IsEnableTwoFingerGesture) - { - EnableTwoFingerGestureBtn.Source = new BitmapImage(new Uri("/Resources/new-icons/gesture-enabled.png", UriKind.Relative)); - BoardEnableTwoFingerGestureBtn.Source = new BitmapImage(new Uri("/Resources/new-icons/gesture-enabled.png", UriKind.Relative)); + if (Settings.Gesture.IsEnableTwoFingerGesture) { + EnableTwoFingerGestureBtn.Source = + new BitmapImage(new Uri("/Resources/new-icons/gesture-enabled.png", UriKind.Relative)); + BoardEnableTwoFingerGestureBtn.Source = + new BitmapImage(new Uri("/Resources/new-icons/gesture-enabled.png", UriKind.Relative)); } - else - { - EnableTwoFingerGestureBtn.Source = new BitmapImage(new Uri("/Resources/new-icons/gesture.png", UriKind.Relative)); - BoardEnableTwoFingerGestureBtn.Source = new BitmapImage(new Uri("/Resources/new-icons/gesture.png", UriKind.Relative)); + else { + EnableTwoFingerGestureBtn.Source = + new BitmapImage(new Uri("/Resources/new-icons/gesture.png", UriKind.Relative)); + BoardEnableTwoFingerGestureBtn.Source = + new BitmapImage(new Uri("/Resources/new-icons/gesture.png", UriKind.Relative)); } } } - private void CheckEnableTwoFingerGestureBtnVisibility(bool isVisible) - { + private void CheckEnableTwoFingerGestureBtnVisibility(bool isVisible) { if (StackPanelCanvasControls.Visibility != Visibility.Visible - || BorderFloatingBarMainControls.Visibility != Visibility.Visible) - { + || BorderFloatingBarMainControls.Visibility != Visibility.Visible) { EnableTwoFingerGestureBorder.Visibility = Visibility.Collapsed; } - else if (isVisible == true) - { - if (BtnPPTSlideShowEnd.Visibility == Visibility.Visible) EnableTwoFingerGestureBorder.Visibility = Visibility.Collapsed; + else if (isVisible == true) { + if (BtnPPTSlideShowEnd.Visibility == Visibility.Visible) + EnableTwoFingerGestureBorder.Visibility = Visibility.Collapsed; else EnableTwoFingerGestureBorder.Visibility = Visibility.Visible; } - else EnableTwoFingerGestureBorder.Visibility = Visibility.Collapsed; + else { + EnableTwoFingerGestureBorder.Visibility = Visibility.Collapsed; + } } #endregion TwoFingZoomBtn #region Drag - bool isDragDropInEffect = false; - Point pos = new Point(); - Point downPos = new Point(); - Point pointDesktop = new Point(-1, -1); //用于记录上次在桌面时的坐标 - Point pointPPT = new Point(-1, -1); //用于记录上次在PPT中的坐标 + private bool isDragDropInEffect = false; + private Point pos = new Point(); + private Point downPos = new Point(); + private Point pointDesktop = new Point(-1, -1); //用于记录上次在桌面时的坐标 + private Point pointPPT = new Point(-1, -1); //用于记录上次在PPT中的坐标 - void SymbolIconEmoji_MouseMove(object sender, MouseEventArgs e) - { - if (isDragDropInEffect) - { - double xPos = e.GetPosition(null).X - pos.X + ViewboxFloatingBar.Margin.Left; - double yPos = e.GetPosition(null).Y - pos.Y + ViewboxFloatingBar.Margin.Top; + private void SymbolIconEmoji_MouseMove(object sender, MouseEventArgs e) { + if (isDragDropInEffect) { + var xPos = e.GetPosition(null).X - pos.X + ViewboxFloatingBar.Margin.Left; + var yPos = e.GetPosition(null).Y - pos.Y + ViewboxFloatingBar.Margin.Top; ViewboxFloatingBar.Margin = new Thickness(xPos, yPos, -2000, -200); pos = e.GetPosition(null); if (BtnPPTSlideShowEnd.Visibility == Visibility.Visible) - { pointPPT = new Point(xPos, yPos); - } else - { pointDesktop = new Point(xPos, yPos); - } } } - void SymbolIconEmoji_MouseDown(object sender, MouseButtonEventArgs e) - { - if (isViewboxFloatingBarMarginAnimationRunning) - { - ViewboxFloatingBar.BeginAnimation(FrameworkElement.MarginProperty, null); + private void SymbolIconEmoji_MouseDown(object sender, MouseButtonEventArgs e) { + if (isViewboxFloatingBarMarginAnimationRunning) { + ViewboxFloatingBar.BeginAnimation(MarginProperty, null); isViewboxFloatingBarMarginAnimationRunning = false; } + isDragDropInEffect = true; pos = e.GetPosition(null); downPos = e.GetPosition(null); GridForFloatingBarDraging.Visibility = Visibility.Visible; } - void SymbolIconEmoji_MouseUp(object sender, MouseButtonEventArgs e) - { + private void SymbolIconEmoji_MouseUp(object sender, MouseButtonEventArgs e) { isDragDropInEffect = false; - if (e is null || Math.Abs(downPos.X - e.GetPosition(null).X) <= 10 && Math.Abs(downPos.Y - e.GetPosition(null).Y) <= 10) - { - if (BorderFloatingBarMainControls.Visibility == Visibility.Visible) - { + if (e is null || (Math.Abs(downPos.X - e.GetPosition(null).X) <= 10 && + Math.Abs(downPos.Y - e.GetPosition(null).Y) <= 10)) { + if (BorderFloatingBarMainControls.Visibility == Visibility.Visible) { BorderFloatingBarMainControls.Visibility = Visibility.Collapsed; CheckEnableTwoFingerGestureBtnVisibility(false); } - else - { + else { BorderFloatingBarMainControls.Visibility = Visibility.Visible; CheckEnableTwoFingerGestureBtnVisibility(true); } @@ -155,8 +137,7 @@ namespace Ink_Canvas #endregion - private void HideSubPanelsImmediately() - { + private void HideSubPanelsImmediately() { BorderTools.Visibility = Visibility.Collapsed; BorderTools.Visibility = Visibility.Collapsed; BoardBorderTools.Visibility = Visibility.Collapsed; @@ -167,34 +148,33 @@ namespace Ink_Canvas } #region 按鈕高亮背景 - private async void HideSubPanels(String mode = null, bool autoAlignCenter = false, bool isAutoUpdateToolbarSelection = true) - { + + private async void HideSubPanels(string mode = null, bool autoAlignCenter = false, + bool isAutoUpdateToolbarSelection = true) { AnimationsHelper.HideWithSlideAndFade(BorderTools); AnimationsHelper.HideWithSlideAndFade(BoardBorderTools); AnimationsHelper.HideWithSlideAndFade(PenPalette); AnimationsHelper.HideWithSlideAndFade(BoardPenPalette); AnimationsHelper.HideWithSlideAndFade(BoardDeleteIcon); - if (BorderSettings.Visibility == Visibility.Visible) - { + if (BorderSettings.Visibility == Visibility.Visible) { BorderSettingsMask.IsHitTestVisible = false; BorderSettingsMask.Background = null; var sb = new Storyboard(); // 滑动动画 - var slideAnimation = new DoubleAnimation - { + var slideAnimation = new DoubleAnimation { From = 0, // 滑动距离 To = BorderSettings.RenderTransform.Value.OffsetX - 440, Duration = TimeSpan.FromSeconds(0.6) }; slideAnimation.EasingFunction = new CubicEase() { EasingMode = EasingMode.EaseOut }; - Storyboard.SetTargetProperty(slideAnimation, new PropertyPath("(UIElement.RenderTransform).(TranslateTransform.X)")); + Storyboard.SetTargetProperty(slideAnimation, + new PropertyPath("(UIElement.RenderTransform).(TranslateTransform.X)")); sb.Children.Add(slideAnimation); - sb.Completed += (s, _) => - { + sb.Completed += (s, _) => { BorderSettings.Visibility = Visibility.Collapsed; isOpeningOrHidingSettingsPane = false; }; @@ -205,66 +185,62 @@ namespace Ink_Canvas isOpeningOrHidingSettingsPane = true; sb.Begin((FrameworkElement)BorderSettings); } - + AnimationsHelper.HideWithSlideAndFade(TwoFingerGestureBorder); AnimationsHelper.HideWithSlideAndFade(EraserSizePanel); AnimationsHelper.HideWithSlideAndFade(BoardTwoFingerGestureBorder); - if (ToggleSwitchDrawShapeBorderAutoHide.IsOn) - { + if (ToggleSwitchDrawShapeBorderAutoHide.IsOn) { AnimationsHelper.HideWithSlideAndFade(BorderDrawShape); AnimationsHelper.HideWithSlideAndFade(BoardBorderDrawShape); } - if (mode != null && isAutoUpdateToolbarSelection==true) - { - - if (mode != "clear") - { + if (mode != null && isAutoUpdateToolbarSelection == true) { + if (mode != "clear") { CursorIconGeometry.Brush = new SolidColorBrush(Color.FromRgb(27, 27, 27)); CursorIconGeometry.Geometry = Geometry.Parse(XamlGraphicsIconGeometries.LinedCursorIcon); PenIconGeometry.Brush = new SolidColorBrush(Color.FromRgb(27, 27, 27)); PenIconGeometry.Geometry = Geometry.Parse(XamlGraphicsIconGeometries.LinedPenIcon); StrokeEraserIconGeometry.Brush = new SolidColorBrush(Color.FromRgb(27, 27, 27)); - StrokeEraserIconGeometry.Geometry = Geometry.Parse(XamlGraphicsIconGeometries.LinedEraserStrokeIcon); + StrokeEraserIconGeometry.Geometry = + Geometry.Parse(XamlGraphicsIconGeometries.LinedEraserStrokeIcon); CircleEraserIconGeometry.Brush = new SolidColorBrush(Color.FromRgb(27, 27, 27)); - CircleEraserIconGeometry.Geometry = Geometry.Parse(XamlGraphicsIconGeometries.LinedEraserCircleIcon); + CircleEraserIconGeometry.Geometry = + Geometry.Parse(XamlGraphicsIconGeometries.LinedEraserCircleIcon); LassoSelectIconGeometry.Brush = new SolidColorBrush(Color.FromRgb(27, 27, 27)); LassoSelectIconGeometry.Geometry = Geometry.Parse(XamlGraphicsIconGeometries.LinedLassoSelectIcon); } - switch (mode) - { + + switch (mode) { case "pen": - case "color": - { + case "color": { PenIconGeometry.Brush = new SolidColorBrush(Color.FromRgb(30, 58, 138)); PenIconGeometry.Geometry = Geometry.Parse(XamlGraphicsIconGeometries.SolidPenIcon); break; } - case "eraser": - { - CircleEraserIconGeometry.Brush = new SolidColorBrush(Color.FromRgb(30, 58, 138)); - CircleEraserIconGeometry.Geometry = Geometry.Parse(XamlGraphicsIconGeometries.SolidEraserCircleIcon); - break; - } - case "eraserByStrokes": - { - StrokeEraserIconGeometry.Brush = new SolidColorBrush(Color.FromRgb(30, 58, 138)); - StrokeEraserIconGeometry.Geometry = Geometry.Parse(XamlGraphicsIconGeometries.SolidEraserStrokeIcon); - break; - } - case "select": - { - LassoSelectIconGeometry.Brush = new SolidColorBrush(Color.FromRgb(30, 58, 138)); - LassoSelectIconGeometry.Geometry = Geometry.Parse(XamlGraphicsIconGeometries.SolidLassoSelectIcon); - break; - } + case "eraser": { + CircleEraserIconGeometry.Brush = new SolidColorBrush(Color.FromRgb(30, 58, 138)); + CircleEraserIconGeometry.Geometry = + Geometry.Parse(XamlGraphicsIconGeometries.SolidEraserCircleIcon); + break; + } + case "eraserByStrokes": { + StrokeEraserIconGeometry.Brush = new SolidColorBrush(Color.FromRgb(30, 58, 138)); + StrokeEraserIconGeometry.Geometry = + Geometry.Parse(XamlGraphicsIconGeometries.SolidEraserStrokeIcon); + break; + } + case "select": { + LassoSelectIconGeometry.Brush = new SolidColorBrush(Color.FromRgb(30, 58, 138)); + LassoSelectIconGeometry.Geometry = + Geometry.Parse(XamlGraphicsIconGeometries.SolidLassoSelectIcon); + break; + } } if (autoAlignCenter) // 控制居中 { - if (BtnPPTSlideShowEnd.Visibility == Visibility.Visible) - { + if (BtnPPTSlideShowEnd.Visibility == Visibility.Visible) { await Task.Delay(50); ViewboxFloatingBarMarginAnimation(60); } @@ -284,130 +260,112 @@ namespace Ink_Canvas await Task.Delay(150); isHidingSubPanelsWhenInking = false; } + #endregion - private void BorderPenColorBlack_MouseUp(object sender, MouseButtonEventArgs e) - { + private void BorderPenColorBlack_MouseUp(object sender, MouseButtonEventArgs e) { BtnColorBlack_Click(null, null); HideSubPanels(); } - private void BorderPenColorRed_MouseUp(object sender, MouseButtonEventArgs e) - { + private void BorderPenColorRed_MouseUp(object sender, MouseButtonEventArgs e) { BtnColorRed_Click(null, null); HideSubPanels(); } - private void BorderPenColorGreen_MouseUp(object sender, MouseButtonEventArgs e) - { + private void BorderPenColorGreen_MouseUp(object sender, MouseButtonEventArgs e) { BtnColorGreen_Click(null, null); HideSubPanels(); } - private void BorderPenColorBlue_MouseUp(object sender, MouseButtonEventArgs e) - { + private void BorderPenColorBlue_MouseUp(object sender, MouseButtonEventArgs e) { BtnColorBlue_Click(null, null); HideSubPanels(); } - private void BorderPenColorYellow_MouseUp(object sender, MouseButtonEventArgs e) - { + private void BorderPenColorYellow_MouseUp(object sender, MouseButtonEventArgs e) { BtnColorYellow_Click(null, null); HideSubPanels(); } - private void BorderPenColorWhite_MouseUp(object sender, MouseButtonEventArgs e) - { + private void BorderPenColorWhite_MouseUp(object sender, MouseButtonEventArgs e) { inkCanvas.DefaultDrawingAttributes.Color = StringToColor("#FFFEFEFE"); inkColor = 5; ColorSwitchCheck(); HideSubPanels(); } - private void SymbolIconUndo_MouseUp(object sender, MouseButtonEventArgs e) - { + private void SymbolIconUndo_MouseUp(object sender, MouseButtonEventArgs e) { //if (lastBorderMouseDownObject != sender) return; - + if (!BtnUndo.IsEnabled) return; BtnUndo_Click(BtnUndo, null); HideSubPanels(); } - private void SymbolIconRedo_MouseUp(object sender, MouseButtonEventArgs e) - { + private void SymbolIconRedo_MouseUp(object sender, MouseButtonEventArgs e) { //if (lastBorderMouseDownObject != sender) return; - + if (!BtnRedo.IsEnabled) return; BtnRedo_Click(BtnRedo, null); HideSubPanels(); } - private async void SymbolIconCursor_Click(object sender, RoutedEventArgs e) - { - if (currentMode != 0) - { + private async void SymbolIconCursor_Click(object sender, RoutedEventArgs e) { + if (currentMode != 0) { ImageBlackboard_MouseUp(null, null); } - else - { + else { BtnHideInkCanvas_Click(BtnHideInkCanvas, null); - if (BtnPPTSlideShowEnd.Visibility == Visibility.Visible) - { + if (BtnPPTSlideShowEnd.Visibility == Visibility.Visible) { await Task.Delay(100); ViewboxFloatingBarMarginAnimation(60); } } } - private void SymbolIconDelete_MouseUp(object sender, MouseButtonEventArgs e) - { - - if (inkCanvas.GetSelectedStrokes().Count > 0) - { + private void SymbolIconDelete_MouseUp(object sender, MouseButtonEventArgs e) { + if (inkCanvas.GetSelectedStrokes().Count > 0) { inkCanvas.Strokes.Remove(inkCanvas.GetSelectedStrokes()); GridInkCanvasSelectionCover.Visibility = Visibility.Collapsed; } - else if (inkCanvas.Strokes.Count > 0) - { - if (Settings.Automation.IsAutoSaveStrokesAtClear && inkCanvas.Strokes.Count > Settings.Automation.MinimumAutomationStrokeNumber) - { + else if (inkCanvas.Strokes.Count > 0) { + if (Settings.Automation.IsAutoSaveStrokesAtClear && + inkCanvas.Strokes.Count > Settings.Automation.MinimumAutomationStrokeNumber) { if (BtnPPTSlideShowEnd.Visibility == Visibility.Visible) SaveScreenShot(true, $"{pptName}/{previousSlideID}_{DateTime.Now:HH-mm-ss}"); else SaveScreenShot(true); } + BtnClear_Click(null, null); } } - private void SymbolIconSettings_Click(object sender, RoutedEventArgs e) - { + private void SymbolIconSettings_Click(object sender, RoutedEventArgs e) { if (isOpeningOrHidingSettingsPane != false) return; HideSubPanels(); BtnSettings_Click(null, null); } - private void SymbolIconSelect_MouseUp(object sender, MouseButtonEventArgs e) - { + private void SymbolIconSelect_MouseUp(object sender, MouseButtonEventArgs e) { FloatingbarSelectionBG.Visibility = Visibility.Visible; System.Windows.Controls.Canvas.SetLeft(FloatingbarSelectionBG, 140); BtnSelect_Click(null, null); HideSubPanels("select"); } - private async void SymbolIconScreenshot_MouseUp(object sender, MouseButtonEventArgs e) - { + private async void SymbolIconScreenshot_MouseUp(object sender, MouseButtonEventArgs e) { HideSubPanelsImmediately(); await Task.Delay(50); SaveScreenShotToDesktop(); } - bool Not_Enter_Blackboard_fir_Mouse_Click = true; - bool isDisplayingOrHidingBlackboard = false; - private void ImageBlackboard_MouseUp(object sender, MouseButtonEventArgs e) - { - + private bool Not_Enter_Blackboard_fir_Mouse_Click = true; + private bool isDisplayingOrHidingBlackboard = false; + + private void ImageBlackboard_MouseUp(object sender, MouseButtonEventArgs e) { LeftUnFoldButtonQuickPanel.Visibility = Visibility.Collapsed; RightUnFoldButtonQuickPanel.Visibility = Visibility.Collapsed; if (isDisplayingOrHidingBlackboard) return; @@ -417,8 +375,7 @@ namespace Ink_Canvas if (inkCanvas.EditingMode == InkCanvasEditingMode.Select) PenIcon_Click(null, null); - if (currentMode == 0) - { + if (currentMode == 0) { BottomViewboxPPTSidesControl.Visibility = Visibility.Collapsed; LeftSidePanelForPPTNavigation.Visibility = Visibility.Collapsed; RightSidePanelForPPTNavigation.Visibility = Visibility.Collapsed; @@ -435,84 +392,59 @@ namespace Ink_Canvas */ new Thread(new ThreadStart(() => { Thread.Sleep(100); - Application.Current.Dispatcher.Invoke(() => { - ViewboxFloatingBarMarginAnimation(60); - }); + Application.Current.Dispatcher.Invoke(() => { ViewboxFloatingBarMarginAnimation(60); }); })).Start(); if (Settings.Canvas.UsingWhiteboard) - { BorderPenColorBlack_MouseUp(BorderPenColorBlack, null); - } else - { BorderPenColorWhite_MouseUp(BorderPenColorWhite, null); - } if (Settings.Gesture.AutoSwitchTwoFingerGesture) // 自动关闭多指书写、开启双指移动 { ToggleSwitchEnableTwoFingerTranslate.IsOn = true; if (isInMultiTouchMode) ToggleSwitchEnableMultiTouchMode.IsOn = false; } - if (Settings.Appearance.EnableTimeDisplayInWhiteboardMode == true) - { + + if (Settings.Appearance.EnableTimeDisplayInWhiteboardMode == true) { WaterMarkTime.Visibility = Visibility.Visible; WaterMarkDate.Visibility = Visibility.Visible; } + BlackBoardWaterMark.Visibility = Visibility.Visible; } - else - { + else { //关闭黑板 HideSubPanelsImmediately(); - if (StackPanelPPTControls.Visibility == Visibility.Visible) - { + if (StackPanelPPTControls.Visibility == Visibility.Visible) { if (Settings.PowerPointSettings.IsShowBottomPPTNavigationPanel) - { AnimationsHelper.ShowWithSlideFromBottomAndFade(BottomViewboxPPTSidesControl); - } - if (Settings.PowerPointSettings.IsShowSidePPTNavigationPanel) - { + if (Settings.PowerPointSettings.IsShowSidePPTNavigationPanel) { AnimationsHelper.ShowWithScaleFromLeft(LeftSidePanelForPPTNavigation); AnimationsHelper.ShowWithScaleFromRight(RightSidePanelForPPTNavigation); } } - if (Settings.Automation.IsAutoSaveStrokesAtClear && inkCanvas.Strokes.Count > Settings.Automation.MinimumAutomationStrokeNumber) - { - SaveScreenShot(true); - } + if (Settings.Automation.IsAutoSaveStrokesAtClear && + inkCanvas.Strokes.Count > Settings.Automation.MinimumAutomationStrokeNumber) SaveScreenShot(true); if (BtnPPTSlideShowEnd.Visibility == Visibility.Collapsed) - { new Thread(new ThreadStart(() => { Thread.Sleep(100); - Application.Current.Dispatcher.Invoke(() => { - ViewboxFloatingBarMarginAnimation(100, true); - }); + Application.Current.Dispatcher.Invoke(() => { ViewboxFloatingBarMarginAnimation(100, true); }); })).Start(); - } else - { new Thread(new ThreadStart(() => { Thread.Sleep(100); - Application.Current.Dispatcher.Invoke(() => { - ViewboxFloatingBarMarginAnimation(60); - }); + Application.Current.Dispatcher.Invoke(() => { ViewboxFloatingBarMarginAnimation(60); }); })).Start(); - } - if (Pen_Icon.Background == null) - { - PenIcon_Click(null, null); - } + if (Pen_Icon.Background == null) PenIcon_Click(null, null); if (Settings.Gesture.AutoSwitchTwoFingerGesture) // 自动启用多指书写 - { ToggleSwitchEnableTwoFingerTranslate.IsOn = false; - // 2024.5.2 need to be tested - // if (!isInMultiTouchMode) ToggleSwitchEnableMultiTouchMode.IsOn = true; - } + // 2024.5.2 need to be tested + // if (!isInMultiTouchMode) ToggleSwitchEnableMultiTouchMode.IsOn = true; WaterMarkTime.Visibility = Visibility.Collapsed; WaterMarkDate.Visibility = Visibility.Collapsed; BlackBoardWaterMark.Visibility = Visibility.Collapsed; @@ -521,27 +453,21 @@ namespace Ink_Canvas BtnSwitch_Click(BtnSwitch, null); if (currentMode == 0 && inkCanvas.Strokes.Count == 0 && BtnPPTSlideShowEnd.Visibility != Visibility.Visible) - { CursorIcon_Click(null, null); - } BtnExit.Foreground = Brushes.White; ThemeManager.Current.ApplicationTheme = ApplicationTheme.Dark; new Thread(new ThreadStart(() => { Thread.Sleep(200); - Application.Current.Dispatcher.Invoke(() => { - isDisplayingOrHidingBlackboard = false; - }); + Application.Current.Dispatcher.Invoke(() => { isDisplayingOrHidingBlackboard = false; }); })).Start(); SwitchToDefaultPen(null, null); CheckColorTheme(true); } - private void ImageCountdownTimer_MouseUp(object sender, MouseButtonEventArgs e) - { - + private void ImageCountdownTimer_MouseUp(object sender, MouseButtonEventArgs e) { LeftUnFoldButtonQuickPanel.Visibility = Visibility.Collapsed; RightUnFoldButtonQuickPanel.Visibility = Visibility.Collapsed; AnimationsHelper.HideWithSlideAndFade(BorderTools); @@ -550,17 +476,14 @@ namespace Ink_Canvas new CountdownTimerWindow().Show(); } - private void OperatingGuideWindowIcon_MouseUp(object sender, MouseButtonEventArgs e) - { + private void OperatingGuideWindowIcon_MouseUp(object sender, MouseButtonEventArgs e) { AnimationsHelper.HideWithSlideAndFade(BorderTools); AnimationsHelper.HideWithSlideAndFade(BoardBorderTools); new OperatingGuideWindow().Show(); } - private void SymbolIconRand_MouseUp(object sender, MouseButtonEventArgs e) - { - + private void SymbolIconRand_MouseUp(object sender, MouseButtonEventArgs e) { LeftUnFoldButtonQuickPanel.Visibility = Visibility.Collapsed; RightUnFoldButtonQuickPanel.Visibility = Visibility.Collapsed; if (lastBorderMouseDownObject != sender) return; @@ -571,10 +494,8 @@ namespace Ink_Canvas new RandWindow().Show(); } - public void CheckEraserTypeTab() - { - if (Settings.Canvas.EraserShapeType == 0) - { + 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; @@ -588,8 +509,7 @@ namespace Ink_Canvas RectangleEraserTabButtonText.Margin = new Thickness(2, 1, 0, 0); RectangleEraserTabButtonIndicator.Visibility = Visibility.Collapsed; } - else - { + else { RectangleEraserTabButton.Background = new SolidColorBrush(Color.FromArgb(85, 59, 130, 246)); RectangleEraserTabButton.Opacity = 1; RectangleEraserTabButtonText.FontWeight = FontWeights.Bold; @@ -605,9 +525,7 @@ namespace Ink_Canvas } } - private void SymbolIconRandOne_MouseUp(object sender, MouseButtonEventArgs e) - { - + private void SymbolIconRandOne_MouseUp(object sender, MouseButtonEventArgs e) { LeftUnFoldButtonQuickPanel.Visibility = Visibility.Collapsed; RightUnFoldButtonQuickPanel.Visibility = Visibility.Collapsed; if (lastBorderMouseDownObject != sender) return; @@ -618,8 +536,7 @@ namespace Ink_Canvas new RandWindow(true).ShowDialog(); } - private void GridInkReplayButton_MouseUp(object sender, MouseButtonEventArgs e) - { + private void GridInkReplayButton_MouseUp(object sender, MouseButtonEventArgs e) { if (lastBorderMouseDownObject != sender) return; AnimationsHelper.HideWithSlideAndFade(BorderTools); @@ -631,33 +548,28 @@ namespace Ink_Canvas inkCanvas.Visibility = Visibility.Collapsed; isStopInkReplay = false; InkCanvasForInkReplay.Strokes.Clear(); - StrokeCollection strokes = inkCanvas.Strokes.Clone(); - if (inkCanvas.GetSelectedStrokes().Count != 0) - { - strokes = inkCanvas.GetSelectedStrokes().Clone(); - } + var strokes = inkCanvas.Strokes.Clone(); + if (inkCanvas.GetSelectedStrokes().Count != 0) strokes = inkCanvas.GetSelectedStrokes().Clone(); int k = 1, i = 0; new Thread(new ThreadStart(() => { - foreach (Stroke stroke in strokes) - { - StylusPointCollection stylusPoints = new StylusPointCollection(); + foreach (var stroke in strokes) { + var stylusPoints = new StylusPointCollection(); if (stroke.StylusPoints.Count == 629) //圆或椭圆 { Stroke s = null; - foreach (StylusPoint stylusPoint in stroke.StylusPoints) - { - if (i++ >= 50) - { + foreach (var stylusPoint in stroke.StylusPoints) { + if (i++ >= 50) { i = 0; Thread.Sleep(10); if (isStopInkReplay) return; } + Application.Current.Dispatcher.Invoke(() => { - try - { + try { InkCanvasForInkReplay.Strokes.Remove(s); } catch { } + stylusPoints.Add(stylusPoint); s = new Stroke(stylusPoints.Clone()); s.DrawingAttributes = stroke.DrawingAttributes; @@ -665,23 +577,21 @@ namespace Ink_Canvas }); } } - else - { + else { Stroke s = null; - foreach (StylusPoint stylusPoint in stroke.StylusPoints) - { - if (i++ >= k) - { + foreach (var stylusPoint in stroke.StylusPoints) { + if (i++ >= k) { i = 0; Thread.Sleep(10); if (isStopInkReplay) return; } + Application.Current.Dispatcher.Invoke(() => { - try - { + try { InkCanvasForInkReplay.Strokes.Remove(s); } catch { } + stylusPoints.Add(stylusPoint); s = new Stroke(stylusPoints.Clone()); s.DrawingAttributes = stroke.DrawingAttributes; @@ -690,6 +600,7 @@ namespace Ink_Canvas } } } + Thread.Sleep(100); Application.Current.Dispatcher.Invoke(() => { InkCanvasForInkReplay.Visibility = Visibility.Collapsed; @@ -697,113 +608,86 @@ namespace Ink_Canvas }); })).Start(); } - bool isStopInkReplay = false; - private void InkCanvasForInkReplay_MouseDown(object sender, MouseButtonEventArgs e) - { - if (e.ClickCount == 2) - { + + private bool isStopInkReplay = false; + + private void InkCanvasForInkReplay_MouseDown(object sender, MouseButtonEventArgs e) { + if (e.ClickCount == 2) { InkCanvasForInkReplay.Visibility = Visibility.Collapsed; inkCanvas.Visibility = Visibility.Visible; isStopInkReplay = true; } } - private void SymbolIconTools_MouseUp(object sender, MouseButtonEventArgs e) - { - - if (BorderTools.Visibility == Visibility.Visible) - { + private void SymbolIconTools_MouseUp(object sender, MouseButtonEventArgs e) { + if (BorderTools.Visibility == Visibility.Visible) { AnimationsHelper.HideWithSlideAndFade(BorderTools); AnimationsHelper.HideWithSlideAndFade(BoardBorderTools); } - else - { + else { AnimationsHelper.ShowWithSlideFromBottomAndFade(BorderTools); AnimationsHelper.ShowWithSlideFromBottomAndFade(BoardBorderTools); } } - bool isViewboxFloatingBarMarginAnimationRunning = false; + private bool isViewboxFloatingBarMarginAnimationRunning = false; - private async void ViewboxFloatingBarMarginAnimation(int MarginFromEdge, bool PosXCaculatedWithTaskbarHeight = false) - { - if (MarginFromEdge == 60) - { - MarginFromEdge = 55; - } + private async void ViewboxFloatingBarMarginAnimation(int MarginFromEdge, + bool PosXCaculatedWithTaskbarHeight = false) { + if (MarginFromEdge == 60) MarginFromEdge = 55; await Dispatcher.InvokeAsync(() => { if (Topmost == false) - { MarginFromEdge = -60; - } else - { ViewboxFloatingBar.Visibility = Visibility.Visible; - } isViewboxFloatingBarMarginAnimationRunning = true; double dpiScaleX = 1, dpiScaleY = 1; - PresentationSource source = PresentationSource.FromVisual(this); - if (source != null) - { + var source = PresentationSource.FromVisual(this); + if (source != null) { dpiScaleX = source.CompositionTarget.TransformToDevice.M11; dpiScaleY = source.CompositionTarget.TransformToDevice.M22; } - IntPtr windowHandle = new WindowInteropHelper(this).Handle; - System.Windows.Forms.Screen screen = System.Windows.Forms.Screen.FromHandle(windowHandle); + + var windowHandle = new WindowInteropHelper(this).Handle; + var screen = System.Windows.Forms.Screen.FromHandle(windowHandle); double screenWidth = screen.Bounds.Width / dpiScaleX, screenHeight = screen.Bounds.Height / dpiScaleY; - double toolbarHeight = SystemParameters.PrimaryScreenHeight - SystemParameters.FullPrimaryScreenHeight - SystemParameters.WindowCaptionHeight; + var toolbarHeight = SystemParameters.PrimaryScreenHeight - SystemParameters.FullPrimaryScreenHeight - + SystemParameters.WindowCaptionHeight; pos.X = (screenWidth - ViewboxFloatingBar.ActualWidth * ViewboxFloatingBarScaleTransform.ScaleX) / 2; if (PosXCaculatedWithTaskbarHeight == false) - { pos.Y = screenHeight - MarginFromEdge * ViewboxFloatingBarScaleTransform.ScaleY; - } else if (PosXCaculatedWithTaskbarHeight == true) - { - pos.Y = screenHeight - ViewboxFloatingBar.ActualHeight * ViewboxFloatingBarScaleTransform.ScaleY - toolbarHeight - ViewboxFloatingBarScaleTransform.ScaleY * 3; - } + pos.Y = screenHeight - ViewboxFloatingBar.ActualHeight * ViewboxFloatingBarScaleTransform.ScaleY - + toolbarHeight - ViewboxFloatingBarScaleTransform.ScaleY * 3; - if (MarginFromEdge != -60) - { - if (BtnPPTSlideShowEnd.Visibility == Visibility.Visible) - { - if (pointPPT.X != -1 || pointPPT.Y != -1) - { + if (MarginFromEdge != -60) { + if (BtnPPTSlideShowEnd.Visibility == Visibility.Visible) { + if (pointPPT.X != -1 || pointPPT.Y != -1) { if (Math.Abs(pointPPT.Y - pos.Y) > 50) - { pos = pointPPT; - } else - { pointPPT = pos; - } } } - else - { - if (pointDesktop.X != -1 || pointDesktop.Y != -1) - { + else { + if (pointDesktop.X != -1 || pointDesktop.Y != -1) { if (Math.Abs(pointDesktop.Y - pos.Y) > 50) - { pos = pointDesktop; - } else - { pointDesktop = pos; - } } } } - ThicknessAnimation marginAnimation = new ThicknessAnimation - { + var marginAnimation = new ThicknessAnimation { Duration = TimeSpan.FromSeconds(0.3), From = ViewboxFloatingBar.Margin, To = new Thickness(pos.X, pos.Y, -2000, -200) }; marginAnimation.EasingFunction = new CircleEase(); - ViewboxFloatingBar.BeginAnimation(FrameworkElement.MarginProperty, marginAnimation); + ViewboxFloatingBar.BeginAnimation(MarginProperty, marginAnimation); }); await Task.Delay(200); @@ -814,41 +698,37 @@ namespace Ink_Canvas }); } - private async void CursorIcon_Click(object sender, RoutedEventArgs e) - { + private async void CursorIcon_Click(object sender, RoutedEventArgs e) { // 隱藏高亮 FloatingbarSelectionBG.Visibility = Visibility.Hidden; // 切换前自动截图保存墨迹 - if (inkCanvas.Strokes.Count > 0 && inkCanvas.Strokes.Count > Settings.Automation.MinimumAutomationStrokeNumber) - { - if (BtnPPTSlideShowEnd.Visibility == Visibility.Visible) SaveScreenShot(true, $"{pptName}/{previousSlideID}_{DateTime.Now:HH-mm-ss}"); + if (inkCanvas.Strokes.Count > 0 && + inkCanvas.Strokes.Count > Settings.Automation.MinimumAutomationStrokeNumber) { + if (BtnPPTSlideShowEnd.Visibility == Visibility.Visible) + SaveScreenShot(true, $"{pptName}/{previousSlideID}_{DateTime.Now:HH-mm-ss}"); else SaveScreenShot(true); } - if (BtnPPTSlideShowEnd.Visibility != Visibility.Visible) - { - if (Settings.Canvas.HideStrokeWhenSelecting) + if (BtnPPTSlideShowEnd.Visibility != Visibility.Visible) { + if (Settings.Canvas.HideStrokeWhenSelecting) { inkCanvas.Visibility = Visibility.Collapsed; - else - { + } + else { inkCanvas.IsHitTestVisible = false; inkCanvas.Visibility = Visibility.Visible; } } - else - { - if (Settings.PowerPointSettings.IsShowStrokeOnSelectInPowerPoint) - { + else { + if (Settings.PowerPointSettings.IsShowStrokeOnSelectInPowerPoint) { inkCanvas.Visibility = Visibility.Visible; inkCanvas.IsHitTestVisible = true; } - else - { - if (Settings.Canvas.HideStrokeWhenSelecting) + else { + if (Settings.Canvas.HideStrokeWhenSelecting) { inkCanvas.Visibility = Visibility.Collapsed; - else - { + } + else { inkCanvas.IsHitTestVisible = false; inkCanvas.Visibility = Visibility.Visible; } @@ -862,20 +742,15 @@ namespace Ink_Canvas inkCanvas.Select(new StrokeCollection()); GridInkCanvasSelectionCover.Visibility = Visibility.Collapsed; - if (currentMode != 0) - { + if (currentMode != 0) { SaveStrokes(); RestoreStrokes(true); } if (BtnSwitchTheme.Content.ToString() == "浅色") - { BtnSwitch.Content = "黑板"; - } else - { BtnSwitch.Content = "白板"; - } StackPanelPPTButtons.Visibility = Visibility.Visible; BtnHideInkCanvas.Content = "显示\n画板"; @@ -884,30 +759,22 @@ namespace Ink_Canvas StackPanelCanvasControls.Visibility = Visibility.Collapsed; - if (!isFloatingBarFolded) - { + if (!isFloatingBarFolded) { HideSubPanels("cursor", true); await Task.Delay(50); if (BtnPPTSlideShowEnd.Visibility == Visibility.Visible) - { ViewboxFloatingBarMarginAnimation(60); - } else - { ViewboxFloatingBarMarginAnimation(100, true); - } } } - private void PenIcon_Click(object sender, RoutedEventArgs e) - { - + private void PenIcon_Click(object sender, RoutedEventArgs e) { FloatingbarSelectionBG.Visibility = Visibility.Visible; System.Windows.Controls.Canvas.SetLeft(FloatingbarSelectionBG, 28); - if (Pen_Icon.Background == null || StackPanelCanvasControls.Visibility == Visibility.Collapsed) - { + if (Pen_Icon.Background == null || StackPanelCanvasControls.Visibility == Visibility.Collapsed) { inkCanvas.EditingMode = InkCanvasEditingMode.Ink; GridTransparencyFakeBackground.Opacity = 1; @@ -922,20 +789,14 @@ namespace Ink_Canvas /*if (forceEraser && currentMode == 0) BtnColorRed_Click(sender, null);*/ - if (GridBackgroundCover.Visibility == Visibility.Collapsed) - { + if (GridBackgroundCover.Visibility == Visibility.Collapsed) { if (BtnSwitchTheme.Content.ToString() == "浅色") - { BtnSwitch.Content = "黑板"; - } else - { BtnSwitch.Content = "白板"; - } StackPanelPPTButtons.Visibility = Visibility.Visible; } - else - { + else { BtnSwitch.Content = "屏幕"; StackPanelPPTButtons.Visibility = Visibility.Collapsed; } @@ -949,53 +810,40 @@ namespace Ink_Canvas ColorSwitchCheck(); HideSubPanels("pen", true); } - else - { - if (inkCanvas.EditingMode == InkCanvasEditingMode.Ink) - { - if (PenPalette.Visibility == Visibility.Visible) - { + else { + if (inkCanvas.EditingMode == InkCanvasEditingMode.Ink) { + if (PenPalette.Visibility == Visibility.Visible) { AnimationsHelper.HideWithSlideAndFade(PenPalette); AnimationsHelper.HideWithSlideAndFade(BoardPenPalette); } - else - { + else { AnimationsHelper.ShowWithSlideFromBottomAndFade(PenPalette); AnimationsHelper.ShowWithSlideFromBottomAndFade(BoardPenPalette); } } - else - { + else { inkCanvas.EditingMode = InkCanvasEditingMode.Ink; ColorSwitchCheck(); HideSubPanels("pen", true); } - } } - private void ColorThemeSwitch_MouseUp(object sender, RoutedEventArgs e) - { + private void ColorThemeSwitch_MouseUp(object sender, RoutedEventArgs e) { isUselightThemeColor = !isUselightThemeColor; - if (currentMode == 0) - { - isDesktopUselightThemeColor = isUselightThemeColor; - } + if (currentMode == 0) isDesktopUselightThemeColor = isUselightThemeColor; CheckColorTheme(); } - private void EraserIcon_Click(object sender, RoutedEventArgs e) - { + private void EraserIcon_Click(object sender, RoutedEventArgs e) { FloatingbarSelectionBG.Visibility = Visibility.Visible; System.Windows.Controls.Canvas.SetLeft(FloatingbarSelectionBG, 84); forceEraser = true; forcePointEraser = true; - if (Settings.Canvas.EraserShapeType == 0) - { + if (Settings.Canvas.EraserShapeType == 0) { double k = 1; - switch (Settings.Canvas.EraserSize) - { + switch (Settings.Canvas.EraserSize) { case 0: k = 0.5; break; @@ -1009,13 +857,12 @@ namespace Ink_Canvas k = 1.8; break; } + inkCanvas.EraserShape = new EllipseStylusShape(k * 90, k * 90); } - else if (Settings.Canvas.EraserShapeType == 1) - { + else if (Settings.Canvas.EraserShapeType == 1) { double k = 1; - switch (Settings.Canvas.EraserSize) - { + switch (Settings.Canvas.EraserSize) { case 0: k = 0.7; break; @@ -1029,17 +876,16 @@ namespace Ink_Canvas k = 1.6; break; } + inkCanvas.EraserShape = new RectangleStylusShape(k * 90 * 0.6, k * 90); } - if (inkCanvas.EditingMode == InkCanvasEditingMode.EraseByPoint) - { + if (inkCanvas.EditingMode == InkCanvasEditingMode.EraseByPoint) { HideSubPanels(); HideSubPanelsImmediately(); AnimationsHelper.ShowWithSlideFromBottomAndFade(EraserSizePanel); } - else - { + else { HideSubPanels("eraser"); } @@ -1050,8 +896,7 @@ namespace Ink_Canvas CancelSingleFingerDragMode(); } - private void EraserIconByStrokes_Click(object sender, RoutedEventArgs e) - { + private void EraserIconByStrokes_Click(object sender, RoutedEventArgs e) { FloatingbarSelectionBG.Visibility = Visibility.Visible; System.Windows.Controls.Canvas.SetLeft(FloatingbarSelectionBG, 112); @@ -1068,118 +913,88 @@ namespace Ink_Canvas HideSubPanels("eraserByStrokes"); } - private void CursorWithDelIcon_Click(object sender, RoutedEventArgs e) - { - + private void CursorWithDelIcon_Click(object sender, RoutedEventArgs e) { SymbolIconDelete_MouseUp(sender, null); CursorIcon_Click(null, null); } - private void SelectIcon_MouseUp(object sender, RoutedEvent e) - { - + private void SelectIcon_MouseUp(object sender, RoutedEvent e) { forceEraser = true; drawingShapeMode = 0; inkCanvas.IsManipulationEnabled = false; - if (inkCanvas.EditingMode == InkCanvasEditingMode.Select) - { - StrokeCollection selectedStrokes = new StrokeCollection(); - foreach (Stroke stroke in inkCanvas.Strokes) - { + if (inkCanvas.EditingMode == InkCanvasEditingMode.Select) { + var selectedStrokes = new StrokeCollection(); + foreach (var stroke in inkCanvas.Strokes) if (stroke.GetBounds().Width > 0 && stroke.GetBounds().Height > 0) - { selectedStrokes.Add(stroke); - } - } inkCanvas.Select(selectedStrokes); } - else - { + else { inkCanvas.EditingMode = InkCanvasEditingMode.Select; } } - private void CollapseBorderDrawShape(bool isLongPressSelected = false) - { + private void CollapseBorderDrawShape(bool isLongPressSelected = false) { AnimationsHelper.HideWithSlideAndFade(BorderDrawShape); AnimationsHelper.HideWithSlideAndFade(BoardBorderDrawShape); } - private void DrawShapePromptToPen() - { - if (isLongPressSelected == true) - { + private void DrawShapePromptToPen() { + if (isLongPressSelected == true) { HideSubPanels("pen"); } - else - { + else { if (StackPanelCanvasControls.Visibility == Visibility.Visible) - { HideSubPanels("pen"); - } else - { HideSubPanels("cursor"); - } } } - private void CloseBordertools_MouseUp(object sender, MouseButtonEventArgs e) - { + private void CloseBordertools_MouseUp(object sender, MouseButtonEventArgs e) { HideSubPanels(); } #region Left Side Panel - private void BtnFingerDragMode_Click(object sender, RoutedEventArgs e) - { - if (isSingleFingerDragMode) - { + private void BtnFingerDragMode_Click(object sender, RoutedEventArgs e) { + if (isSingleFingerDragMode) { isSingleFingerDragMode = false; BtnFingerDragMode.Content = "单指\n拖动"; } - else - { + else { isSingleFingerDragMode = true; BtnFingerDragMode.Content = "多指\n拖动"; } } - private void BtnUndo_Click(object sender, RoutedEventArgs e) - { - if (inkCanvas.GetSelectedStrokes().Count != 0) - { + private void BtnUndo_Click(object sender, RoutedEventArgs e) { + if (inkCanvas.GetSelectedStrokes().Count != 0) { GridInkCanvasSelectionCover.Visibility = Visibility.Collapsed; inkCanvas.Select(new StrokeCollection()); } + var item = timeMachine.Undo(); ApplyHistoryToCanvas(item); } - private void BtnRedo_Click(object sender, RoutedEventArgs e) - { - if (inkCanvas.GetSelectedStrokes().Count != 0) - { + private void BtnRedo_Click(object sender, RoutedEventArgs e) { + if (inkCanvas.GetSelectedStrokes().Count != 0) { GridInkCanvasSelectionCover.Visibility = Visibility.Collapsed; inkCanvas.Select(new StrokeCollection()); } + var item = timeMachine.Redo(); ApplyHistoryToCanvas(item); } - private void Btn_IsEnabledChanged(object sender, DependencyPropertyChangedEventArgs e) - { + private void Btn_IsEnabledChanged(object sender, DependencyPropertyChangedEventArgs e) { if (!isLoaded) return; - try - { + try { if (((Button)sender).IsEnabled) - { ((UIElement)((Button)sender).Content).Opacity = 1; - } else - { ((UIElement)((Button)sender).Content).Opacity = 0.25; - } } catch { } } @@ -1189,57 +1004,49 @@ namespace Ink_Canvas #region Right Side Panel public static bool CloseIsFromButton = false; - private void BtnExit_Click(object sender, RoutedEventArgs e) - { + + private void BtnExit_Click(object sender, RoutedEventArgs e) { CloseIsFromButton = true; Close(); } - private void BtnRestart_Click(object sender, RoutedEventArgs e) - { + private void BtnRestart_Click(object sender, RoutedEventArgs e) { Process.Start(System.Windows.Forms.Application.ExecutablePath, "-m"); CloseIsFromButton = true; Application.Current.Shutdown(); } - private void SettingsOverlayClick(object sender, MouseButtonEventArgs e) - { - if (isOpeningOrHidingSettingsPane==true) return; + private void SettingsOverlayClick(object sender, MouseButtonEventArgs e) { + if (isOpeningOrHidingSettingsPane == true) return; BtnSettings_Click(null, null); } private bool isOpeningOrHidingSettingsPane = false; - private void BtnSettings_Click(object sender, RoutedEventArgs e) - { - if (BorderSettings.Visibility == Visibility.Visible) - { + private void BtnSettings_Click(object sender, RoutedEventArgs e) { + if (BorderSettings.Visibility == Visibility.Visible) { HideSubPanels(); } - else - { + else { BorderSettingsMask.IsHitTestVisible = true; BorderSettingsMask.Background = new SolidColorBrush(Color.FromArgb(1, 0, 0, 0)); SettingsPanelScrollViewer.ScrollToTop(); var sb = new Storyboard(); // 滑动动画 - var slideAnimation = new DoubleAnimation - { + var slideAnimation = new DoubleAnimation { From = BorderSettings.RenderTransform.Value.OffsetX - 440, // 滑动距离 To = 0, Duration = TimeSpan.FromSeconds(0.6) }; slideAnimation.EasingFunction = new CubicEase() { EasingMode = EasingMode.EaseOut }; - Storyboard.SetTargetProperty(slideAnimation, new PropertyPath("(UIElement.RenderTransform).(TranslateTransform.X)")); + Storyboard.SetTargetProperty(slideAnimation, + new PropertyPath("(UIElement.RenderTransform).(TranslateTransform.X)")); sb.Children.Add(slideAnimation); - sb.Completed += (s, _) => - { - isOpeningOrHidingSettingsPane = false; - }; + sb.Completed += (s, _) => { isOpeningOrHidingSettingsPane = false; }; BorderSettings.Visibility = Visibility.Visible; BorderSettings.RenderTransform = new TranslateTransform(); @@ -1249,43 +1056,28 @@ namespace Ink_Canvas } } - private void BtnThickness_Click(object sender, RoutedEventArgs e) - { + private void BtnThickness_Click(object sender, RoutedEventArgs e) { } - } - - bool forceEraser = false; + private bool forceEraser = false; - private void BtnClear_Click(object sender, RoutedEventArgs e) - { + private void BtnClear_Click(object sender, RoutedEventArgs e) { forceEraser = false; //BorderClearInDelete.Visibility = Visibility.Collapsed; - if (currentMode == 0) - { // 先回到画笔再清屏,避免 TimeMachine 的相关 bug 影响 + if (currentMode == 0) { + // 先回到画笔再清屏,避免 TimeMachine 的相关 bug 影响 if (Pen_Icon.Background == null && StackPanelCanvasControls.Visibility == Visibility.Visible) - { PenIcon_Click(null, null); - } } - else - { - if (Pen_Icon.Background == null) - { - PenIcon_Click(null, null); - } + else { + if (Pen_Icon.Background == null) PenIcon_Click(null, null); } - if (inkCanvas.Strokes.Count != 0) - { - int whiteboardIndex = CurrentWhiteboardIndex; - if (currentMode == 0) - { - whiteboardIndex = 0; - } + if (inkCanvas.Strokes.Count != 0) { + var whiteboardIndex = CurrentWhiteboardIndex; + if (currentMode == 0) whiteboardIndex = 0; strokeCollections[whiteboardIndex] = inkCanvas.Strokes.Clone(); - } ClearStrokes(false); @@ -1293,49 +1085,32 @@ namespace Ink_Canvas CancelSingleFingerDragMode(); - if (Settings.Canvas.ClearCanvasAndClearTimeMachine) - { - timeMachine.ClearStrokeHistory(); - } + if (Settings.Canvas.ClearCanvasAndClearTimeMachine) timeMachine.ClearStrokeHistory(); } - bool lastIsInMultiTouchMode = false; - private void CancelSingleFingerDragMode() - { - if (ToggleSwitchDrawShapeBorderAutoHide.IsOn) - { - CollapseBorderDrawShape(); - } + private bool lastIsInMultiTouchMode = false; + + private void CancelSingleFingerDragMode() { + if (ToggleSwitchDrawShapeBorderAutoHide.IsOn) CollapseBorderDrawShape(); GridInkCanvasSelectionCover.Visibility = Visibility.Collapsed; - if (isSingleFingerDragMode) - { - BtnFingerDragMode_Click(BtnFingerDragMode, null); - } + if (isSingleFingerDragMode) BtnFingerDragMode_Click(BtnFingerDragMode, null); isLongPressSelected = false; } - private void BtnHideControl_Click(object sender, RoutedEventArgs e) - { + private void BtnHideControl_Click(object sender, RoutedEventArgs e) { if (StackPanelControl.Visibility == Visibility.Visible) - { StackPanelControl.Visibility = Visibility.Hidden; - } else - { StackPanelControl.Visibility = Visibility.Visible; - } } - int currentMode = 0; + private int currentMode = 0; - private void BtnSwitch_Click(object sender, RoutedEventArgs e) - { - if (GridTransparencyFakeBackground.Background == Brushes.Transparent) - { - if (currentMode == 0) - { + private void BtnSwitch_Click(object sender, RoutedEventArgs e) { + if (GridTransparencyFakeBackground.Background == Brushes.Transparent) { + if (currentMode == 0) { currentMode++; GridBackgroundCover.Visibility = Visibility.Collapsed; AnimationsHelper.HideWithSlideAndFade(BlackboardLeftSide); @@ -1346,36 +1121,32 @@ namespace Ink_Canvas ClearStrokes(true); RestoreStrokes(); - if (BtnSwitchTheme.Content.ToString() == "浅色") - { + if (BtnSwitchTheme.Content.ToString() == "浅色") { BtnSwitch.Content = "黑板"; BtnExit.Foreground = Brushes.White; } - else - { + else { BtnSwitch.Content = "白板"; - if (isPresentationHaveBlackSpace) - { + if (isPresentationHaveBlackSpace) { BtnExit.Foreground = Brushes.White; //SymbolIconBtnColorBlackContent.Foreground = Brushes.White; ThemeManager.Current.ApplicationTheme = ApplicationTheme.Dark; } - else - { + else { BtnExit.Foreground = Brushes.Black; //SymbolIconBtnColorBlackContent.Foreground = Brushes.White; ThemeManager.Current.ApplicationTheme = ApplicationTheme.Light; } } + StackPanelPPTButtons.Visibility = Visibility.Visible; } + Topmost = true; BtnHideInkCanvas_Click(BtnHideInkCanvas, e); } - else - { - switch ((++currentMode) % 2) - { + else { + switch (++currentMode % 2) { case 0: //屏幕模式 currentMode = 0; GridBackgroundCover.Visibility = Visibility.Collapsed; @@ -1387,24 +1158,20 @@ namespace Ink_Canvas ClearStrokes(true); RestoreStrokes(true); - if (BtnSwitchTheme.Content.ToString() == "浅色") - { + if (BtnSwitchTheme.Content.ToString() == "浅色") { BtnSwitch.Content = "黑板"; BtnExit.Foreground = Brushes.White; //SymbolIconBtnColorBlackContent.Foreground = Brushes.Black; ThemeManager.Current.ApplicationTheme = ApplicationTheme.Dark; } - else - { + else { BtnSwitch.Content = "白板"; - if (isPresentationHaveBlackSpace) - { + if (isPresentationHaveBlackSpace) { BtnExit.Foreground = Brushes.White; //SymbolIconBtnColorBlackContent.Foreground = Brushes.White; ThemeManager.Current.ApplicationTheme = ApplicationTheme.Dark; } - else - { + else { BtnExit.Foreground = Brushes.Black; //SymbolIconBtnColorBlackContent.Foreground = Brushes.White; ThemeManager.Current.ApplicationTheme = ApplicationTheme.Light; @@ -1426,14 +1193,12 @@ namespace Ink_Canvas RestoreStrokes(); BtnSwitch.Content = "屏幕"; - if (BtnSwitchTheme.Content.ToString() == "浅色") - { + if (BtnSwitchTheme.Content.ToString() == "浅色") { BtnExit.Foreground = Brushes.White; //SymbolIconBtnColorBlackContent.Foreground = Brushes.Black; ThemeManager.Current.ApplicationTheme = ApplicationTheme.Dark; } - else - { + else { BtnExit.Foreground = Brushes.Black; //SymbolIconBtnColorBlackContent.Foreground = Brushes.White; ThemeManager.Current.ApplicationTheme = ApplicationTheme.Light; @@ -1446,12 +1211,10 @@ namespace Ink_Canvas } } - int BoundsWidth = 5; + private int BoundsWidth = 5; - private void BtnHideInkCanvas_Click(object sender, RoutedEventArgs e) - { - if (GridTransparencyFakeBackground.Background == Brushes.Transparent) - { + private void BtnHideInkCanvas_Click(object sender, RoutedEventArgs e) { + if (GridTransparencyFakeBackground.Background == Brushes.Transparent) { GridTransparencyFakeBackground.Opacity = 1; GridTransparencyFakeBackground.Background = new SolidColorBrush(StringToColor("#01FFFFFF")); inkCanvas.IsHitTestVisible = true; @@ -1461,71 +1224,52 @@ namespace Ink_Canvas GridInkCanvasSelectionCover.Visibility = Visibility.Collapsed; - if (GridBackgroundCover.Visibility == Visibility.Collapsed) - { + if (GridBackgroundCover.Visibility == Visibility.Collapsed) { if (BtnSwitchTheme.Content.ToString() == "浅色") - { BtnSwitch.Content = "黑板"; - } else - { BtnSwitch.Content = "白板"; - } StackPanelPPTButtons.Visibility = Visibility.Visible; } - else - { + else { BtnSwitch.Content = "屏幕"; StackPanelPPTButtons.Visibility = Visibility.Collapsed; } BtnHideInkCanvas.Content = "隐藏\n画板"; } - else - { + else { // Auto-clear Strokes 要等待截图完成再清理笔记 - if (BtnPPTSlideShowEnd.Visibility != Visibility.Visible) - { + if (BtnPPTSlideShowEnd.Visibility != Visibility.Visible) { if (isLoaded && Settings.Automation.IsAutoClearWhenExitingWritingMode) - { - if (inkCanvas.Strokes.Count > 0) - { + if (inkCanvas.Strokes.Count > 0) { if (Settings.Automation.IsAutoSaveStrokesAtClear && inkCanvas.Strokes.Count > Settings.Automation.MinimumAutomationStrokeNumber) - { SaveScreenShot(true); - } BtnClear_Click(null, null); } - } + inkCanvas.IsHitTestVisible = true; inkCanvas.Visibility = Visibility.Visible; } - else - { - if (isLoaded && Settings.Automation.IsAutoClearWhenExitingWritingMode && !Settings.PowerPointSettings.IsNoClearStrokeOnSelectWhenInPowerPoint) - { - if (inkCanvas.Strokes.Count > 0) - { + else { + if (isLoaded && Settings.Automation.IsAutoClearWhenExitingWritingMode && + !Settings.PowerPointSettings.IsNoClearStrokeOnSelectWhenInPowerPoint) + if (inkCanvas.Strokes.Count > 0) { if (Settings.Automation.IsAutoSaveStrokesAtClear && inkCanvas.Strokes.Count > Settings.Automation.MinimumAutomationStrokeNumber) - { SaveScreenShot(true); - } BtnClear_Click(null, null); } - } - if (Settings.PowerPointSettings.IsShowStrokeOnSelectInPowerPoint) - { + if (Settings.PowerPointSettings.IsShowStrokeOnSelectInPowerPoint) { inkCanvas.Visibility = Visibility.Visible; inkCanvas.IsHitTestVisible = true; } - else - { + else { inkCanvas.IsHitTestVisible = true; inkCanvas.Visibility = Visibility.Visible; } @@ -1536,65 +1280,49 @@ namespace Ink_Canvas GridBackgroundCoverHolder.Visibility = Visibility.Collapsed; - if (currentMode != 0) - { + if (currentMode != 0) { SaveStrokes(); RestoreStrokes(true); } if (BtnSwitchTheme.Content.ToString() == "浅色") - { BtnSwitch.Content = "黑板"; - } else - { BtnSwitch.Content = "白板"; - } StackPanelPPTButtons.Visibility = Visibility.Visible; BtnHideInkCanvas.Content = "显示\n画板"; } - if (GridTransparencyFakeBackground.Background == Brushes.Transparent) - { + if (GridTransparencyFakeBackground.Background == Brushes.Transparent) { StackPanelCanvasControls.Visibility = Visibility.Collapsed; CheckEnableTwoFingerGestureBtnVisibility(false); HideSubPanels("cursor"); } - else - { + else { AnimationsHelper.ShowWithSlideFromLeftAndFade(StackPanelCanvasControls); CheckEnableTwoFingerGestureBtnVisibility(true); } } - private void BtnSwitchSide_Click(object sender, RoutedEventArgs e) - { - if (ViewBoxStackPanelMain.HorizontalAlignment == HorizontalAlignment.Right) - { + private void BtnSwitchSide_Click(object sender, RoutedEventArgs e) { + if (ViewBoxStackPanelMain.HorizontalAlignment == HorizontalAlignment.Right) { ViewBoxStackPanelMain.HorizontalAlignment = HorizontalAlignment.Left; ViewBoxStackPanelShapes.HorizontalAlignment = HorizontalAlignment.Right; } - else - { + else { ViewBoxStackPanelMain.HorizontalAlignment = HorizontalAlignment.Right; ViewBoxStackPanelShapes.HorizontalAlignment = HorizontalAlignment.Left; } } - private void StackPanel_IsVisibleChanged(object sender, DependencyPropertyChangedEventArgs e) - { + private void StackPanel_IsVisibleChanged(object sender, DependencyPropertyChangedEventArgs e) { if (((StackPanel)sender).Visibility == Visibility.Visible) - { GridForLeftSideReservedSpace.Visibility = Visibility.Collapsed; - } else - { GridForLeftSideReservedSpace.Visibility = Visibility.Visible; - } } #endregion - } } \ No newline at end of file diff --git a/Ink Canvas/MainWindow_cs/MW_Hotkeys.cs b/Ink Canvas/MainWindow_cs/MW_Hotkeys.cs index 3bacf50..293be7d 100644 --- a/Ink Canvas/MainWindow_cs/MW_Hotkeys.cs +++ b/Ink Canvas/MainWindow_cs/MW_Hotkeys.cs @@ -5,28 +5,22 @@ namespace Ink_Canvas { public partial class MainWindow : Window { private void Window_MouseWheel(object sender, MouseWheelEventArgs e) { if (StackPanelPPTControls.Visibility != Visibility.Visible || currentMode != 0) return; - if (e.Delta >= 120) { + if (e.Delta >= 120) BtnPPTSlidesUp_Click(BtnPPTSlidesUp, null); - } else if (e.Delta <= -120) { - BtnPPTSlidesDown_Click(BtnPPTSlidesDown, null); - } + else if (e.Delta <= -120) BtnPPTSlidesDown_Click(BtnPPTSlidesDown, null); } private void Main_Grid_PreviewKeyDown(object sender, KeyEventArgs e) { if (StackPanelPPTControls.Visibility != Visibility.Visible || currentMode != 0) return; - if (e.Key == Key.Down || e.Key == Key.PageDown || e.Key == Key.Right || e.Key == Key.N || e.Key == Key.Space) { - BtnPPTSlidesDown_Click(BtnPPTSlidesDown, null); - } - if (e.Key == Key.Up || e.Key == Key.PageUp || e.Key == Key.Left || e.Key == Key.P) { + if (e.Key == Key.Down || e.Key == Key.PageDown || e.Key == Key.Right || e.Key == Key.N || + e.Key == Key.Space) BtnPPTSlidesDown_Click(BtnPPTSlidesDown, null); + if (e.Key == Key.Up || e.Key == Key.PageUp || e.Key == Key.Left || e.Key == Key.P) BtnPPTSlidesUp_Click(BtnPPTSlidesUp, null); - } } private void Window_KeyDown(object sender, KeyEventArgs e) { - if (e.Key == Key.Escape) { - KeyExit(null, null); - } + if (e.Key == Key.Escape) KeyExit(null, null); } private void CommandBinding_CanExecute(object sender, CanExecuteRoutedEventArgs e) { @@ -36,13 +30,15 @@ namespace Ink_Canvas { private void HotKey_Undo(object sender, ExecutedRoutedEventArgs e) { try { SymbolIconUndo_MouseUp(lastBorderMouseDownObject, null); - } catch { } + } + catch { } } private void HotKey_Redo(object sender, ExecutedRoutedEventArgs e) { try { SymbolIconRedo_MouseUp(lastBorderMouseDownObject, null); - } catch { } + } + catch { } } private void HotKey_Clear(object sender, ExecutedRoutedEventArgs e) { @@ -59,25 +55,21 @@ namespace Ink_Canvas { } private void KeyChangeToQuitDrawTool(object sender, ExecutedRoutedEventArgs e) { - if (currentMode != 0) { - ImageBlackboard_MouseUp(lastBorderMouseDownObject, null); - } + if (currentMode != 0) ImageBlackboard_MouseUp(lastBorderMouseDownObject, null); CursorIcon_Click(lastBorderMouseDownObject, null); } private void KeyChangeToSelect(object sender, ExecutedRoutedEventArgs e) { - if (StackPanelCanvasControls.Visibility == Visibility.Visible) { + if (StackPanelCanvasControls.Visibility == Visibility.Visible) SymbolIconSelect_MouseUp(lastBorderMouseDownObject, null); - } } private void KeyChangeToEraser(object sender, ExecutedRoutedEventArgs e) { if (StackPanelCanvasControls.Visibility == Visibility.Visible) { - if (Eraser_Icon.Background != null) { + if (Eraser_Icon.Background != null) EraserIconByStrokes_Click(lastBorderMouseDownObject, null); - } else { + else EraserIcon_Click(lastBorderMouseDownObject, null); - } } } @@ -90,13 +82,11 @@ namespace Ink_Canvas { } private void KeyDrawLine(object sender, ExecutedRoutedEventArgs e) { - if (StackPanelCanvasControls.Visibility == Visibility.Visible) { - BtnDrawLine_Click(lastMouseDownSender, null); - } + if (StackPanelCanvasControls.Visibility == Visibility.Visible) BtnDrawLine_Click(lastMouseDownSender, null); } private void KeyHide(object sender, ExecutedRoutedEventArgs e) { SymbolIconEmoji_MouseUp(null, null); } } -} +} \ No newline at end of file diff --git a/Ink Canvas/MainWindow_cs/MW_Icons.cs b/Ink Canvas/MainWindow_cs/MW_Icons.cs index 5078ba5..11a4572 100644 --- a/Ink Canvas/MainWindow_cs/MW_Icons.cs +++ b/Ink Canvas/MainWindow_cs/MW_Icons.cs @@ -4,10 +4,8 @@ using System.Linq; using System.Text; using System.Threading.Tasks; -namespace Ink_Canvas -{ - public static class XamlGraphicsIconGeometries - { +namespace Ink_Canvas { + public static class XamlGraphicsIconGeometries { public static string LinedCursorIcon = "F0 M24,24z M0,0z M3.85151,2.7073C3.52422,2.57095 3.147,2.64558 2.89629,2.89629 2.64558,3.147 2.57095,3.52422 2.7073,3.85151L9.7773,20.8215C9.91729,21.1575 10.2507,21.3718 10.6145,21.3595 10.9783,21.3473 11.2965,21.1111 11.4135,20.7664L13.4711,14.7085 18.8963,20.1337C19.238,20.4754 19.792,20.4754 20.1337,20.1337 20.4754,19.792 20.4754,19.238 20.1337,18.8963L14.7085,13.4711 20.7664,11.4135C21.1111,11.2965 21.3473,10.9783 21.3595,10.6145 21.3718,10.2507 21.1575,9.91729 20.8215,9.7773L3.85151,2.7073z M10.5017,18.0097L5.13984,5.13984 18.0097,10.5017 12.8136,12.2665C12.5561,12.3539,12.3539,12.5561,12.2665,12.8136L10.5017,18.0097z"; @@ -38,4 +36,4 @@ namespace Ink_Canvas public static string SolidLassoSelectIcon = "F1 M24,24z M0,0z M14.6618,10.9193C14.4981,10.784 14.2733,10.6788 14.0025,10.6788 13.9951,10.6788 13.9877,10.6789 13.9803,10.6791 13.7083,10.6872 13.4502,10.8008 13.2607,10.9961 13.0712,11.1913 12.9653,11.4526 12.9653,11.7246L12.9653,20.3314C12.9653,20.3403 12.9655,20.3491 12.9658,20.358 12.9734,20.5733 13.0468,20.7811 13.176,20.9534 13.3053,21.1258 13.4842,21.2544 13.6888,21.3219 13.765,21.3471 13.8447,21.36 13.925,21.36L14.0025,21.36C14.1661,21.36 14.3276,21.3218 14.474,21.2486 14.6204,21.1754 14.7477,21.0692 14.8459,20.9382 14.8542,20.9272 14.8622,20.9159 14.8698,20.9045L16.8582,17.9258 20.3145,17.9258C20.5287,17.9281 20.7384,17.8641 20.9149,17.7424 21.0941,17.6187 21.2299,17.4417 21.3029,17.2365 21.3759,17.0313 21.3825,16.8084 21.3217,16.5993 21.262,16.3936 21.14,16.2117 20.9729,16.0782L14.6618,10.9193z M8.14548,20.0044C7.70454,19.6737 7.34665,19.2448 7.10016,18.7519 6.94658,18.4447 6.83888,18.1179 6.7795,17.7818 7.131,17.6605 7.45404,17.4604 7.72196,17.1924 7.74959,17.1648 7.77649,17.1366 7.80267,17.1078 8.5567,17.4118 9.3392,17.6365 10.1444,17.7694 10.5548,17.8372 10.9424,17.5594 11.0101,17.149 11.0779,16.7387 10.8001,16.3511 10.3897,16.2833 9.72172,16.1731 9.06686,15.9883 8.42926,15.7362 8.44084,15.6393 8.44672,15.5413 8.44672,15.4427 8.44672,14.7865 8.18602,14.1571 7.72196,13.693 7.25791,13.229 6.62852,12.9682 5.97224,12.9682 5.65536,12.9682 5.34474,13.029 5.05598,13.1441 4.47073,12.3026 4.15196,11.303 4.14328,10.2756 4.14532,7.03688 7.49758,4.1462 11.9971,4.1462 16.4941,4.1462 19.8451,7.03371 19.8508,10.2703 19.8388,10.7807 19.7549,11.2869 19.6016,11.7739 19.4767,12.1706 19.697,12.5934 20.0938,12.7183 20.4905,12.8432 20.9134,12.6228 21.0383,12.2261 21.2351,11.6008 21.3424,10.9507 21.3568,10.2952L21.357,10.2786C21.357,5.91009 16.9982,2.64 11.9971,2.64 6.9959,2.64 2.63705,5.91009 2.63705,10.2786L2.6371,10.2845C2.6479,11.6579 3.08647,12.993 3.89074,14.1047 3.63615,14.5007 3.49777,14.9646 3.49777,15.4427 3.49777,16.099 3.75847,16.7284 4.22252,17.1924 4.51465,17.4846 4.87229,17.6961 5.26092,17.8128 5.33333,18.3726 5.49917,18.9178 5.75297,19.4255 6.10404,20.1276 6.61375,20.7383 7.24176,21.2093 7.5745,21.4589 8.04654,21.3915 8.2961,21.0587 8.54566,20.726 8.47822,20.2539 8.14548,20.0044z"; } -} +} \ No newline at end of file diff --git a/Ink Canvas/MainWindow_cs/MW_Notification.cs b/Ink Canvas/MainWindow_cs/MW_Notification.cs index b19a948..25d3151 100644 --- a/Ink Canvas/MainWindow_cs/MW_Notification.cs +++ b/Ink Canvas/MainWindow_cs/MW_Notification.cs @@ -6,16 +6,16 @@ using System.Windows; namespace Ink_Canvas { public partial class MainWindow : Window { - int lastNotificationShowTime = 0; - int notificationShowTime = 2500; + private int lastNotificationShowTime = 0; + private int notificationShowTime = 2500; public static void ShowNewMessage(string notice, bool isShowImmediately = true) { - (Application.Current?.Windows.Cast().FirstOrDefault(window => window is MainWindow) as MainWindow)?.ShowNotification(notice, isShowImmediately); + (Application.Current?.Windows.Cast().FirstOrDefault(window => window is MainWindow) as MainWindow) + ?.ShowNotification(notice, isShowImmediately); } public void ShowNotification(string notice, bool isShowImmediately = true) { - try - { + try { lastNotificationShowTime = Environment.TickCount; TextBlockNotice.Text = notice; @@ -24,14 +24,12 @@ namespace Ink_Canvas { new Thread(new ThreadStart(() => { Thread.Sleep(notificationShowTime + 300); if (Environment.TickCount - lastNotificationShowTime >= notificationShowTime) - { Application.Current.Dispatcher.Invoke(() => { AnimationsHelper.HideWithSlideAndFade(GridNotifications); }); - } })).Start(); } catch { } } } -} +} \ No newline at end of file diff --git a/Ink Canvas/MainWindow_cs/MW_PPT.cs b/Ink Canvas/MainWindow_cs/MW_PPT.cs index 92b55e0..cd7114d 100644 --- a/Ink Canvas/MainWindow_cs/MW_PPT.cs +++ b/Ink Canvas/MainWindow_cs/MW_PPT.cs @@ -21,14 +21,15 @@ using iNKORE.UI.WPF.Modern; namespace Ink_Canvas { public partial class MainWindow : Window { public static Microsoft.Office.Interop.PowerPoint.Application pptApplication = null; - public static Microsoft.Office.Interop.PowerPoint.Presentation presentation = null; - public static Microsoft.Office.Interop.PowerPoint.Slides slides = null; - public static Microsoft.Office.Interop.PowerPoint.Slide slide = null; + public static Presentation presentation = null; + public static Slides slides = null; + public static Slide slide = null; public static int slidescount = 0; private void BtnCheckPPT_Click(object sender, RoutedEventArgs e) { try { - pptApplication = (Microsoft.Office.Interop.PowerPoint.Application)Marshal.GetActiveObject("PowerPoint.Application"); + pptApplication = + (Microsoft.Office.Interop.PowerPoint.Application)Marshal.GetActiveObject("PowerPoint.Application"); //pptApplication.SlideShowWindows[1].View.Next(); if (pptApplication != null) { //获得演示文稿对象 @@ -46,7 +47,8 @@ namespace Ink_Canvas { // 在普通视图下这种方式可以获得当前选中的幻灯片对象 // 然而在阅读模式下,这种方式会出现异常 slide = slides[pptApplication.ActiveWindow.Selection.SlideRange.SlideNumber]; - } catch { + } + catch { // 在阅读模式下出现异常时,通过下面的方式来获得当前选中的幻灯片对象 slide = pptApplication.SlideShowWindows[1].View.Slide; } @@ -55,7 +57,8 @@ namespace Ink_Canvas { if (pptApplication == null) throw new Exception(); //BtnCheckPPT.Visibility = Visibility.Collapsed; StackPanelPPTControls.Visibility = Visibility.Visible; - } catch { + } + catch { //BtnCheckPPT.Visibility = Visibility.Visible; StackPanelPPTControls.Visibility = Visibility.Collapsed; BottomViewboxPPTSidesControl.Visibility = Visibility.Collapsed; @@ -72,18 +75,16 @@ namespace Ink_Canvas { SaveSettingsToFile(); } - public static bool isWPSSupportOn => Settings.PowerPointSettings.IsSupportWPS; + private static bool isWPSSupportOn => Settings.PowerPointSettings.IsSupportWPS; public static bool IsShowingRestoreHiddenSlidesWindow = false; - public static bool IsShowingAutoplaySlidesWindow = false; + private static bool IsShowingAutoplaySlidesWindow = false; private void TimerCheckPPT_Elapsed(object sender, ElapsedEventArgs e) { if (IsShowingRestoreHiddenSlidesWindow) return; try { - Process[] processes = Process.GetProcessesByName("wpp"); - if (processes.Length > 0 && !isWPSSupportOn) { - return; - } + var processes = Process.GetProcessesByName("wpp"); + if (processes.Length > 0 && !isWPSSupportOn) return; //使用下方提前创建 PowerPoint 实例,将导致 PowerPoint 不再有启动界面 //pptApplication = (Microsoft.Office.Interop.PowerPoint.Application)Activator.CreateInstance(Marshal.GetTypeFromCLSID(new Guid("91493441-5A91-11CF-8700-00AA0060263B"))); @@ -92,7 +93,8 @@ namespace Ink_Canvas { //new ComAwareEventInfo(typeof(EApplication_Event), "SlideShowNextSlide").AddEventHandler(pptApplication, new EApplication_SlideShowNextSlideEventHandler(this.PptApplication_SlideShowNextSlide)); //ConfigHelper.Instance.IsInitApplicationSuccessful = true; - pptApplication = (Microsoft.Office.Interop.PowerPoint.Application)Marshal.GetActiveObject("PowerPoint.Application"); + pptApplication = + (Microsoft.Office.Interop.PowerPoint.Application)Marshal.GetActiveObject("PowerPoint.Application"); if (pptApplication != null) { timerCheckPPT.Stop(); @@ -113,7 +115,8 @@ namespace Ink_Canvas { // 在普通视图下这种方式可以获得当前选中的幻灯片对象 // 然而在阅读模式下,这种方式会出现异常 slide = slides[pptApplication.ActiveWindow.Selection.SlideRange.SlideNumber]; - } catch { + } + catch { // 在阅读模式下出现异常时,通过下面的方式来获得当前选中的幻灯片对象 slide = pptApplication.SlideShowWindows[1].View.Slide; } @@ -125,22 +128,22 @@ namespace Ink_Canvas { // 跳转到上次播放页 if (Settings.PowerPointSettings.IsNotifyPreviousPage) Application.Current.Dispatcher.BeginInvoke(() => { - string folderPath = Settings.Automation.AutoSavedStrokesLocation + @"\Auto Saved - Presentations\" + presentation.Name + "_" + presentation.Slides.Count; + var folderPath = Settings.Automation.AutoSavedStrokesLocation + + @"\Auto Saved - Presentations\" + presentation.Name + "_" + + presentation.Slides.Count; try { - if (File.Exists(folderPath + "/Position")) { - if (int.TryParse(File.ReadAllText(folderPath + "/Position"), out var page)) { - if (page <= 0) return; - new YesOrNoNotificationWindow($"上次播放到了第 {page} 页, 是否立即跳转", () => { - if (pptApplication.SlideShowWindows.Count >= 1) { - // 如果已经播放了的话, 跳转 - presentation.SlideShowWindow.View.GotoSlide(page); - } else { - presentation.Windows[1].View.GotoSlide(page); - } - }).ShowDialog(); - } - } - } catch (Exception ex) { + if (!File.Exists(folderPath + "/Position")) return; + if (!int.TryParse(File.ReadAllText(folderPath + "/Position"), out var page)) return; + if (page <= 0) return; + new YesOrNoNotificationWindow($"上次播放到了第 {page} 页, 是否立即跳转", () => { + if (pptApplication.SlideShowWindows.Count >= 1) + // 如果已经播放了的话, 跳转 + presentation.SlideShowWindow.View.GotoSlide(page); + else + presentation.Windows[1].View.GotoSlide(page); + }).ShowDialog(); + } + catch (Exception ex) { LogHelper.WriteLogToFile(ex.ToString(), LogHelper.LogType.Error); } }, DispatcherPriority.Normal); @@ -148,26 +151,23 @@ namespace Ink_Canvas { //检查是否有隐藏幻灯片 if (Settings.PowerPointSettings.IsNotifyHiddenPage) { - bool isHaveHiddenSlide = false; - foreach (Slide slide in slides) { + var isHaveHiddenSlide = false; + foreach (Slide slide in slides) if (slide.SlideShowTransition.Hidden == Microsoft.Office.Core.MsoTriState.msoTrue) { isHaveHiddenSlide = true; break; } - } Application.Current.Dispatcher.BeginInvoke(() => { if (isHaveHiddenSlide && !IsShowingRestoreHiddenSlidesWindow) { IsShowingRestoreHiddenSlidesWindow = true; new YesOrNoNotificationWindow("检测到此演示文档中包含隐藏的幻灯片,是否取消隐藏?", () => { - foreach (Slide slide in slides) { + foreach (Slide slide in slides) if (slide.SlideShowTransition.Hidden == - Microsoft.Office.Core.MsoTriState.msoTrue) { + Microsoft.Office.Core.MsoTriState.msoTrue) slide.SlideShowTransition.Hidden = Microsoft.Office.Core.MsoTriState.msoFalse; - } - } }).ShowDialog(); } @@ -177,33 +177,30 @@ namespace Ink_Canvas { //检测是否有自动播放 if (Settings.PowerPointSettings.IsNotifyAutoPlayPresentation) - { Application.Current.Dispatcher.BeginInvoke(() => { - bool isHaveAutoPlaySettings = false; - isHaveAutoPlaySettings = presentation.SlideShowSettings.AdvanceMode != PpSlideShowAdvanceMode.ppSlideShowManualAdvance; - if (isHaveAutoPlaySettings && !IsShowingAutoplaySlidesWindow) - { + var isHaveAutoPlaySettings = false; + isHaveAutoPlaySettings = presentation.SlideShowSettings.AdvanceMode != + PpSlideShowAdvanceMode.ppSlideShowManualAdvance; + if (isHaveAutoPlaySettings && !IsShowingAutoplaySlidesWindow) { IsShowingAutoplaySlidesWindow = true; new YesOrNoNotificationWindow("检测到此演示文档中有自动播放或排练计时已经启用,是否取消?", () => { - presentation.SlideShowSettings.AdvanceMode = PpSlideShowAdvanceMode.ppSlideShowManualAdvance; + presentation.SlideShowSettings.AdvanceMode = + PpSlideShowAdvanceMode.ppSlideShowManualAdvance; }).ShowDialog(); } BtnPPTSlideShow.Visibility = Visibility.Visible; }, DispatcherPriority.Normal); - } - + //如果检测到已经开始放映,则立即进入画板模式 - if (pptApplication.SlideShowWindows.Count >= 1) { + if (pptApplication.SlideShowWindows.Count >= 1) PptApplication_SlideShowBegin(pptApplication.SlideShowWindows[1]); - } - } catch { + } + catch { //StackPanelPPTControls.Visibility = Visibility.Collapsed; - Application.Current.Dispatcher.Invoke(() => { - BtnPPTSlideShow.Visibility = Visibility.Collapsed; - }); + Application.Current.Dispatcher.Invoke(() => { BtnPPTSlideShow.Visibility = Visibility.Collapsed; }); timerCheckPPT.Start(); } } @@ -221,25 +218,22 @@ namespace Ink_Canvas { }); } - bool isPresentationHaveBlackSpace = false; + private bool isPresentationHaveBlackSpace = false; private string pptName = null; + private void PptApplication_SlideShowBegin(SlideShowWindow Wn) { - if (Settings.Automation.IsAutoFoldInPPTSlideShow && !isFloatingBarFolded) { + if (Settings.Automation.IsAutoFoldInPPTSlideShow && !isFloatingBarFolded) FoldFloatingBar_MouseUp(null, null); - } else if (isFloatingBarFolded) { - UnFoldFloatingBar_MouseUp(null, null); - } + else if (isFloatingBarFolded) UnFoldFloatingBar_MouseUp(null, null); LogHelper.WriteLogToFile("PowerPoint Application Slide Show Begin", LogHelper.LogType.Event); Application.Current.Dispatcher.Invoke(() => { - if (currentMode != 0) { - ImageBlackboard_MouseUp(null, null); - } + if (currentMode != 0) ImageBlackboard_MouseUp(null, null); //调整颜色 - double screenRatio = SystemParameters.PrimaryScreenWidth / SystemParameters.PrimaryScreenHeight; + var screenRatio = SystemParameters.PrimaryScreenWidth / SystemParameters.PrimaryScreenHeight; if (Math.Abs(screenRatio - 16.0 / 9) <= -0.01) { if (Wn.Presentation.PageSetup.SlideWidth / Wn.Presentation.PageSetup.SlideHeight < 1.65) { isPresentationHaveBlackSpace = true; @@ -251,14 +245,15 @@ namespace Ink_Canvas { //SymbolIconBtnColorBlackContent.Foreground = Brushes.White; ThemeManager.Current.ApplicationTheme = ApplicationTheme.Dark; //BtnExit.Background = new SolidColorBrush(StringToColor("#AACCCCCC")); - } else { + } + else { //Dark //BtnExit.Background = new SolidColorBrush(StringToColor("#AA555555")); } } - } else if (screenRatio == -256 / 135) { - } + else if (screenRatio == -256 / 135) { } + lastDesktopInkColor = 1; @@ -271,39 +266,45 @@ namespace Ink_Canvas { LogHelper.NewLog("Slides Count: " + slidescount.ToString()); //检查是否有已有墨迹,并加载 - if (Settings.PowerPointSettings.IsAutoSaveStrokesInPowerPoint) { - if (Directory.Exists(Settings.Automation.AutoSavedStrokesLocation + @"\Auto Saved - Presentations\" + Wn.Presentation.Name + "_" + Wn.Presentation.Slides.Count)) { + if (Settings.PowerPointSettings.IsAutoSaveStrokesInPowerPoint) + if (Directory.Exists(Settings.Automation.AutoSavedStrokesLocation + + @"\Auto Saved - Presentations\" + Wn.Presentation.Name + "_" + + Wn.Presentation.Slides.Count)) { LogHelper.WriteLogToFile("Found saved strokes", LogHelper.LogType.Trace); - FileInfo[] files = new DirectoryInfo(Settings.Automation.AutoSavedStrokesLocation + @"\Auto Saved - Presentations\" + Wn.Presentation.Name + "_" + Wn.Presentation.Slides.Count).GetFiles(); - int count = 0; - foreach (FileInfo file in files) { + var files = new DirectoryInfo(Settings.Automation.AutoSavedStrokesLocation + + @"\Auto Saved - Presentations\" + Wn.Presentation.Name + "_" + + Wn.Presentation.Slides.Count).GetFiles(); + var count = 0; + foreach (var file in files) if (file.Name != "Position") { - int i = -1; + var i = -1; try { - i = int.Parse(System.IO.Path.GetFileNameWithoutExtension(file.Name)); + i = int.Parse(Path.GetFileNameWithoutExtension(file.Name)); memoryStreams[i] = new MemoryStream(File.ReadAllBytes(file.FullName)); memoryStreams[i].Position = 0; count++; - } catch (Exception ex) { - LogHelper.WriteLogToFile(string.Format("Failed to load strokes on Slide {0}\n{1}", i, ex.ToString()), LogHelper.LogType.Error); + } + catch (Exception ex) { + LogHelper.WriteLogToFile( + $"Failed to load strokes on Slide {i}\n{ex.ToString()}", + LogHelper.LogType.Error); } } - } - LogHelper.WriteLogToFile(string.Format("Loaded {0} saved strokes", count.ToString())); + + LogHelper.WriteLogToFile($"Loaded {count.ToString()} saved strokes"); } - } StackPanelPPTControls.Visibility = Visibility.Visible; - if (Settings.PowerPointSettings.IsShowBottomPPTNavigationPanel) { + if (Settings.PowerPointSettings.IsShowBottomPPTNavigationPanel) AnimationsHelper.ShowWithSlideFromBottomAndFade(BottomViewboxPPTSidesControl); - } else { + else BottomViewboxPPTSidesControl.Visibility = Visibility.Collapsed; - } if (Settings.PowerPointSettings.IsShowSidePPTNavigationPanel) { AnimationsHelper.ShowWithScaleFromLeft(LeftSidePanelForPPTNavigation); AnimationsHelper.ShowWithScaleFromRight(RightSidePanelForPPTNavigation); - } else { + } + else { LeftSidePanelForPPTNavigation.Visibility = Visibility.Collapsed; RightSidePanelForPPTNavigation.Visibility = Visibility.Collapsed; } @@ -312,13 +313,10 @@ namespace Ink_Canvas { BtnPPTSlideShowEnd.Visibility = Visibility.Visible; ViewBoxStackPanelMain.Margin = new Thickness(10, 10, 10, 10); - if (Settings.Appearance.IsColorfulViewboxFloatingBar) { - ViewboxFloatingBar.Opacity = 0.8; - } else { - ViewboxFloatingBar.Opacity = 0.5; - } + ViewboxFloatingBar.Opacity = Settings.Appearance.IsColorfulViewboxFloatingBar ? 0.8 : 0.5; - if (Settings.PowerPointSettings.IsShowCanvasAtNewSlideShow && GridTransparencyFakeBackground.Background == Brushes.Transparent) { + if (Settings.PowerPointSettings.IsShowCanvasAtNewSlideShow && + GridTransparencyFakeBackground.Background == Brushes.Transparent) { if (currentMode != 0) { currentMode = 0; GridBackgroundCover.Visibility = Visibility.Collapsed; @@ -329,13 +327,10 @@ namespace Ink_Canvas { //SaveStrokes(); ClearStrokes(true); - if (BtnSwitchTheme.Content.ToString() == "浅色") { - BtnSwitch.Content = "黑板"; - } else { - BtnSwitch.Content = "白板"; - } + BtnSwitch.Content = BtnSwitchTheme.Content.ToString() == "浅色" ? "黑板" : "白板"; StackPanelPPTButtons.Visibility = Visibility.Visible; } + BtnHideInkCanvas_Click(BtnHideInkCanvas, null); } @@ -343,9 +338,8 @@ namespace Ink_Canvas { BorderFloatingBarMainControls.Visibility = Visibility.Visible; - if (Settings.PowerPointSettings.IsShowCanvasAtNewSlideShow) { + if (Settings.PowerPointSettings.IsShowCanvasAtNewSlideShow) BorderPenColorRed_MouseUp(BorderPenColorRed, null); - } isEnteredSlideShowEndEvent = false; PptNavigationTextBlock.Text = $"{Wn.View.CurrentShowPosition}/{Wn.Presentation.Slides.Count}"; @@ -353,14 +347,13 @@ namespace Ink_Canvas { new Thread(new ThreadStart(() => { Thread.Sleep(100); - Application.Current.Dispatcher.Invoke(() => { - ViewboxFloatingBarMarginAnimation(60); - }); + Application.Current.Dispatcher.Invoke(() => { ViewboxFloatingBarMarginAnimation(60); }); })).Start(); }); } - bool isEnteredSlideShowEndEvent = false; //防止重复调用本函数导致墨迹保存失效 + private bool isEnteredSlideShowEndEvent = false; //防止重复调用本函数导致墨迹保存失效 + private async void PptApplication_SlideShowEnd(Presentation Pres) { if (isFloatingBarFolded) UnFoldFloatingBar_MouseUp(null, null); @@ -369,32 +362,38 @@ namespace Ink_Canvas { LogHelper.WriteLogToFile("Detected previous entrance, returning"); return; } + isEnteredSlideShowEndEvent = true; if (Settings.PowerPointSettings.IsAutoSaveStrokesInPowerPoint) { - string folderPath = Settings.Automation.AutoSavedStrokesLocation + @"\Auto Saved - Presentations\" + Pres.Name + "_" + Pres.Slides.Count; - if (!Directory.Exists(folderPath)) { - Directory.CreateDirectory(folderPath); - } + var folderPath = Settings.Automation.AutoSavedStrokesLocation + @"\Auto Saved - Presentations\" + + Pres.Name + "_" + Pres.Slides.Count; + if (!Directory.Exists(folderPath)) Directory.CreateDirectory(folderPath); try { File.WriteAllText(folderPath + "/Position", previousSlideID.ToString()); - } catch { } - for (int i = 1; i <= Pres.Slides.Count; i++) { - if (memoryStreams[i] != null) { + } + catch { } + + for (var i = 1; i <= Pres.Slides.Count; i++) + if (memoryStreams[i] != null) try { if (memoryStreams[i].Length > 8) { - byte[] srcBuf = new Byte[memoryStreams[i].Length]; - int byteLength = memoryStreams[i].Read(srcBuf, 0, srcBuf.Length); + var srcBuf = new byte[memoryStreams[i].Length]; + var byteLength = memoryStreams[i].Read(srcBuf, 0, srcBuf.Length); File.WriteAllBytes(folderPath + @"\" + i.ToString("0000") + ".icstk", srcBuf); - LogHelper.WriteLogToFile(string.Format("Saved strokes for Slide {0}, size={1}, byteLength={2}", i.ToString(), memoryStreams[i].Length, byteLength)); - } else { + LogHelper.WriteLogToFile(string.Format( + "Saved strokes for Slide {0}, size={1}, byteLength={2}", i.ToString(), + memoryStreams[i].Length, byteLength)); + } + else { File.Delete(folderPath + @"\" + i.ToString("0000") + ".icstk"); } - } catch (Exception ex) { - LogHelper.WriteLogToFile(string.Format("Failed to save strokes for Slide {0}\n{1}", i, ex.ToString()), LogHelper.LogType.Error); + } + catch (Exception ex) { + LogHelper.WriteLogToFile( + $"Failed to save strokes for Slide {i}\n{ex.ToString()}", + LogHelper.LogType.Error); File.Delete(folderPath + @"\" + i.ToString("0000") + ".icstk"); } - } - } } Application.Current.Dispatcher.Invoke(() => { @@ -405,7 +404,8 @@ namespace Ink_Canvas { BtnExit.Foreground = Brushes.Black; //SymbolIconBtnColorBlackContent.Foreground = Brushes.White; ThemeManager.Current.ApplicationTheme = ApplicationTheme.Light; - } else { + } + else { //Dark } @@ -429,61 +429,58 @@ namespace Ink_Canvas { ClearStrokes(true); //RestoreStrokes(true); - if (BtnSwitchTheme.Content.ToString() == "浅色") { - BtnSwitch.Content = "黑板"; - } else { - BtnSwitch.Content = "白板"; - } + BtnSwitch.Content = BtnSwitchTheme.Content.ToString() == "浅色" ? "黑板" : "白板"; StackPanelPPTButtons.Visibility = Visibility.Visible; } ClearStrokes(true); - if (GridTransparencyFakeBackground.Background != Brushes.Transparent) { + if (GridTransparencyFakeBackground.Background != Brushes.Transparent) BtnHideInkCanvas_Click(BtnHideInkCanvas, null); - } - if (Settings.Appearance.IsColorfulViewboxFloatingBar) { + if (Settings.Appearance.IsColorfulViewboxFloatingBar) ViewboxFloatingBar.Opacity = 0.95; - } else { + else ViewboxFloatingBar.Opacity = 1; - } }); await Task.Delay(150); - ViewboxFloatingBarMarginAnimation(100,true); + ViewboxFloatingBarMarginAnimation(100, true); } - int previousSlideID = 0; - MemoryStream[] memoryStreams = new MemoryStream[50]; + private int previousSlideID = 0; + private MemoryStream[] memoryStreams = new MemoryStream[50]; private void PptApplication_SlideShowNextSlide(SlideShowWindow Wn) { - LogHelper.WriteLogToFile(string.Format("PowerPoint Next Slide (Slide {0})", Wn.View.CurrentShowPosition), LogHelper.LogType.Event); - if (Wn.View.CurrentShowPosition != previousSlideID) { - Application.Current.Dispatcher.Invoke(() => { - MemoryStream ms = new MemoryStream(); - inkCanvas.Strokes.Save(ms); - ms.Position = 0; - memoryStreams[previousSlideID] = ms; + LogHelper.WriteLogToFile($"PowerPoint Next Slide (Slide {Wn.View.CurrentShowPosition})", + LogHelper.LogType.Event); + if (Wn.View.CurrentShowPosition == previousSlideID) return; + Application.Current.Dispatcher.Invoke(() => { + var ms = new MemoryStream(); + inkCanvas.Strokes.Save(ms); + ms.Position = 0; + memoryStreams[previousSlideID] = ms; - if (inkCanvas.Strokes.Count > Settings.Automation.MinimumAutomationStrokeNumber && Settings.PowerPointSettings.IsAutoSaveScreenShotInPowerPoint && !_isPptClickingBtnTurned) - SaveScreenShot(true, Wn.Presentation.Name + "/" + Wn.View.CurrentShowPosition); - _isPptClickingBtnTurned = false; + if (inkCanvas.Strokes.Count > Settings.Automation.MinimumAutomationStrokeNumber && + Settings.PowerPointSettings.IsAutoSaveScreenShotInPowerPoint && !_isPptClickingBtnTurned) + SaveScreenShot(true, Wn.Presentation.Name + "/" + Wn.View.CurrentShowPosition); + _isPptClickingBtnTurned = false; - ClearStrokes(true); - timeMachine.ClearStrokeHistory(); + ClearStrokes(true); + timeMachine.ClearStrokeHistory(); - try { - if (memoryStreams[Wn.View.CurrentShowPosition] != null && memoryStreams[Wn.View.CurrentShowPosition].Length > 0) { - inkCanvas.Strokes.Add(new StrokeCollection(memoryStreams[Wn.View.CurrentShowPosition])); - } - } catch { } + try { + if (memoryStreams[Wn.View.CurrentShowPosition] != null && + memoryStreams[Wn.View.CurrentShowPosition].Length > 0) + inkCanvas.Strokes.Add(new StrokeCollection(memoryStreams[Wn.View.CurrentShowPosition])); + } + catch { + // ignored + } - PptNavigationTextBlock.Text = $"{Wn.View.CurrentShowPosition}/{Wn.Presentation.Slides.Count}"; - }); - previousSlideID = Wn.View.CurrentShowPosition; - - } + PptNavigationTextBlock.Text = $"{Wn.View.CurrentShowPosition}/{Wn.Presentation.Slides.Count}"; + }); + previousSlideID = Wn.View.CurrentShowPosition; } private bool _isPptClickingBtnTurned = false; @@ -501,18 +498,28 @@ namespace Ink_Canvas { if (inkCanvas.Strokes.Count > Settings.Automation.MinimumAutomationStrokeNumber && Settings.PowerPointSettings.IsAutoSaveScreenShotInPowerPoint) - SaveScreenShot(true, pptApplication.SlideShowWindows[1].Presentation.Name + "/" + pptApplication.SlideShowWindows[1].View.CurrentShowPosition); + SaveScreenShot(true, + pptApplication.SlideShowWindows[1].Presentation.Name + "/" + + pptApplication.SlideShowWindows[1].View.CurrentShowPosition); try { new Thread(new ThreadStart(() => { try { pptApplication.SlideShowWindows[1].Activate(); - } catch { } + } + catch { + // ignored + } + try { pptApplication.SlideShowWindows[1].View.Previous(); - } catch { } // Without this catch{}, app will crash when click the pre-page button in the fir page in some special env. + } + catch { + // ignored + } // Without this catch{}, app will crash when click the pre-page button in the fir page in some special env. })).Start(); - } catch { + } + catch { StackPanelPPTControls.Visibility = Visibility.Collapsed; BottomViewboxPPTSidesControl.Visibility = Visibility.Collapsed; LeftSidePanelForPPTNavigation.Visibility = Visibility.Collapsed; @@ -528,20 +535,31 @@ namespace Ink_Canvas { AnimationsHelper.HideWithSlideAndFade(BlackboardRightSide); currentMode = 0; } + _isPptClickingBtnTurned = true; if (inkCanvas.Strokes.Count > Settings.Automation.MinimumAutomationStrokeNumber && Settings.PowerPointSettings.IsAutoSaveScreenShotInPowerPoint) - SaveScreenShot(true, pptApplication.SlideShowWindows[1].Presentation.Name + "/" + pptApplication.SlideShowWindows[1].View.CurrentShowPosition); + SaveScreenShot(true, + pptApplication.SlideShowWindows[1].Presentation.Name + "/" + + pptApplication.SlideShowWindows[1].View.CurrentShowPosition); try { new Thread(new ThreadStart(() => { try { pptApplication.SlideShowWindows[1].Activate(); - } catch { } + } + catch { + // ignored + } + try { pptApplication.SlideShowWindows[1].View.Next(); - } catch { } + } + catch { + // ignored + } })).Start(); - } catch { + } + catch { StackPanelPPTControls.Visibility = Visibility.Collapsed; BottomViewboxPPTSidesControl.Visibility = Visibility.Collapsed; LeftSidePanelForPPTNavigation.Visibility = Visibility.Collapsed; @@ -557,7 +575,9 @@ namespace Ink_Canvas { CursorIcon_Click(null, null); try { pptApplication.SlideShowWindows[1].SlideNavigation.Visible = true; - } catch { } + } + catch { } + // 控制居中 if (!isFloatingBarFolded) { await Task.Delay(100); @@ -569,24 +589,31 @@ namespace Ink_Canvas { new Thread(new ThreadStart(() => { try { presentation.SlideShowSettings.Run(); - } catch { } + } + catch { } })).Start(); } private async void BtnPPTSlideShowEnd_Click(object sender, RoutedEventArgs e) { Application.Current.Dispatcher.Invoke(() => { try { - MemoryStream ms = new MemoryStream(); + var ms = new MemoryStream(); inkCanvas.Strokes.Save(ms); ms.Position = 0; memoryStreams[pptApplication.SlideShowWindows[1].View.CurrentShowPosition] = ms; timeMachine.ClearStrokeHistory(); - } catch { } + } + catch { + // ignored + } }); new Thread(new ThreadStart(() => { try { pptApplication.SlideShowWindows[1].View.Exit(); - } catch { } + } + catch { + // ignored + } })).Start(); HideSubPanels("cursor"); @@ -608,4 +635,4 @@ namespace Ink_Canvas { BtnPPTSlideShowEnd_Click(BtnPPTSlideShowEnd, null); } } -} +} \ No newline at end of file diff --git a/Ink Canvas/MainWindow_cs/MW_Save&OpenStrokes.cs b/Ink Canvas/MainWindow_cs/MW_Save&OpenStrokes.cs index 76c4972..5980144 100644 --- a/Ink Canvas/MainWindow_cs/MW_Save&OpenStrokes.cs +++ b/Ink Canvas/MainWindow_cs/MW_Save&OpenStrokes.cs @@ -22,27 +22,24 @@ namespace Ink_Canvas { private void SaveInkCanvasStrokes(bool newNotice = true, bool saveByUser = false) { try { - string savePath = Settings.Automation.AutoSavedStrokesLocation - + (saveByUser ? @"\User Saved - " : @"\Auto Saved - ") - + (currentMode == 0 ? "Annotation Strokes" : "BlackBoard Strokes"); - if (!Directory.Exists(savePath)) { - Directory.CreateDirectory(savePath); - } + var savePath = Settings.Automation.AutoSavedStrokesLocation + + (saveByUser ? @"\User Saved - " : @"\Auto Saved - ") + + (currentMode == 0 ? "Annotation Strokes" : "BlackBoard Strokes"); + if (!Directory.Exists(savePath)) Directory.CreateDirectory(savePath); string savePathWithName; - if (currentMode != 0) { // 黑板模式下 - savePathWithName = savePath + @"\" + DateTime.Now.ToString("yyyy-MM-dd HH-mm-ss-fff") + " Page-" + CurrentWhiteboardIndex + " StrokesCount-" + inkCanvas.Strokes.Count + ".icstk"; - } else { + if (currentMode != 0) // 黑板模式下 + savePathWithName = savePath + @"\" + DateTime.Now.ToString("yyyy-MM-dd HH-mm-ss-fff") + " Page-" + + CurrentWhiteboardIndex + " StrokesCount-" + inkCanvas.Strokes.Count + ".icstk"; + else //savePathWithName = savePath + @"\" + DateTime.Now.ToString("u").Replace(':', '-') + ".icstk"; savePathWithName = savePath + @"\" + DateTime.Now.ToString("yyyy-MM-dd HH-mm-ss-fff") + ".icstk"; - } - FileStream fs = new FileStream(savePathWithName, FileMode.Create); + var fs = new FileStream(savePathWithName, FileMode.Create); inkCanvas.Strokes.Save(fs); - if (newNotice) { - ShowNotification("墨迹成功保存至 " + savePathWithName); - } - } catch (Exception Ex) { + if (newNotice) ShowNotification("墨迹成功保存至 " + savePathWithName); + } + catch (Exception ex) { ShowNotification("墨迹保存失败"); - LogHelper.WriteLogToFile("墨迹保存失败 | " + Ex.ToString(), LogHelper.LogType.Error); + LogHelper.WriteLogToFile("墨迹保存失败 | " + ex.ToString(), LogHelper.LogType.Error); } } @@ -51,42 +48,41 @@ namespace Ink_Canvas { AnimationsHelper.HideWithSlideAndFade(BorderTools); AnimationsHelper.HideWithSlideAndFade(BoardBorderTools); - OpenFileDialog openFileDialog = new OpenFileDialog(); + var openFileDialog = new OpenFileDialog(); openFileDialog.InitialDirectory = Settings.Automation.AutoSavedStrokesLocation; openFileDialog.Title = "打开墨迹文件"; openFileDialog.Filter = "Ink Canvas Strokes File (*.icstk)|*.icstk"; - if (openFileDialog.ShowDialog() == true) { - LogHelper.WriteLogToFile(string.Format("Strokes Insert: Name: {0}", openFileDialog.FileName), LogHelper.LogType.Event); - try { - var fileStreamHasNoStroke = false; - using (var fs = new FileStream(openFileDialog.FileName, FileMode.Open, FileAccess.Read)) { - var strokes = new StrokeCollection(fs); - fileStreamHasNoStroke = strokes.Count == 0; - if (!fileStreamHasNoStroke) { - ClearStrokes(true); - timeMachine.ClearStrokeHistory(); - inkCanvas.Strokes.Add(strokes); - LogHelper.NewLog(string.Format("Strokes Insert: Strokes Count: {0}", inkCanvas.Strokes.Count.ToString())); - } + if (openFileDialog.ShowDialog() != true) return; + LogHelper.WriteLogToFile($"Strokes Insert: Name: {openFileDialog.FileName}", + LogHelper.LogType.Event); + try { + var fileStreamHasNoStroke = false; + using (var fs = new FileStream(openFileDialog.FileName, FileMode.Open, FileAccess.Read)) { + var strokes = new StrokeCollection(fs); + fileStreamHasNoStroke = strokes.Count == 0; + if (!fileStreamHasNoStroke) { + ClearStrokes(true); + timeMachine.ClearStrokeHistory(); + inkCanvas.Strokes.Add(strokes); + LogHelper.NewLog($"Strokes Insert: Strokes Count: {inkCanvas.Strokes.Count.ToString()}"); } - if (fileStreamHasNoStroke) { - using (var ms = new MemoryStream(File.ReadAllBytes(openFileDialog.FileName))) { - ms.Seek(0, SeekOrigin.Begin); - var strokes = new StrokeCollection(ms); - ClearStrokes(true); - timeMachine.ClearStrokeHistory(); - inkCanvas.Strokes.Add(strokes); - LogHelper.NewLog(string.Format("Strokes Insert (2): Strokes Count: {0}", strokes.Count.ToString())); - } + } + + if (fileStreamHasNoStroke) + using (var ms = new MemoryStream(File.ReadAllBytes(openFileDialog.FileName))) { + ms.Seek(0, SeekOrigin.Begin); + var strokes = new StrokeCollection(ms); + ClearStrokes(true); + timeMachine.ClearStrokeHistory(); + inkCanvas.Strokes.Add(strokes); + LogHelper.NewLog($"Strokes Insert (2): Strokes Count: {strokes.Count.ToString()}"); } - if (inkCanvas.Visibility != Visibility.Visible) { - SymbolIconCursor_Click(sender, null); - } - } catch { - ShowNotification("墨迹打开失败"); - } + if (inkCanvas.Visibility != Visibility.Visible) SymbolIconCursor_Click(sender, null); + } + catch { + ShowNotification("墨迹打开失败"); } } } -} +} \ No newline at end of file diff --git a/Ink Canvas/MainWindow_cs/MW_Screenshot.cs b/Ink Canvas/MainWindow_cs/MW_Screenshot.cs index e862336..abcb0b7 100644 --- a/Ink Canvas/MainWindow_cs/MW_Screenshot.cs +++ b/Ink Canvas/MainWindow_cs/MW_Screenshot.cs @@ -6,47 +6,46 @@ using System.Windows; namespace Ink_Canvas { public partial class MainWindow : Window { private void SaveScreenShot(bool isHideNotification, string fileName = null) { - System.Drawing.Rectangle rc = System.Windows.Forms.SystemInformation.VirtualScreen; - var bitmap = new System.Drawing.Bitmap(rc.Width, rc.Height, System.Drawing.Imaging.PixelFormat.Format32bppArgb); + var rc = System.Windows.Forms.SystemInformation.VirtualScreen; + var bitmap = new System.Drawing.Bitmap(rc.Width, rc.Height, PixelFormat.Format32bppArgb); - using (System.Drawing.Graphics memoryGrahics = System.Drawing.Graphics.FromImage(bitmap)) { + using (var memoryGrahics = System.Drawing.Graphics.FromImage(bitmap)) { memoryGrahics.CopyFromScreen(rc.X, rc.Y, 0, 0, rc.Size, System.Drawing.CopyPixelOperation.SourceCopy); } if (Settings.Automation.IsSaveScreenshotsInDateFolders) { if (string.IsNullOrWhiteSpace(fileName)) fileName = DateTime.Now.ToString("HH-mm-ss"); - string savePath = Settings.Automation.AutoSavedStrokesLocation + @"\Auto Saved - Screenshots\{DateTime.Now.Date:yyyyMMdd}\{fileName}.png"; - if (!Directory.Exists(Path.GetDirectoryName(savePath))) { + var savePath = Settings.Automation.AutoSavedStrokesLocation + + @"\Auto Saved - Screenshots\{DateTime.Now.Date:yyyyMMdd}\{fileName}.png"; + if (!Directory.Exists(Path.GetDirectoryName(savePath))) Directory.CreateDirectory(Path.GetDirectoryName(savePath)); - } bitmap.Save(savePath, ImageFormat.Png); - if (!isHideNotification) { - ShowNotification("截图成功保存至 " + savePath); - } - } else { - string savePath = Settings.Automation.AutoSavedStrokesLocation + @"\Auto Saved - Screenshots"; - if (!Directory.Exists(savePath)) { - Directory.CreateDirectory(savePath); - } - bitmap.Save(savePath + @"\" + DateTime.Now.ToString("u").Replace(':', '-') + ".png", ImageFormat.Png); - if (!isHideNotification) { - ShowNotification("截图成功保存至 " + savePath + @"\" + DateTime.Now.ToString("u").Replace(':', '-') + ".png"); - } + if (!isHideNotification) ShowNotification("截图成功保存至 " + savePath); } + else { + var savePath = Settings.Automation.AutoSavedStrokesLocation + @"\Auto Saved - Screenshots"; + if (!Directory.Exists(savePath)) Directory.CreateDirectory(savePath); + bitmap.Save(savePath + @"\" + DateTime.Now.ToString("u").Replace(':', '-') + ".png", ImageFormat.Png); + if (!isHideNotification) + ShowNotification("截图成功保存至 " + savePath + @"\" + DateTime.Now.ToString("u").Replace(':', '-') + + ".png"); + } + if (Settings.Automation.IsAutoSaveStrokesAtScreenshot) SaveInkCanvasStrokes(false, false); } private void SaveScreenShotToDesktop() { - System.Drawing.Rectangle rc = System.Windows.Forms.SystemInformation.VirtualScreen; - var bitmap = new System.Drawing.Bitmap(rc.Width, rc.Height, System.Drawing.Imaging.PixelFormat.Format32bppArgb); + var rc = System.Windows.Forms.SystemInformation.VirtualScreen; + var bitmap = new System.Drawing.Bitmap(rc.Width, rc.Height, PixelFormat.Format32bppArgb); - using (System.Drawing.Graphics memoryGrahics = System.Drawing.Graphics.FromImage(bitmap)) { + using (var memoryGrahics = System.Drawing.Graphics.FromImage(bitmap)) { memoryGrahics.CopyFromScreen(rc.X, rc.Y, 0, 0, rc.Size, System.Drawing.CopyPixelOperation.SourceCopy); } - string savePath = Environment.GetFolderPath(Environment.SpecialFolder.DesktopDirectory); + + var savePath = Environment.GetFolderPath(Environment.SpecialFolder.DesktopDirectory); bitmap.Save(savePath + @"\" + DateTime.Now.ToString("u").Replace(':', '-') + ".png", ImageFormat.Png); ShowNotification("截图成功保存至【桌面" + @"\" + DateTime.Now.ToString("u").Replace(':', '-') + ".png】"); if (Settings.Automation.IsAutoSaveStrokesAtScreenshot) SaveInkCanvasStrokes(false, false); } } -} +} \ No newline at end of file diff --git a/Ink Canvas/MainWindow_cs/MW_SelectionGestures.cs b/Ink Canvas/MainWindow_cs/MW_SelectionGestures.cs index 647463d..21d048e 100644 --- a/Ink Canvas/MainWindow_cs/MW_SelectionGestures.cs +++ b/Ink Canvas/MainWindow_cs/MW_SelectionGestures.cs @@ -12,25 +12,23 @@ namespace Ink_Canvas { public partial class MainWindow : Window { #region Floating Control - object lastBorderMouseDownObject; + private object lastBorderMouseDownObject; private void Border_MouseDown(object sender, MouseButtonEventArgs e) { lastBorderMouseDownObject = sender; } - bool isStrokeSelectionCloneOn = false; - private void BorderStrokeSelectionClone_MouseUp(object sender, MouseButtonEventArgs e) - { + private bool isStrokeSelectionCloneOn = false; + + private void BorderStrokeSelectionClone_MouseUp(object sender, MouseButtonEventArgs e) { if (lastBorderMouseDownObject != sender) return; - if (isStrokeSelectionCloneOn) - { + if (isStrokeSelectionCloneOn) { BorderStrokeSelectionClone.Background = Brushes.Transparent; isStrokeSelectionCloneOn = false; } - else - { + else { BorderStrokeSelectionClone.Background = new SolidColorBrush(StringToColor("#FF1ED760")); isStrokeSelectionCloneOn = true; @@ -63,21 +61,21 @@ namespace Ink_Canvas { } private void ChangeStrokeThickness(double multipler) { - foreach (Stroke stroke in inkCanvas.GetSelectedStrokes()) { + foreach (var stroke in inkCanvas.GetSelectedStrokes()) { var newWidth = stroke.DrawingAttributes.Width * multipler; var newHeight = stroke.DrawingAttributes.Height * multipler; - if (newWidth >= DrawingAttributes.MinWidth && newWidth <= DrawingAttributes.MaxWidth - && newHeight >= DrawingAttributes.MinHeight && newHeight <= DrawingAttributes.MaxHeight) { - stroke.DrawingAttributes.Width = newWidth; - stroke.DrawingAttributes.Height = newHeight; - } + if (!(newWidth >= DrawingAttributes.MinWidth) || !(newWidth <= DrawingAttributes.MaxWidth) + || !(newHeight >= DrawingAttributes.MinHeight) || + !(newHeight <= DrawingAttributes.MaxHeight)) continue; + stroke.DrawingAttributes.Width = newWidth; + stroke.DrawingAttributes.Height = newHeight; } } private void GridPenWidthRestore_MouseUp(object sender, MouseButtonEventArgs e) { if (lastBorderMouseDownObject != sender) return; - foreach (Stroke stroke in inkCanvas.GetSelectedStrokes()) { + foreach (var stroke in inkCanvas.GetSelectedStrokes()) { stroke.DrawingAttributes.Width = inkCanvas.DefaultDrawingAttributes.Width; stroke.DrawingAttributes.Height = inkCanvas.DefaultDrawingAttributes.Height; } @@ -86,23 +84,20 @@ namespace Ink_Canvas { private void ImageFlipHorizontal_MouseUp(object sender, MouseButtonEventArgs e) { if (lastBorderMouseDownObject != sender) return; - Matrix m = new Matrix(); + var m = new Matrix(); // Find center of element and then transform to get current location of center - FrameworkElement fe = e.Source as FrameworkElement; - Point center = new Point(fe.ActualWidth / 2, fe.ActualHeight / 2); + var fe = e.Source as FrameworkElement; + var center = new Point(fe.ActualWidth / 2, fe.ActualHeight / 2); center = new Point(inkCanvas.GetSelectionBounds().Left + inkCanvas.GetSelectionBounds().Width / 2, inkCanvas.GetSelectionBounds().Top + inkCanvas.GetSelectionBounds().Height / 2); - center = m.Transform(center); // 转换为矩阵缩放和旋转的中心点 + center = m.Transform(center); // 转换为矩阵缩放和旋转的中心点 // Update matrix to reflect translation/rotation - m.ScaleAt(-1, 1, center.X, center.Y); // 缩放 + m.ScaleAt(-1, 1, center.X, center.Y); // 缩放 - StrokeCollection targetStrokes = inkCanvas.GetSelectedStrokes(); - StrokeCollection resultStrokes = targetStrokes.Clone(); - foreach (Stroke stroke in targetStrokes) { - stroke.Transform(m, false); - } + var targetStrokes = inkCanvas.GetSelectedStrokes(); + foreach (var stroke in targetStrokes) stroke.Transform(m, false); timeMachine.CommitStrokeManipulationHistory(targetStrokes, m); //updateBorderStrokeSelectionControlLocation(); @@ -111,87 +106,76 @@ namespace Ink_Canvas { private void ImageFlipVertical_MouseUp(object sender, MouseButtonEventArgs e) { if (lastBorderMouseDownObject != sender) return; - Matrix m = new Matrix(); + var m = new Matrix(); // Find center of element and then transform to get current location of center - FrameworkElement fe = e.Source as FrameworkElement; - Point center = new Point(fe.ActualWidth / 2, fe.ActualHeight / 2); + var fe = e.Source as FrameworkElement; + var center = new Point(fe.ActualWidth / 2, fe.ActualHeight / 2); center = new Point(inkCanvas.GetSelectionBounds().Left + inkCanvas.GetSelectionBounds().Width / 2, inkCanvas.GetSelectionBounds().Top + inkCanvas.GetSelectionBounds().Height / 2); - center = m.Transform(center); // 转换为矩阵缩放和旋转的中心点 + center = m.Transform(center); // 转换为矩阵缩放和旋转的中心点 // Update matrix to reflect translation/rotation - m.ScaleAt(1, -1, center.X, center.Y); // 缩放 + m.ScaleAt(1, -1, center.X, center.Y); // 缩放 - StrokeCollection targetStrokes = inkCanvas.GetSelectedStrokes(); - StrokeCollection resultStrokes = targetStrokes.Clone(); - foreach (Stroke stroke in targetStrokes) { - stroke.Transform(m, false); - } + var targetStrokes = inkCanvas.GetSelectedStrokes(); + foreach (var stroke in targetStrokes) stroke.Transform(m, false); timeMachine.CommitStrokeManipulationHistory(targetStrokes, m); - } private void ImageRotate45_MouseUp(object sender, MouseButtonEventArgs e) { if (lastBorderMouseDownObject != sender) return; - Matrix m = new Matrix(); + var m = new Matrix(); // Find center of element and then transform to get current location of center - FrameworkElement fe = e.Source as FrameworkElement; - Point center = new Point(fe.ActualWidth / 2, fe.ActualHeight / 2); + var fe = e.Source as FrameworkElement; + var center = new Point(fe.ActualWidth / 2, fe.ActualHeight / 2); center = new Point(inkCanvas.GetSelectionBounds().Left + inkCanvas.GetSelectionBounds().Width / 2, inkCanvas.GetSelectionBounds().Top + inkCanvas.GetSelectionBounds().Height / 2); - center = m.Transform(center); // 转换为矩阵缩放和旋转的中心点 + center = m.Transform(center); // 转换为矩阵缩放和旋转的中心点 // Update matrix to reflect translation/rotation - m.RotateAt(45, center.X, center.Y); // 旋转 + m.RotateAt(45, center.X, center.Y); // 旋转 - StrokeCollection targetStrokes = inkCanvas.GetSelectedStrokes(); - StrokeCollection resultStrokes = targetStrokes.Clone(); - foreach (Stroke stroke in targetStrokes) { - stroke.Transform(m, false); - } + var targetStrokes = inkCanvas.GetSelectedStrokes(); + foreach (var stroke in targetStrokes) stroke.Transform(m, false); timeMachine.CommitStrokeManipulationHistory(targetStrokes, m); } private void ImageRotate90_MouseUp(object sender, MouseButtonEventArgs e) { if (lastBorderMouseDownObject != sender) return; - Matrix m = new Matrix(); + var m = new Matrix(); // Find center of element and then transform to get current location of center - FrameworkElement fe = e.Source as FrameworkElement; - Point center = new Point(fe.ActualWidth / 2, fe.ActualHeight / 2); + var fe = e.Source as FrameworkElement; + var center = new Point(fe.ActualWidth / 2, fe.ActualHeight / 2); center = new Point(inkCanvas.GetSelectionBounds().Left + inkCanvas.GetSelectionBounds().Width / 2, inkCanvas.GetSelectionBounds().Top + inkCanvas.GetSelectionBounds().Height / 2); - center = m.Transform(center); // 转换为矩阵缩放和旋转的中心点 + center = m.Transform(center); // 转换为矩阵缩放和旋转的中心点 // Update matrix to reflect translation/rotation - m.RotateAt(90, center.X, center.Y); // 旋转 + m.RotateAt(90, center.X, center.Y); // 旋转 - StrokeCollection targetStrokes = inkCanvas.GetSelectedStrokes(); - StrokeCollection resultStrokes = targetStrokes.Clone(); - foreach (Stroke stroke in targetStrokes) { - stroke.Transform(m, false); - } + var targetStrokes = inkCanvas.GetSelectedStrokes(); + foreach (var stroke in targetStrokes) stroke.Transform(m, false); timeMachine.CommitStrokeManipulationHistory(targetStrokes, m); } #endregion - bool isGridInkCanvasSelectionCoverMouseDown = false; - StrokeCollection StrokesSelectionClone = new StrokeCollection(); + private bool isGridInkCanvasSelectionCoverMouseDown = false; + private StrokeCollection StrokesSelectionClone = new StrokeCollection(); private void GridInkCanvasSelectionCover_MouseDown(object sender, MouseButtonEventArgs e) { isGridInkCanvasSelectionCoverMouseDown = true; } private void GridInkCanvasSelectionCover_MouseUp(object sender, MouseButtonEventArgs e) { - if (isGridInkCanvasSelectionCoverMouseDown) { - isGridInkCanvasSelectionCoverMouseDown = false; - GridInkCanvasSelectionCover.Visibility = Visibility.Collapsed; - } + if (!isGridInkCanvasSelectionCoverMouseDown) return; + isGridInkCanvasSelectionCoverMouseDown = false; + GridInkCanvasSelectionCover.Visibility = Visibility.Collapsed; } private void BtnSelect_Click(object sender, RoutedEventArgs e) { @@ -202,29 +186,30 @@ namespace Ink_Canvas { if (inkCanvas.GetSelectedStrokes().Count == inkCanvas.Strokes.Count) { inkCanvas.EditingMode = InkCanvasEditingMode.Ink; inkCanvas.EditingMode = InkCanvasEditingMode.Select; - } else { - StrokeCollection selectedStrokes = new StrokeCollection(); - foreach (Stroke stroke in inkCanvas.Strokes) { - if (stroke.GetBounds().Width > 0 && stroke.GetBounds().Height > 0) { + } + else { + var selectedStrokes = new StrokeCollection(); + foreach (var stroke in inkCanvas.Strokes) + if (stroke.GetBounds().Width > 0 && stroke.GetBounds().Height > 0) selectedStrokes.Add(stroke); - } - } inkCanvas.Select(selectedStrokes); } - } else { + } + else { inkCanvas.EditingMode = InkCanvasEditingMode.Select; } } - double BorderStrokeSelectionControlWidth = 490.0; - double BorderStrokeSelectionControlHeight = 80.0; - bool isProgramChangeStrokeSelection = false; + private double BorderStrokeSelectionControlWidth = 490.0; + private double BorderStrokeSelectionControlHeight = 80.0; + private bool isProgramChangeStrokeSelection = false; private void inkCanvas_SelectionChanged(object sender, EventArgs e) { if (isProgramChangeStrokeSelection) return; if (inkCanvas.GetSelectedStrokes().Count == 0) { GridInkCanvasSelectionCover.Visibility = Visibility.Collapsed; - } else { + } + else { GridInkCanvasSelectionCover.Visibility = Visibility.Visible; BorderStrokeSelectionClone.Background = Brushes.Transparent; isStrokeSelectionCloneOn = false; @@ -233,12 +218,15 @@ namespace Ink_Canvas { } private void updateBorderStrokeSelectionControlLocation() { - double borderLeft = (inkCanvas.GetSelectionBounds().Left + inkCanvas.GetSelectionBounds().Right - BorderStrokeSelectionControlWidth) / 2; - double borderTop = inkCanvas.GetSelectionBounds().Bottom + 1; + var borderLeft = (inkCanvas.GetSelectionBounds().Left + inkCanvas.GetSelectionBounds().Right - + BorderStrokeSelectionControlWidth) / 2; + var borderTop = inkCanvas.GetSelectionBounds().Bottom + 1; if (borderLeft < 0) borderLeft = 0; if (borderTop < 0) borderTop = 0; - if (Width - borderLeft < BorderStrokeSelectionControlWidth || double.IsNaN(borderLeft)) borderLeft = Width - BorderStrokeSelectionControlWidth; - if (Height - borderTop < BorderStrokeSelectionControlHeight || double.IsNaN(borderTop)) borderTop = Height - BorderStrokeSelectionControlHeight; + if (Width - borderLeft < BorderStrokeSelectionControlWidth || double.IsNaN(borderLeft)) + borderLeft = Width - BorderStrokeSelectionControlWidth; + if (Height - borderTop < BorderStrokeSelectionControlHeight || double.IsNaN(borderTop)) + borderTop = Height - BorderStrokeSelectionControlHeight; if (borderTop > 60) borderTop -= 60; BorderStrokeSelectionControl.Margin = new Thickness(borderLeft, borderTop, 0, 0); @@ -248,77 +236,75 @@ namespace Ink_Canvas { e.Mode = ManipulationModes.All; } - private void GridInkCanvasSelectionCover_ManipulationCompleted(object sender, ManipulationCompletedEventArgs e) { - - } + private void + GridInkCanvasSelectionCover_ManipulationCompleted(object sender, ManipulationCompletedEventArgs e) { } private void GridInkCanvasSelectionCover_ManipulationDelta(object sender, ManipulationDeltaEventArgs e) { try { if (dec.Count >= 1) { - ManipulationDelta md = e.DeltaManipulation; - Vector trans = md.Translation; // 获得位移矢量 - double rotate = md.Rotation; // 获得旋转角度 - Vector scale = md.Scale; // 获得缩放倍数 + var md = e.DeltaManipulation; + var trans = md.Translation; // 获得位移矢量 + var rotate = md.Rotation; // 获得旋转角度 + var scale = md.Scale; // 获得缩放倍数 - Matrix m = new Matrix(); + var m = new Matrix(); // Find center of element and then transform to get current location of center - FrameworkElement fe = e.Source as FrameworkElement; - Point center = new Point(fe.ActualWidth / 2, fe.ActualHeight / 2); + var fe = e.Source as FrameworkElement; + var center = new Point(fe.ActualWidth / 2, fe.ActualHeight / 2); center = new Point(inkCanvas.GetSelectionBounds().Left + inkCanvas.GetSelectionBounds().Width / 2, inkCanvas.GetSelectionBounds().Top + inkCanvas.GetSelectionBounds().Height / 2); - center = m.Transform(center); // 转换为矩阵缩放和旋转的中心点 + center = m.Transform(center); // 转换为矩阵缩放和旋转的中心点 // Update matrix to reflect translation/rotation - m.Translate(trans.X, trans.Y); // 移动 - m.ScaleAt(scale.X, scale.Y, center.X, center.Y); // 缩放 + m.Translate(trans.X, trans.Y); // 移动 + m.ScaleAt(scale.X, scale.Y, center.X, center.Y); // 缩放 - StrokeCollection strokes = inkCanvas.GetSelectedStrokes(); - if (StrokesSelectionClone.Count != 0) { + var strokes = inkCanvas.GetSelectedStrokes(); + if (StrokesSelectionClone.Count != 0) strokes = StrokesSelectionClone; - } else if (Settings.Gesture.IsEnableTwoFingerRotationOnSelection) { - m.RotateAt(rotate, center.X, center.Y); // 旋转 - } - foreach (Stroke stroke in strokes) { + else if (Settings.Gesture.IsEnableTwoFingerRotationOnSelection) + m.RotateAt(rotate, center.X, center.Y); // 旋转 + foreach (var stroke in strokes) { stroke.Transform(m, false); try { stroke.DrawingAttributes.Width *= md.Scale.X; stroke.DrawingAttributes.Height *= md.Scale.Y; - } catch { } + } + catch { } } - if (lastTempManiputlaionMatrix == null) - { + + if (lastTempManiputlaionMatrix == null) { lastTempManiputlaionMatrix = m; lastTempStrokeCollection = strokes; } - else - { + else { lastTempManiputlaionMatrix?.Append(m); } updateBorderStrokeSelectionControlLocation(); } - } catch { } + } + catch { } } - private void GridInkCanvasSelectionCover_TouchDown(object sender, TouchEventArgs e) { - } + private void GridInkCanvasSelectionCover_TouchDown(object sender, TouchEventArgs e) { } - private void GridInkCanvasSelectionCover_TouchUp(object sender, TouchEventArgs e) { - } + private void GridInkCanvasSelectionCover_TouchUp(object sender, TouchEventArgs e) { } + + private Point lastTouchPointOnGridInkCanvasCover = new Point(0, 0); - Point lastTouchPointOnGridInkCanvasCover = new Point(0, 0); private void GridInkCanvasSelectionCover_PreviewTouchDown(object sender, TouchEventArgs e) { dec.Add(e.TouchDevice.Id); //设备1个的时候,记录中心点 if (dec.Count == 1) { - TouchPoint touchPoint = e.GetTouchPoint(null); + var touchPoint = e.GetTouchPoint(null); centerPoint = touchPoint.Position; lastTouchPointOnGridInkCanvasCover = touchPoint.Position; if (isStrokeSelectionCloneOn) { - StrokeCollection strokes = inkCanvas.GetSelectedStrokes(); + var strokes = inkCanvas.GetSelectedStrokes(); isProgramChangeStrokeSelection = true; inkCanvas.Select(new StrokeCollection()); StrokesSelectionClone = strokes.Clone(); @@ -334,20 +320,21 @@ namespace Ink_Canvas { if (dec.Count >= 1) return; isProgramChangeStrokeSelection = false; if (lastTouchPointOnGridInkCanvasCover == e.GetTouchPoint(null).Position) { - if (lastTouchPointOnGridInkCanvasCover.X < inkCanvas.GetSelectionBounds().Left || - lastTouchPointOnGridInkCanvasCover.Y < inkCanvas.GetSelectionBounds().Top || - lastTouchPointOnGridInkCanvasCover.X > inkCanvas.GetSelectionBounds().Right || - lastTouchPointOnGridInkCanvasCover.Y > inkCanvas.GetSelectionBounds().Bottom) { - inkCanvas.Select(new StrokeCollection()); - StrokesSelectionClone = new StrokeCollection(); - } - } else if (inkCanvas.GetSelectedStrokes().Count == 0) { + if (!(lastTouchPointOnGridInkCanvasCover.X < inkCanvas.GetSelectionBounds().Left) && + !(lastTouchPointOnGridInkCanvasCover.Y < inkCanvas.GetSelectionBounds().Top) && + !(lastTouchPointOnGridInkCanvasCover.X > inkCanvas.GetSelectionBounds().Right) && + !(lastTouchPointOnGridInkCanvasCover.Y > inkCanvas.GetSelectionBounds().Bottom)) return; + inkCanvas.Select(new StrokeCollection()); + StrokesSelectionClone = new StrokeCollection(); + } + else if (inkCanvas.GetSelectedStrokes().Count == 0) { GridInkCanvasSelectionCover.Visibility = Visibility.Collapsed; StrokesSelectionClone = new StrokeCollection(); - } else { + } + else { GridInkCanvasSelectionCover.Visibility = Visibility.Visible; StrokesSelectionClone = new StrokeCollection(); } } } -} +} \ 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 2c7f4d7..7c9109e 100644 --- a/Ink Canvas/MainWindow_cs/MW_Settings.cs +++ b/Ink Canvas/MainWindow_cs/MW_Settings.cs @@ -18,19 +18,23 @@ namespace Ink_Canvas { private void ToggleSwitchIsAutoUpdate_Toggled(object sender, RoutedEventArgs e) { if (!isLoaded) return; Settings.Startup.IsAutoUpdate = ToggleSwitchIsAutoUpdate.IsOn; - ToggleSwitchIsAutoUpdateWithSilence.Visibility = ToggleSwitchIsAutoUpdate.IsOn ? Visibility.Visible : Visibility.Collapsed; + ToggleSwitchIsAutoUpdateWithSilence.Visibility = + ToggleSwitchIsAutoUpdate.IsOn ? Visibility.Visible : Visibility.Collapsed; SaveSettingsToFile(); } + private void ToggleSwitchIsAutoUpdateWithSilence_Toggled(object sender, RoutedEventArgs e) { if (!isLoaded) return; Settings.Startup.IsAutoUpdateWithSilence = ToggleSwitchIsAutoUpdateWithSilence.IsOn; - AutoUpdateTimePeriodBlock.Visibility = Settings.Startup.IsAutoUpdateWithSilence ? Visibility.Visible : Visibility.Collapsed; + AutoUpdateTimePeriodBlock.Visibility = + Settings.Startup.IsAutoUpdateWithSilence ? Visibility.Visible : Visibility.Collapsed; SaveSettingsToFile(); } private void AutoUpdateWithSilenceStartTimeComboBox_SelectionChanged(object sender, RoutedEventArgs e) { if (!isLoaded) return; - Settings.Startup.AutoUpdateWithSilenceStartTime = (string)AutoUpdateWithSilenceStartTimeComboBox.SelectedItem; + Settings.Startup.AutoUpdateWithSilenceStartTime = + (string)AutoUpdateWithSilenceStartTimeComboBox.SelectedItem; SaveSettingsToFile(); } @@ -45,7 +49,8 @@ namespace Ink_Canvas { if (ToggleSwitchRunAtStartup.IsOn) { StartAutomaticallyDel("InkCanvas"); StartAutomaticallyCreate("Ink Canvas Annotation"); - } else { + } + else { StartAutomaticallyDel("InkCanvas"); StartAutomaticallyDel("Ink Canvas Annotation"); } @@ -63,11 +68,10 @@ namespace Ink_Canvas { Settings.PowerPointSettings.PowerPointSupport = ToggleSwitchSupportPowerPoint.IsOn; SaveSettingsToFile(); - if (Settings.PowerPointSettings.PowerPointSupport) { + if (Settings.PowerPointSettings.PowerPointSupport) timerCheckPPT.Start(); - } else { + else timerCheckPPT.Stop(); - } } private void ToggleSwitchShowCanvasAtNewSlideShow_Toggled(object sender, RoutedEventArgs e) { @@ -83,20 +87,19 @@ namespace Ink_Canvas { private void ToggleSwitchEnableNibMode_Toggled(object sender, RoutedEventArgs e) { if (!isLoaded) return; - if (sender == ToggleSwitchEnableNibMode) { + if (sender == ToggleSwitchEnableNibMode) ToggleSwitchBoardEnableNibMode.IsOn = ToggleSwitchEnableNibMode.IsOn; - } else { + else ToggleSwitchEnableNibMode.IsOn = ToggleSwitchBoardEnableNibMode.IsOn; - } Settings.Startup.IsEnableNibMode = ToggleSwitchEnableNibMode.IsOn; - if (Settings.Startup.IsEnableNibMode) { + if (Settings.Startup.IsEnableNibMode) BoundsWidth = Settings.Advanced.NibModeBoundsWidth; - } else { + else BoundsWidth = Settings.Advanced.FingerModeBoundsWidth; - } SaveSettingsToFile(); } + #endregion #region Appearance @@ -105,13 +108,11 @@ namespace Ink_Canvas { if (!isLoaded) return; Settings.Appearance.IsEnableDisPlayNibModeToggler = ToggleSwitchEnableDisPlayNibModeToggle.IsOn; SaveSettingsToFile(); - if (!ToggleSwitchEnableDisPlayNibModeToggle.IsOn) - { + if (!ToggleSwitchEnableDisPlayNibModeToggle.IsOn) { NibModeSimpleStackPanel.Visibility = Visibility.Collapsed; BoardNibModeSimpleStackPanel.Visibility = Visibility.Collapsed; } - else - { + else { NibModeSimpleStackPanel.Visibility = Visibility.Visible; BoardNibModeSimpleStackPanel.Visibility = Visibility.Visible; } @@ -123,8 +124,7 @@ namespace Ink_Canvas { // SaveSettingsToFile(); //} - private void ToggleSwitchEnableQuickPanel_Toggled(object sender, RoutedEventArgs e) - { + private void ToggleSwitchEnableQuickPanel_Toggled(object sender, RoutedEventArgs e) { if (!isLoaded) return; Settings.Appearance.IsShowQuickPanel = ToggleSwitchEnableQuickPanel.IsOn; SaveSettingsToFile(); @@ -132,45 +132,45 @@ namespace Ink_Canvas { private void ViewboxFloatingBarScaleTransformValueSlider_ValueChanged(object sender, RoutedEventArgs e) { if (!isLoaded) return; - Settings.Appearance.ViewboxFloatingBarScaleTransformValue = ViewboxFloatingBarScaleTransformValueSlider.Value; + Settings.Appearance.ViewboxFloatingBarScaleTransformValue = + ViewboxFloatingBarScaleTransformValueSlider.Value; SaveSettingsToFile(); - double val = ViewboxFloatingBarScaleTransformValueSlider.Value; - ViewboxFloatingBarScaleTransform.ScaleX = (val > 0.5 && val < 1.25) ? val : val <= 0.5 ? 0.5 : val >= 1.25 ? 1.25 : 1; - ViewboxFloatingBarScaleTransform.ScaleY = (val > 0.5 && val < 1.25) ? val : val <= 0.5 ? 0.5 : val >= 1.25 ? 1.25 : 1; + var val = ViewboxFloatingBarScaleTransformValueSlider.Value; + ViewboxFloatingBarScaleTransform.ScaleX = + val > 0.5 && val < 1.25 ? val : val <= 0.5 ? 0.5 : val >= 1.25 ? 1.25 : 1; + ViewboxFloatingBarScaleTransform.ScaleY = + val > 0.5 && val < 1.25 ? val : val <= 0.5 ? 0.5 : val >= 1.25 ? 1.25 : 1; // auto align if (BtnPPTSlideShowEnd.Visibility == Visibility.Visible) - { ViewboxFloatingBarMarginAnimation(60); - } else - { - ViewboxFloatingBarMarginAnimation(100,true); - } + ViewboxFloatingBarMarginAnimation(100, true); } - private void ComboBoxUnFoldBtnImg_SelectionChanged(object sender, RoutedEventArgs e) - { + private void ComboBoxUnFoldBtnImg_SelectionChanged(object sender, RoutedEventArgs e) { if (!isLoaded) return; Settings.Appearance.UnFoldButtonImageType = ComboBoxUnFoldBtnImg.SelectedIndex; SaveSettingsToFile(); - if (ComboBoxUnFoldBtnImg.SelectedIndex == 0) - { - RightUnFoldBtnImgChevron.Source = new BitmapImage(new Uri("pack://application:,,,/Resources/new-icons/unfold-chevron.png")); + if (ComboBoxUnFoldBtnImg.SelectedIndex == 0) { + RightUnFoldBtnImgChevron.Source = + new BitmapImage(new Uri("pack://application:,,,/Resources/new-icons/unfold-chevron.png")); RightUnFoldBtnImgChevron.Width = 14; RightUnFoldBtnImgChevron.Height = 14; RightUnFoldBtnImgChevron.RenderTransform = new RotateTransform(180); - LeftUnFoldBtnImgChevron.Source = new BitmapImage(new Uri("pack://application:,,,/Resources/new-icons/unfold-chevron.png")); + LeftUnFoldBtnImgChevron.Source = + new BitmapImage(new Uri("pack://application:,,,/Resources/new-icons/unfold-chevron.png")); LeftUnFoldBtnImgChevron.Width = 14; LeftUnFoldBtnImgChevron.Height = 14; LeftUnFoldBtnImgChevron.RenderTransform = null; } - else if (ComboBoxUnFoldBtnImg.SelectedIndex == 1) - { - RightUnFoldBtnImgChevron.Source = new BitmapImage(new Uri("pack://application:,,,/Resources/new-icons/pen-white.png")); + else if (ComboBoxUnFoldBtnImg.SelectedIndex == 1) { + RightUnFoldBtnImgChevron.Source = + new BitmapImage(new Uri("pack://application:,,,/Resources/new-icons/pen-white.png")); RightUnFoldBtnImgChevron.Width = 18; RightUnFoldBtnImgChevron.Height = 18; RightUnFoldBtnImgChevron.RenderTransform = null; - LeftUnFoldBtnImgChevron.Source = new BitmapImage(new Uri("pack://application:,,,/Resources/new-icons/pen-white.png")); + LeftUnFoldBtnImgChevron.Source = + new BitmapImage(new Uri("pack://application:,,,/Resources/new-icons/pen-white.png")); LeftUnFoldBtnImgChevron.Width = 18; LeftUnFoldBtnImgChevron.Height = 18; LeftUnFoldBtnImgChevron.RenderTransform = null; @@ -179,13 +179,13 @@ namespace Ink_Canvas { private void ToggleSwitchEnableViewboxBlackBoardScaleTransform_Toggled(object sender, RoutedEventArgs e) { if (!isLoaded) return; - Settings.Appearance.EnableViewboxBlackBoardScaleTransform = ToggleSwitchEnableViewboxBlackBoardScaleTransform.IsOn; + Settings.Appearance.EnableViewboxBlackBoardScaleTransform = + ToggleSwitchEnableViewboxBlackBoardScaleTransform.IsOn; SaveSettingsToFile(); LoadSettings(); } - private void ToggleSwitchEnableTimeDisplayInWhiteboardMode_Toggled(object sender, RoutedEventArgs e) - { + private void ToggleSwitchEnableTimeDisplayInWhiteboardMode_Toggled(object sender, RoutedEventArgs e) { if (!isLoaded) return; Settings.Appearance.EnableTimeDisplayInWhiteboardMode = ToggleSwitchEnableTimeDisplayInWhiteboardMode.IsOn; SaveSettingsToFile(); @@ -195,16 +195,19 @@ namespace Ink_Canvas { private void ToggleSwitchShowButtonPPTNavigation_OnToggled(object sender, RoutedEventArgs e) { if (!isLoaded) return; Settings.PowerPointSettings.IsShowPPTNavigation = ToggleSwitchShowButtonPPTNavigation.IsOn; - PptNavigationBtn.Visibility = Settings.PowerPointSettings.IsShowPPTNavigation ? Visibility.Visible : Visibility.Collapsed; + PptNavigationBtn.Visibility = Settings.PowerPointSettings.IsShowPPTNavigation + ? Visibility.Visible + : Visibility.Collapsed; SaveSettingsToFile(); } private void ToggleSwitchShowBottomPPTNavigationPanel_OnToggled(object sender, RoutedEventArgs e) { if (!isLoaded) return; Settings.PowerPointSettings.IsShowBottomPPTNavigationPanel = ToggleSwitchShowBottomPPTNavigationPanel.IsOn; - if (BtnPPTSlideShowEnd.Visibility == Visibility.Visible) { - BottomViewboxPPTSidesControl.Visibility = Settings.PowerPointSettings.IsShowBottomPPTNavigationPanel ? Visibility.Visible : Visibility.Collapsed; - } + if (BtnPPTSlideShowEnd.Visibility == Visibility.Visible) + BottomViewboxPPTSidesControl.Visibility = Settings.PowerPointSettings.IsShowBottomPPTNavigationPanel + ? Visibility.Visible + : Visibility.Collapsed; SaveSettingsToFile(); } @@ -212,9 +215,14 @@ namespace Ink_Canvas { if (!isLoaded) return; Settings.PowerPointSettings.IsShowSidePPTNavigationPanel = ToggleSwitchShowSidePPTNavigationPanel.IsOn; if (BtnPPTSlideShowEnd.Visibility == Visibility.Visible) { - LeftSidePanelForPPTNavigation.Visibility = Settings.PowerPointSettings.IsShowSidePPTNavigationPanel ? Visibility.Visible : Visibility.Collapsed; - RightSidePanelForPPTNavigation.Visibility = Settings.PowerPointSettings.IsShowSidePPTNavigationPanel ? Visibility.Visible : Visibility.Collapsed; + LeftSidePanelForPPTNavigation.Visibility = Settings.PowerPointSettings.IsShowSidePPTNavigationPanel + ? Visibility.Visible + : Visibility.Collapsed; + RightSidePanelForPPTNavigation.Visibility = Settings.PowerPointSettings.IsShowSidePPTNavigationPanel + ? Visibility.Visible + : Visibility.Collapsed; } + SaveSettingsToFile(); } @@ -236,10 +244,12 @@ namespace Ink_Canvas { if (sender == ComboBoxPenStyle) { Settings.Canvas.InkStyle = ComboBoxPenStyle.SelectedIndex; BoardComboBoxPenStyle.SelectedIndex = ComboBoxPenStyle.SelectedIndex; - } else { + } + else { Settings.Canvas.InkStyle = BoardComboBoxPenStyle.SelectedIndex; ComboBoxPenStyle.SelectedIndex = BoardComboBoxPenStyle.SelectedIndex; } + SaveSettingsToFile(); } @@ -249,16 +259,13 @@ namespace Ink_Canvas { SaveSettingsToFile(); } - private void ComboBoxEraserSizeFloatingBar_SelectionChanged(object sender, SelectionChangedEventArgs e) - { + private void ComboBoxEraserSizeFloatingBar_SelectionChanged(object sender, SelectionChangedEventArgs e) { if (!isLoaded) return; Settings.Canvas.EraserSize = ComboBoxEraserSizeFloatingBar.SelectedIndex; ComboBoxEraserSize.SelectedIndex = ComboBoxEraserSizeFloatingBar.SelectedIndex; - if (Settings.Canvas.EraserShapeType == 0) - { + if (Settings.Canvas.EraserShapeType == 0) { double k = 1; - switch (ComboBoxEraserSizeFloatingBar.SelectedIndex) - { + switch (ComboBoxEraserSizeFloatingBar.SelectedIndex) { case 0: k = 0.5; break; @@ -272,13 +279,12 @@ namespace Ink_Canvas { k = 1.8; break; } + inkCanvas.EraserShape = new EllipseStylusShape(k * 90, k * 90); } - else if (Settings.Canvas.EraserShapeType == 1) - { + else if (Settings.Canvas.EraserShapeType == 1) { double k = 1; - switch (ComboBoxEraserSizeFloatingBar.SelectedIndex) - { + switch (ComboBoxEraserSizeFloatingBar.SelectedIndex) { case 0: k = 0.7; break; @@ -292,22 +298,22 @@ namespace Ink_Canvas { 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) - { + private void SwitchToCircleEraser(object sender, MouseButtonEventArgs e) { if (!isLoaded) return; Settings.Canvas.EraserShapeType = 0; SaveSettingsToFile(); CheckEraserTypeTab(); double k = 1; - switch (ComboBoxEraserSizeFloatingBar.SelectedIndex) - { + switch (ComboBoxEraserSizeFloatingBar.SelectedIndex) { case 0: k = 0.5; break; @@ -321,20 +327,19 @@ namespace Ink_Canvas { k = 1.8; break; } + inkCanvas.EraserShape = new EllipseStylusShape(k * 90, k * 90); inkCanvas.EditingMode = InkCanvasEditingMode.Ink; inkCanvas.EditingMode = InkCanvasEditingMode.EraseByPoint; } - private void SwitchToRectangleEraser(object sender, MouseButtonEventArgs e) - { + private void SwitchToRectangleEraser(object sender, MouseButtonEventArgs e) { if (!isLoaded) return; Settings.Canvas.EraserShapeType = 1; SaveSettingsToFile(); CheckEraserTypeTab(); double k = 1; - switch (ComboBoxEraserSizeFloatingBar.SelectedIndex) - { + switch (ComboBoxEraserSizeFloatingBar.SelectedIndex) { case 0: k = 0.7; break; @@ -348,6 +353,7 @@ namespace Ink_Canvas { k = 1.6; break; } + inkCanvas.EraserShape = new RectangleStylusShape(k * 90 * 0.6, k * 90); inkCanvas.EditingMode = InkCanvasEditingMode.Ink; inkCanvas.EditingMode = InkCanvasEditingMode.EraseByPoint; @@ -364,8 +370,7 @@ namespace Ink_Canvas { SaveSettingsToFile(); } - private void HighlighterWidthSlider_ValueChanged(object sender, RoutedPropertyChangedEventArgs e) - { + 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; @@ -375,16 +380,15 @@ namespace Ink_Canvas { SaveSettingsToFile(); } - private void InkAlphaSlider_ValueChanged(object sender, RoutedPropertyChangedEventArgs e) - { + private void InkAlphaSlider_ValueChanged(object sender, RoutedPropertyChangedEventArgs e) { if (!isLoaded) return; // if (sender == BoardInkWidthSlider) InkWidthSlider.Value = ((Slider)sender).Value; // if (sender == InkWidthSlider) BoardInkWidthSlider.Value = ((Slider)sender).Value; - byte NowR = drawingAttributes.Color.R; - byte NowG = drawingAttributes.Color.G; - byte NowB = drawingAttributes.Color.B; + var NowR = drawingAttributes.Color.R; + var NowG = drawingAttributes.Color.G; + var NowB = drawingAttributes.Color.B; // Trace.WriteLine(BitConverter.GetBytes(((Slider)sender).Value)); - drawingAttributes.Color = Color.FromArgb((byte)(((Slider)sender).Value), NowR, NowG, NowB); + drawingAttributes.Color = Color.FromArgb((byte)((Slider)sender).Value, NowR, NowG, NowB); // drawingAttributes.Width = ((Slider)sender).Value / 2; // Settings.Canvas.InkAlpha = ((Slider)sender).Value; // SaveSettingsToFile(); @@ -392,7 +396,8 @@ namespace Ink_Canvas { private void ComboBoxHyperbolaAsymptoteOption_SelectionChanged(object sender, SelectionChangedEventArgs e) { if (!isLoaded) return; - Settings.Canvas.HyperbolaAsymptoteOption = (OptionalOperation)ComboBoxHyperbolaAsymptoteOption.SelectedIndex; + Settings.Canvas.HyperbolaAsymptoteOption = + (OptionalOperation)ComboBoxHyperbolaAsymptoteOption.SelectedIndex; SaveSettingsToFile(); } @@ -401,11 +406,10 @@ namespace Ink_Canvas { #region Automation private void StartOrStoptimerCheckAutoFold() { - if (Settings.Automation.IsEnableAutoFold) { + if (Settings.Automation.IsEnableAutoFold) timerCheckAutoFold.Start(); - } else { + else timerCheckAutoFold.Stop(); - } } private void ToggleSwitchAutoFoldInEasiNote_Toggled(object sender, RoutedEventArgs e) { @@ -417,7 +421,8 @@ namespace Ink_Canvas { private void ToggleSwitchAutoFoldInEasiNoteIgnoreDesktopAnno_Toggled(object sender, RoutedEventArgs e) { if (!isLoaded) return; - Settings.Automation.IsAutoFoldInEasiNoteIgnoreDesktopAnno = ToggleSwitchAutoFoldInEasiNoteIgnoreDesktopAnno.IsOn; + Settings.Automation.IsAutoFoldInEasiNoteIgnoreDesktopAnno = + ToggleSwitchAutoFoldInEasiNoteIgnoreDesktopAnno.IsOn; SaveSettingsToFile(); } @@ -435,8 +440,7 @@ namespace Ink_Canvas { StartOrStoptimerCheckAutoFold(); } - private void ToggleSwitchAutoFoldInEasiNote5C_Toggled(object sender, RoutedEventArgs e) - { + private void ToggleSwitchAutoFoldInEasiNote5C_Toggled(object sender, RoutedEventArgs e) { if (!isLoaded) return; Settings.Automation.IsAutoFoldInEasiNote5C = ToggleSwitchAutoFoldInEasiNote5C.IsOn; SaveSettingsToFile(); @@ -457,8 +461,7 @@ namespace Ink_Canvas { StartOrStoptimerCheckAutoFold(); } - private void ToggleSwitchAutoFoldInHiteLightBoard_Toggled(object sender, RoutedEventArgs e) - { + private void ToggleSwitchAutoFoldInHiteLightBoard_Toggled(object sender, RoutedEventArgs e) { if (!isLoaded) return; Settings.Automation.IsAutoFoldInHiteLightBoard = ToggleSwitchAutoFoldInHiteLightBoard.IsOn; SaveSettingsToFile(); @@ -505,37 +508,32 @@ namespace Ink_Canvas { Settings.Automation.IsAutoKillPptService = ToggleSwitchAutoKillPptService.IsOn; SaveSettingsToFile(); - if (Settings.Automation.IsAutoKillEasiNote || Settings.Automation.IsAutoKillPptService) { + if (Settings.Automation.IsAutoKillEasiNote || Settings.Automation.IsAutoKillPptService) timerKillProcess.Start(); - } else { + else timerKillProcess.Stop(); - } } private void ToggleSwitchAutoKillEasiNote_Toggled(object sender, RoutedEventArgs e) { if (!isLoaded) return; Settings.Automation.IsAutoKillEasiNote = ToggleSwitchAutoKillEasiNote.IsOn; SaveSettingsToFile(); - if (Settings.Automation.IsAutoKillEasiNote || Settings.Automation.IsAutoKillPptService || Settings.Automation.IsAutoKillHiteAnnotation) { + if (Settings.Automation.IsAutoKillEasiNote || Settings.Automation.IsAutoKillPptService || + Settings.Automation.IsAutoKillHiteAnnotation) timerKillProcess.Start(); - } else { + else timerKillProcess.Stop(); - } } - private void ToggleSwitchAutoKillHiteAnnotation_Toggled(object sender, RoutedEventArgs e) - { + private void ToggleSwitchAutoKillHiteAnnotation_Toggled(object sender, RoutedEventArgs e) { if (!isLoaded) return; Settings.Automation.IsAutoKillHiteAnnotation = ToggleSwitchAutoKillHiteAnnotation.IsOn; SaveSettingsToFile(); - if (Settings.Automation.IsAutoKillEasiNote || Settings.Automation.IsAutoKillPptService || Settings.Automation.IsAutoKillHiteAnnotation) - { + if (Settings.Automation.IsAutoKillEasiNote || Settings.Automation.IsAutoKillPptService || + Settings.Automation.IsAutoKillHiteAnnotation) timerKillProcess.Start(); - } else - { timerKillProcess.Stop(); - } } private void ToggleSwitchSaveScreenshotsInDateFolders_Toggled(object sender, RoutedEventArgs e) { @@ -547,7 +545,8 @@ namespace Ink_Canvas { private void ToggleSwitchAutoSaveStrokesAtScreenshot_Toggled(object sender, RoutedEventArgs e) { if (!isLoaded) return; Settings.Automation.IsAutoSaveStrokesAtScreenshot = ToggleSwitchAutoSaveStrokesAtScreenshot.IsOn; - ToggleSwitchAutoSaveStrokesAtClear.Header = ToggleSwitchAutoSaveStrokesAtScreenshot.IsOn ? "清屏时自动截图并保存墨迹" : "清屏时自动截图"; + ToggleSwitchAutoSaveStrokesAtClear.Header = + ToggleSwitchAutoSaveStrokesAtScreenshot.IsOn ? "清屏时自动截图并保存墨迹" : "清屏时自动截图"; SaveSettingsToFile(); } @@ -563,15 +562,13 @@ namespace Ink_Canvas { SaveSettingsToFile(); } - private void ToggleSwitchClearCanvasAndClearTimeMachine_Toggled(object sender, RoutedEventArgs e) - { + 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) - { + private void ToggleSwitchFitToCurve_Toggled(object sender, RoutedEventArgs e) { if (!isLoaded) return; drawingAttributes.FitToCurve = ToggleSwitchFitToCurve.IsOn; Settings.Canvas.FitToCurve = ToggleSwitchFitToCurve.IsOn; @@ -596,8 +593,7 @@ namespace Ink_Canvas { SaveSettingsToFile(); } - private void ToggleSwitchNotifyAutoPlayPresentation_Toggled(object sender, RoutedEventArgs e) - { + private void ToggleSwitchNotifyAutoPlayPresentation_Toggled(object sender, RoutedEventArgs e) { if (!isLoaded) return; Settings.PowerPointSettings.IsNotifyAutoPlayPresentation = ToggleSwitchNotifyAutoPlayPresentation.IsOn; SaveSettingsToFile(); @@ -616,7 +612,7 @@ namespace Ink_Canvas { } private void AutoSavedStrokesLocationButton_Click(object sender, RoutedEventArgs e) { - System.Windows.Forms.FolderBrowserDialog folderBrowser = new System.Windows.Forms.FolderBrowserDialog(); + var folderBrowser = new System.Windows.Forms.FolderBrowserDialog(); folderBrowser.ShowDialog(); if (folderBrowser.SelectedPath.Length > 0) AutoSavedStrokesLocation.Text = folderBrowser.SelectedPath; } @@ -626,7 +622,8 @@ namespace Ink_Canvas { } private void SetAutoSavedStrokesLocationToDocumentFolderButton_Click(object sender, RoutedEventArgs e) { - AutoSavedStrokesLocation.Text = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments) + @"\Ink Canvas"; + AutoSavedStrokesLocation.Text = + Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments) + @"\Ink Canvas"; } private void ToggleSwitchAutoDelSavedFiles_Toggled(object sender, RoutedEventArgs e) { @@ -635,15 +632,18 @@ namespace Ink_Canvas { SaveSettingsToFile(); } - private void ComboBoxAutoDelSavedFilesDaysThreshold_SelectionChanged(object sender, SelectionChangedEventArgs e) { + private void + ComboBoxAutoDelSavedFilesDaysThreshold_SelectionChanged(object sender, SelectionChangedEventArgs e) { if (!isLoaded) return; - Settings.Automation.AutoDelSavedFilesDaysThreshold = int.Parse(((ComboBoxItem)ComboBoxAutoDelSavedFilesDaysThreshold.SelectedItem).Content.ToString()); + Settings.Automation.AutoDelSavedFilesDaysThreshold = + int.Parse(((ComboBoxItem)ComboBoxAutoDelSavedFilesDaysThreshold.SelectedItem).Content.ToString()); SaveSettingsToFile(); } private void ToggleSwitchAutoSaveScreenShotInPowerPoint_Toggled(object sender, RoutedEventArgs e) { if (!isLoaded) return; - Settings.PowerPointSettings.IsAutoSaveScreenShotInPowerPoint = ToggleSwitchAutoSaveScreenShotInPowerPoint.IsOn; + Settings.PowerPointSettings.IsAutoSaveScreenShotInPowerPoint = + ToggleSwitchAutoSaveScreenShotInPowerPoint.IsOn; SaveSettingsToFile(); } @@ -653,7 +653,8 @@ namespace Ink_Canvas { private void ToggleSwitchEnableFingerGestureSlideShowControl_Toggled(object sender, RoutedEventArgs e) { if (!isLoaded) return; - Settings.PowerPointSettings.IsEnableFingerGestureSlideShowControl = ToggleSwitchEnableFingerGestureSlideShowControl.IsOn; + Settings.PowerPointSettings.IsEnableFingerGestureSlideShowControl = + ToggleSwitchEnableFingerGestureSlideShowControl.IsOn; SaveSettingsToFile(); } @@ -665,11 +666,10 @@ namespace Ink_Canvas { private void ToggleSwitchEnableTwoFingerZoom_Toggled(object sender, RoutedEventArgs e) { if (!isLoaded) return; - if (sender == ToggleSwitchEnableTwoFingerZoom) { + if (sender == ToggleSwitchEnableTwoFingerZoom) BoardToggleSwitchEnableTwoFingerZoom.IsOn = ToggleSwitchEnableTwoFingerZoom.IsOn; - } else { + else ToggleSwitchEnableTwoFingerZoom.IsOn = BoardToggleSwitchEnableTwoFingerZoom.IsOn; - } Settings.Gesture.IsEnableTwoFingerZoom = ToggleSwitchEnableTwoFingerZoom.IsOn; CheckEnableTwoFingerGestureBtnColorPrompt(); SaveSettingsToFile(); @@ -677,14 +677,12 @@ namespace Ink_Canvas { private void ToggleSwitchEnableMultiTouchMode_Toggled(object sender, RoutedEventArgs e) { //if (!isLoaded) return; - if (sender == ToggleSwitchEnableMultiTouchMode) { + if (sender == ToggleSwitchEnableMultiTouchMode) BoardToggleSwitchEnableMultiTouchMode.IsOn = ToggleSwitchEnableMultiTouchMode.IsOn; - } else { + else ToggleSwitchEnableMultiTouchMode.IsOn = BoardToggleSwitchEnableMultiTouchMode.IsOn; - } if (ToggleSwitchEnableMultiTouchMode.IsOn) { - if (!isInMultiTouchMode) - { + if (!isInMultiTouchMode) { inkCanvas.StylusDown += MainWindow_StylusDown; inkCanvas.StylusMove += MainWindow_StylusMove; inkCanvas.StylusUp += MainWindow_StylusUp; @@ -695,9 +693,9 @@ namespace Ink_Canvas { inkCanvas.Children.Clear(); isInMultiTouchMode = true; } - } else { - if (isInMultiTouchMode) - { + } + else { + if (isInMultiTouchMode) { inkCanvas.StylusDown -= MainWindow_StylusDown; inkCanvas.StylusMove -= MainWindow_StylusMove; inkCanvas.StylusUp -= MainWindow_StylusUp; @@ -709,6 +707,7 @@ namespace Ink_Canvas { isInMultiTouchMode = false; } } + Settings.Gesture.IsEnableMultiTouchMode = ToggleSwitchEnableMultiTouchMode.IsOn; CheckEnableTwoFingerGestureBtnColorPrompt(); SaveSettingsToFile(); @@ -716,11 +715,10 @@ namespace Ink_Canvas { private void ToggleSwitchEnableTwoFingerTranslate_Toggled(object sender, RoutedEventArgs e) { if (!isLoaded) return; - if (sender == ToggleSwitchEnableTwoFingerTranslate) { + if (sender == ToggleSwitchEnableTwoFingerTranslate) BoardToggleSwitchEnableTwoFingerTranslate.IsOn = ToggleSwitchEnableTwoFingerTranslate.IsOn; - } else { + else ToggleSwitchEnableTwoFingerTranslate.IsOn = BoardToggleSwitchEnableTwoFingerTranslate.IsOn; - } Settings.Gesture.IsEnableTwoFingerTranslate = ToggleSwitchEnableTwoFingerTranslate.IsOn; CheckEnableTwoFingerGestureBtnColorPrompt(); SaveSettingsToFile(); @@ -729,11 +727,10 @@ namespace Ink_Canvas { private void ToggleSwitchEnableTwoFingerRotation_Toggled(object sender, RoutedEventArgs e) { if (!isLoaded) return; - if (sender == ToggleSwitchEnableTwoFingerRotation) { + if (sender == ToggleSwitchEnableTwoFingerRotation) BoardToggleSwitchEnableTwoFingerRotation.IsOn = ToggleSwitchEnableTwoFingerRotation.IsOn; - } else { + else ToggleSwitchEnableTwoFingerRotation.IsOn = BoardToggleSwitchEnableTwoFingerRotation.IsOn; - } Settings.Gesture.IsEnableTwoFingerRotation = ToggleSwitchEnableTwoFingerRotation.IsOn; Settings.Gesture.IsEnableTwoFingerRotationOnSelection = ToggleSwitchEnableTwoFingerRotationOnSelection.IsOn; CheckEnableTwoFingerGestureBtnColorPrompt(); @@ -742,7 +739,8 @@ namespace Ink_Canvas { private void ToggleSwitchEnableTwoFingerGestureInPresentationMode_Toggled(object sender, RoutedEventArgs e) { if (!isLoaded) return; - Settings.PowerPointSettings.IsEnableTwoFingerGestureInPresentationMode = ToggleSwitchEnableTwoFingerGestureInPresentationMode.IsOn; + Settings.PowerPointSettings.IsEnableTwoFingerGestureInPresentationMode = + ToggleSwitchEnableTwoFingerGestureInPresentationMode.IsOn; SaveSettingsToFile(); } @@ -751,8 +749,8 @@ namespace Ink_Canvas { #region Reset public static void SetSettingsToRecommendation() { - bool AutoDelSavedFilesDays = Settings.Automation.AutoDelSavedFiles; - int AutoDelSavedFilesDaysThreshold = Settings.Automation.AutoDelSavedFilesDaysThreshold; + var AutoDelSavedFilesDays = Settings.Automation.AutoDelSavedFiles; + var AutoDelSavedFilesDaysThreshold = Settings.Automation.AutoDelSavedFilesDaysThreshold; Settings = new Settings(); Settings.Advanced.IsSpecialScreen = true; Settings.Advanced.IsQuadIR = false; @@ -761,7 +759,7 @@ namespace Ink_Canvas { Settings.Advanced.FingerModeBoundsWidth = 20; Settings.Advanced.EraserBindTouchMultiplier = true; Settings.Advanced.IsLogEnabled = true; - Settings.Advanced.IsSecondConfimeWhenShutdownApp = false; + Settings.Advanced.IsSecondConfirmWhenShutdownApp = false; Settings.Appearance.IsEnableDisPlayNibModeToggler = false; Settings.Appearance.IsColorfulViewboxFloatingBar = false; @@ -857,7 +855,9 @@ namespace Ink_Canvas { isLoaded = true; ToggleSwitchRunAtStartup.IsOn = true; - } catch { } + } + catch { } + ShowNotification("设置已重置为默认推荐设置~"); } @@ -872,7 +872,8 @@ namespace Ink_Canvas { SaveSettingsToFile(); LoadSettings(); isLoaded = true; - } catch { } + } + catch { } } #endregion @@ -885,36 +886,33 @@ namespace Ink_Canvas { SaveSettingsToFile(); } - private void ToggleSwitchEnableInkToShapeNoFakePressureTriangle_Toggled(object sender, RoutedEventArgs e) - { + private void ToggleSwitchEnableInkToShapeNoFakePressureTriangle_Toggled(object sender, RoutedEventArgs e) { if (!isLoaded) return; - Settings.InkToShape.IsInkToShapeNoFakePressureTriangle = ToggleSwitchEnableInkToShapeNoFakePressureTriangle.IsOn; + Settings.InkToShape.IsInkToShapeNoFakePressureTriangle = + ToggleSwitchEnableInkToShapeNoFakePressureTriangle.IsOn; SaveSettingsToFile(); } - private void ToggleSwitchEnableInkToShapeNoFakePressureRectangle_Toggled(object sender, RoutedEventArgs e) - { + private void ToggleSwitchEnableInkToShapeNoFakePressureRectangle_Toggled(object sender, RoutedEventArgs e) { if (!isLoaded) return; - Settings.InkToShape.IsInkToShapeNoFakePressureRectangle = ToggleSwitchEnableInkToShapeNoFakePressureRectangle.IsOn; + Settings.InkToShape.IsInkToShapeNoFakePressureRectangle = + ToggleSwitchEnableInkToShapeNoFakePressureRectangle.IsOn; SaveSettingsToFile(); } - private void ToggleCheckboxEnableInkToShapeTriangle_CheckedChanged(object sender, RoutedEventArgs e) - { + private void ToggleCheckboxEnableInkToShapeTriangle_CheckedChanged(object sender, RoutedEventArgs e) { if (!isLoaded) return; Settings.InkToShape.IsInkToShapeTriangle = (bool)ToggleCheckboxEnableInkToShapeTriangle.IsChecked; SaveSettingsToFile(); } - private void ToggleCheckboxEnableInkToShapeRectangle_CheckedChanged(object sender, RoutedEventArgs e) - { + private void ToggleCheckboxEnableInkToShapeRectangle_CheckedChanged(object sender, RoutedEventArgs e) { if (!isLoaded) return; Settings.InkToShape.IsInkToShapeRectangle = (bool)ToggleCheckboxEnableInkToShapeRectangle.IsChecked; SaveSettingsToFile(); } - private void ToggleCheckboxEnableInkToShapeRounded_CheckedChanged(object sender, RoutedEventArgs e) - { + private void ToggleCheckboxEnableInkToShapeRounded_CheckedChanged(object sender, RoutedEventArgs e) { if (!isLoaded) return; Settings.InkToShape.IsInkToShapeRounded = (bool)ToggleCheckboxEnableInkToShapeRounded.IsChecked; SaveSettingsToFile(); @@ -927,7 +925,8 @@ namespace Ink_Canvas { private void ToggleSwitchIsSpecialScreen_OnToggled(object sender, RoutedEventArgs e) { if (!isLoaded) return; Settings.Advanced.IsSpecialScreen = ToggleSwitchIsSpecialScreen.IsOn; - TouchMultiplierSlider.Visibility = ToggleSwitchIsSpecialScreen.IsOn ? Visibility.Visible : Visibility.Collapsed; + TouchMultiplierSlider.Visibility = + ToggleSwitchIsSpecialScreen.IsOn ? Visibility.Visible : Visibility.Collapsed; SaveSettingsToFile(); } @@ -956,11 +955,10 @@ namespace Ink_Canvas { if (!isLoaded) return; Settings.Advanced.NibModeBoundsWidth = (int)e.NewValue; - if (Settings.Startup.IsEnableNibMode) { + if (Settings.Startup.IsEnableNibMode) BoundsWidth = Settings.Advanced.NibModeBoundsWidth; - } else { + else BoundsWidth = Settings.Advanced.FingerModeBoundsWidth; - } SaveSettingsToFile(); } @@ -969,11 +967,10 @@ namespace Ink_Canvas { if (!isLoaded) return; Settings.Advanced.FingerModeBoundsWidth = (int)e.NewValue; - if (Settings.Startup.IsEnableNibMode) { + if (Settings.Startup.IsEnableNibMode) BoundsWidth = Settings.Advanced.NibModeBoundsWidth; - } else { + else BoundsWidth = Settings.Advanced.FingerModeBoundsWidth; - } SaveSettingsToFile(); } @@ -992,25 +989,25 @@ namespace Ink_Canvas { private void ToggleSwitchIsSecondConfimeWhenShutdownApp_Toggled(object sender, RoutedEventArgs e) { if (!isLoaded) return; - Settings.Advanced.IsSecondConfimeWhenShutdownApp = ToggleSwitchIsSecondConfimeWhenShutdownApp.IsOn; + Settings.Advanced.IsSecondConfirmWhenShutdownApp = ToggleSwitchIsSecondConfimeWhenShutdownApp.IsOn; SaveSettingsToFile(); } #endregion public static void SaveSettingsToFile() { - string text = JsonConvert.SerializeObject(Settings, Formatting.Indented); + var text = JsonConvert.SerializeObject(Settings, Formatting.Indented); try { File.WriteAllText(App.RootPath + settingsFileName, text); - } catch { } + } + catch { } } private void SCManipulationBoundaryFeedback(object sender, ManipulationBoundaryFeedbackEventArgs e) { e.Handled = true; } - private void HyperlinkSourceToICCRepository_Click(object sender, RoutedEventArgs e) - { + private void HyperlinkSourceToICCRepository_Click(object sender, RoutedEventArgs e) { Process.Start("https://gitea.bliemhax.com/kriastans/InkCanvasForClass"); HideSubPanels(); } diff --git a/Ink Canvas/MainWindow_cs/MW_SettingsToLoad.cs b/Ink Canvas/MainWindow_cs/MW_SettingsToLoad.cs index 98e03e0..bd9af8c 100644 --- a/Ink Canvas/MainWindow_cs/MW_SettingsToLoad.cs +++ b/Ink Canvas/MainWindow_cs/MW_SettingsToLoad.cs @@ -593,7 +593,7 @@ namespace Ink_Canvas ToggleSwitchIsLogEnabled.IsOn = false; } - if (Settings.Advanced.IsSecondConfimeWhenShutdownApp) + if (Settings.Advanced.IsSecondConfirmWhenShutdownApp) { ToggleSwitchIsSecondConfimeWhenShutdownApp.IsOn = true; } diff --git a/Ink Canvas/MainWindow_cs/MW_ShapeDrawing.cs b/Ink Canvas/MainWindow_cs/MW_ShapeDrawing.cs index 4682873..07f6ad3 100644 --- a/Ink Canvas/MainWindow_cs/MW_ShapeDrawing.cs +++ b/Ink Canvas/MainWindow_cs/MW_ShapeDrawing.cs @@ -21,7 +21,8 @@ namespace Ink_Canvas { if (BorderDrawShape.Visibility == Visibility.Visible) { AnimationsHelper.HideWithSlideAndFade(BorderDrawShape); AnimationsHelper.HideWithSlideAndFade(BoardBorderDrawShape); - } else { + } + else { AnimationsHelper.ShowWithSlideFromBottomAndFade(BorderDrawShape); AnimationsHelper.ShowWithSlideFromBottomAndFade(BoardBorderDrawShape); } @@ -29,8 +30,8 @@ namespace Ink_Canvas { #endregion Floating Bar Control - int drawingShapeMode = 0; - bool isLongPressSelected = false; // 用于存是否是“选中”状态,便于后期抬笔后不做切换到笔的处理 + private int drawingShapeMode = 0; + private bool isLongPressSelected = false; // 用于存是否是“选中”状态,便于后期抬笔后不做切换到笔的处理 #region Buttons @@ -39,15 +40,14 @@ namespace Ink_Canvas { ToggleSwitchDrawShapeBorderAutoHide.IsOn = !ToggleSwitchDrawShapeBorderAutoHide.IsOn; - if (ToggleSwitchDrawShapeBorderAutoHide.IsOn) { + if (ToggleSwitchDrawShapeBorderAutoHide.IsOn) ((iNKORE.UI.WPF.Modern.Controls.SymbolIcon)sender).Symbol = iNKORE.UI.WPF.Modern.Controls.Symbol.Pin; - } else { + else ((iNKORE.UI.WPF.Modern.Controls.SymbolIcon)sender).Symbol = iNKORE.UI.WPF.Modern.Controls.Symbol.UnPin; - } } - object lastMouseDownSender = null; - DateTime lastMouseDownTime = DateTime.MinValue; + private object lastMouseDownSender = null; + private DateTime lastMouseDownTime = DateTime.MinValue; private async void Image_MouseDown(object sender, MouseButtonEventArgs e) { lastMouseDownSender = sender; @@ -63,21 +63,17 @@ namespace Ink_Canvas { forceEraser = true; inkCanvas.EditingMode = InkCanvasEditingMode.None; inkCanvas.IsManipulationEnabled = true; - if (sender == ImageDrawLine || sender == BoardImageDrawLine) { + if (sender == ImageDrawLine || sender == BoardImageDrawLine) drawingShapeMode = 1; - } else if (sender == ImageDrawDashedLine || sender == BoardImageDrawDashedLine) { + else if (sender == ImageDrawDashedLine || sender == BoardImageDrawDashedLine) drawingShapeMode = 8; - } else if (sender == ImageDrawDotLine || sender == BoardImageDrawDotLine) { + else if (sender == ImageDrawDotLine || sender == BoardImageDrawDotLine) drawingShapeMode = 18; - } else if (sender == ImageDrawArrow || sender == BoardImageDrawArrow) { + else if (sender == ImageDrawArrow || sender == BoardImageDrawArrow) drawingShapeMode = 2; - } else if (sender == ImageDrawParallelLine || sender == BoardImageDrawParallelLine) { - drawingShapeMode = 15; - } + else if (sender == ImageDrawParallelLine || sender == BoardImageDrawParallelLine) drawingShapeMode = 15; isLongPressSelected = true; - if (isSingleFingerDragMode) { - BtnFingerDragMode_Click(BtnFingerDragMode, null); - } + if (isSingleFingerDragMode) BtnFingerDragMode_Click(BtnFingerDragMode, null); } } @@ -90,18 +86,16 @@ namespace Ink_Canvas { isLongPressSelected = false; } - private Task CheckIsDrawingShapesInMultiTouchMode() - { - if (isInMultiTouchMode) - { + private Task CheckIsDrawingShapesInMultiTouchMode() { + if (isInMultiTouchMode) { ToggleSwitchEnableMultiTouchMode.IsOn = false; lastIsInMultiTouchMode = true; } + return Task.FromResult(true); } - private async void BtnDrawLine_Click(object sender, MouseButtonEventArgs e) - { + private async void BtnDrawLine_Click(object sender, MouseButtonEventArgs e) { await CheckIsDrawingShapesInMultiTouchMode(); if (lastMouseDownSender == sender) { forceEraser = true; @@ -110,19 +104,18 @@ namespace Ink_Canvas { inkCanvas.IsManipulationEnabled = true; CancelSingleFingerDragMode(); } + lastMouseDownSender = null; if (isLongPressSelected) { - if (ToggleSwitchDrawShapeBorderAutoHide.IsOn) { - CollapseBorderDrawShape(true); - } + if (ToggleSwitchDrawShapeBorderAutoHide.IsOn) CollapseBorderDrawShape(true); var dA = new DoubleAnimation(1, 1, new Duration(TimeSpan.FromMilliseconds(0))); ImageDrawLine.BeginAnimation(OpacityProperty, dA); } + DrawShapePromptToPen(); } - private async void BtnDrawDashedLine_Click(object sender, MouseButtonEventArgs e) - { + private async void BtnDrawDashedLine_Click(object sender, MouseButtonEventArgs e) { await CheckIsDrawingShapesInMultiTouchMode(); if (lastMouseDownSender == sender) { forceEraser = true; @@ -131,14 +124,14 @@ namespace Ink_Canvas { inkCanvas.IsManipulationEnabled = true; CancelSingleFingerDragMode(); } + lastMouseDownSender = null; if (isLongPressSelected) { - if (ToggleSwitchDrawShapeBorderAutoHide.IsOn) { - CollapseBorderDrawShape(true); - } + if (ToggleSwitchDrawShapeBorderAutoHide.IsOn) CollapseBorderDrawShape(true); var dA = new DoubleAnimation(1, 1, new Duration(TimeSpan.FromMilliseconds(0))); ImageDrawDashedLine.BeginAnimation(OpacityProperty, dA); } + DrawShapePromptToPen(); } @@ -151,14 +144,14 @@ namespace Ink_Canvas { inkCanvas.IsManipulationEnabled = true; CancelSingleFingerDragMode(); } + lastMouseDownSender = null; if (isLongPressSelected) { - if (ToggleSwitchDrawShapeBorderAutoHide.IsOn) { - CollapseBorderDrawShape(true); - } + if (ToggleSwitchDrawShapeBorderAutoHide.IsOn) CollapseBorderDrawShape(true); var dA = new DoubleAnimation(1, 1, new Duration(TimeSpan.FromMilliseconds(0))); ImageDrawDotLine.BeginAnimation(OpacityProperty, dA); } + DrawShapePromptToPen(); } @@ -171,14 +164,14 @@ namespace Ink_Canvas { inkCanvas.IsManipulationEnabled = true; CancelSingleFingerDragMode(); } + lastMouseDownSender = null; if (isLongPressSelected) { - if (ToggleSwitchDrawShapeBorderAutoHide.IsOn) { - CollapseBorderDrawShape(true); - } + if (ToggleSwitchDrawShapeBorderAutoHide.IsOn) CollapseBorderDrawShape(true); var dA = new DoubleAnimation(1, 1, new Duration(TimeSpan.FromMilliseconds(0))); ImageDrawArrow.BeginAnimation(OpacityProperty, dA); } + DrawShapePromptToPen(); } @@ -191,14 +184,14 @@ namespace Ink_Canvas { inkCanvas.IsManipulationEnabled = true; CancelSingleFingerDragMode(); } + lastMouseDownSender = null; if (isLongPressSelected) { - if (ToggleSwitchDrawShapeBorderAutoHide.IsOn) { - CollapseBorderDrawShape(true); - } + if (ToggleSwitchDrawShapeBorderAutoHide.IsOn) CollapseBorderDrawShape(true); var dA = new DoubleAnimation(1, 1, new Duration(TimeSpan.FromMilliseconds(0))); ImageDrawParallelLine.BeginAnimation(OpacityProperty, dA); } + DrawShapePromptToPen(); } @@ -409,63 +402,56 @@ namespace Ink_Canvas { #endregion - private void inkCanvas_TouchMove(object sender, TouchEventArgs e) - { + private void inkCanvas_TouchMove(object sender, TouchEventArgs e) { if (isSingleFingerDragMode) return; - if (drawingShapeMode != 0) - { - if (isLastTouchEraser) - { - return; - } + if (drawingShapeMode != 0) { + if (isLastTouchEraser) return; //EraserContainer.Background = null; //ImageEraser.Visibility = Visibility.Visible; if (isWaitUntilNextTouchDown) return; - if (dec.Count > 1) - { + if (dec.Count > 1) { isWaitUntilNextTouchDown = true; - try - { + try { inkCanvas.Strokes.Remove(lastTempStroke); inkCanvas.Strokes.Remove(lastTempStrokeCollection); } - catch - { + catch { Trace.WriteLine("lastTempStrokeCollection failed."); } + return; } + if (inkCanvas.EditingMode != InkCanvasEditingMode.None) - { inkCanvas.EditingMode = InkCanvasEditingMode.None; - } } + MouseTouchMove(e.GetTouchPoint(inkCanvas).Position); } - int drawMultiStepShapeCurrentStep = 0; //多笔完成的图形 当前所处在的笔画 - StrokeCollection drawMultiStepShapeSpecialStrokeCollection = new StrokeCollection(); //多笔完成的图形 当前所处在的笔画 - //double drawMultiStepShapeSpecialParameter1 = 0.0; //多笔完成的图形 特殊参数 通常用于表示a - //double drawMultiStepShapeSpecialParameter2 = 0.0; //多笔完成的图形 特殊参数 通常用于表示b - double drawMultiStepShapeSpecialParameter3 = 0.0; //多笔完成的图形 特殊参数 通常用于表示k + private int drawMultiStepShapeCurrentStep = 0; //多笔完成的图形 当前所处在的笔画 + + private StrokeCollection drawMultiStepShapeSpecialStrokeCollection = new StrokeCollection(); //多笔完成的图形 当前所处在的笔画 + + //double drawMultiStepShapeSpecialParameter1 = 0.0; //多笔完成的图形 特殊参数 通常用于表示a + //double drawMultiStepShapeSpecialParameter2 = 0.0; //多笔完成的图形 特殊参数 通常用于表示b + private double drawMultiStepShapeSpecialParameter3 = 0.0; //多笔完成的图形 特殊参数 通常用于表示k #region 形状绘制主函数 + private void MouseTouchMove(Point endP) { - if (Settings.Canvas.FitToCurve == true) - { - drawingAttributes.FitToCurve = false; - } - List pointList; + if (Settings.Canvas.FitToCurve == true) drawingAttributes.FitToCurve = false; + List pointList; StylusPointCollection point; Stroke stroke; - StrokeCollection strokes = new StrokeCollection(); - Point newIniP = iniP; + var strokes = new StrokeCollection(); + var newIniP = iniP; switch (drawingShapeMode) { case 1: _currentCommitType = CommitReason.ShapeDrawing; - pointList = new List{ - new System.Windows.Point(iniP.X, iniP.Y), - new System.Windows.Point(endP.X, endP.Y) + pointList = new List { + new Point(iniP.X, iniP.Y), + new Point(endP.X, endP.Y) }; point = new StylusPointCollection(pointList); stroke = new Stroke(point) { @@ -473,7 +459,9 @@ namespace Ink_Canvas { }; try { inkCanvas.Strokes.Remove(lastTempStroke); - } catch { } + } + catch { } + lastTempStroke = stroke; inkCanvas.Strokes.Add(stroke); break; @@ -482,9 +470,11 @@ namespace Ink_Canvas { strokes.Add(GenerateDashedLineStrokeCollection(iniP, endP)); try { inkCanvas.Strokes.Remove(lastTempStrokeCollection); - } catch { + } + catch { Trace.WriteLine("lastTempStrokeCollection failed."); } + lastTempStrokeCollection = strokes; inkCanvas.Strokes.Add(strokes); break; @@ -493,26 +483,27 @@ namespace Ink_Canvas { strokes.Add(GenerateDotLineStrokeCollection(iniP, endP)); try { inkCanvas.Strokes.Remove(lastTempStrokeCollection); - } catch { + } + catch { Trace.WriteLine("lastTempStrokeCollection failed."); } + lastTempStrokeCollection = strokes; inkCanvas.Strokes.Add(strokes); break; case 2: _currentCommitType = CommitReason.ShapeDrawing; double w = 15, h = 10; - double theta = Math.Atan2(iniP.Y - endP.Y, iniP.X - endP.X); - double sint = Math.Sin(theta); - double cost = Math.Cos(theta); + var theta = Math.Atan2(iniP.Y - endP.Y, iniP.X - endP.X); + var sint = Math.Sin(theta); + var cost = Math.Cos(theta); - pointList = new List - { + pointList = new List { new Point(iniP.X, iniP.Y), - new Point(endP.X , endP.Y), + new Point(endP.X, endP.Y), new Point(endP.X + (w * cost - h * sint), endP.Y + (w * sint + h * cost)), - new Point(endP.X,endP.Y), - new Point(endP.X + (w * cost + h * sint), endP.Y - (h * cost - w * sint)), + new Point(endP.X, endP.Y), + new Point(endP.X + (w * cost + h * sint), endP.Y - (h * cost - w * sint)) }; point = new StylusPointCollection(pointList); stroke = new Stroke(point) { @@ -520,23 +511,26 @@ namespace Ink_Canvas { }; try { inkCanvas.Strokes.Remove(lastTempStroke); - } catch { } + } + catch { } + lastTempStroke = stroke; inkCanvas.Strokes.Add(stroke); break; case 15: _currentCommitType = CommitReason.ShapeDrawing; - double d = GetDistance(iniP, endP); + var d = GetDistance(iniP, endP); if (d == 0) return; - double sinTheta = (iniP.Y - endP.Y) / d; - double cosTheta = (endP.X - iniP.X) / d; - double tanTheta = Math.Abs(sinTheta / cosTheta); + var sinTheta = (iniP.Y - endP.Y) / d; + var cosTheta = (endP.X - iniP.X) / d; + var tanTheta = Math.Abs(sinTheta / cosTheta); double x = 25; if (Math.Abs(tanTheta) < 1.0 / 12) { sinTheta = 0; cosTheta = 1; endP.Y = iniP.Y; } + if (tanTheta < 0.63 && tanTheta > 0.52) //30 { sinTheta = sinTheta / Math.Abs(sinTheta) * 0.5; @@ -544,6 +538,7 @@ namespace Ink_Canvas { endP.Y = iniP.Y - d * sinTheta; endP.X = iniP.X + d * cosTheta; } + if (tanTheta < 1.08 && tanTheta > 0.92) //45 { sinTheta = sinTheta / Math.Abs(sinTheta) * 0.707; @@ -551,6 +546,7 @@ namespace Ink_Canvas { endP.Y = iniP.Y - d * sinTheta; endP.X = iniP.X + d * cosTheta; } + if (tanTheta < 1.95 && tanTheta > 1.63) //60 { sinTheta = sinTheta / Math.Abs(sinTheta) * 0.866; @@ -558,96 +554,129 @@ namespace Ink_Canvas { endP.Y = iniP.Y - d * sinTheta; endP.X = iniP.X + d * cosTheta; } + if (Math.Abs(cosTheta / sinTheta) < 1.0 / 12) { endP.X = iniP.X; sinTheta = 1; cosTheta = 0; } - strokes.Add(GenerateLineStroke(new Point(iniP.X - 3 * x * sinTheta, iniP.Y - 3 * x * cosTheta), new Point(endP.X - 3 * x * sinTheta, endP.Y - 3 * x * cosTheta))); - strokes.Add(GenerateLineStroke(new Point(iniP.X - x * sinTheta, iniP.Y - x * cosTheta), new Point(endP.X - x * sinTheta, endP.Y - x * cosTheta))); - strokes.Add(GenerateLineStroke(new Point(iniP.X + x * sinTheta, iniP.Y + x * cosTheta), new Point(endP.X + x * sinTheta, endP.Y + x * cosTheta))); - strokes.Add(GenerateLineStroke(new Point(iniP.X + 3 * x * sinTheta, iniP.Y + 3 * x * cosTheta), new Point(endP.X + 3 * x * sinTheta, endP.Y + 3 * x * cosTheta))); + + strokes.Add(GenerateLineStroke(new Point(iniP.X - 3 * x * sinTheta, iniP.Y - 3 * x * cosTheta), + new Point(endP.X - 3 * x * sinTheta, endP.Y - 3 * x * cosTheta))); + strokes.Add(GenerateLineStroke(new Point(iniP.X - x * sinTheta, iniP.Y - x * cosTheta), + new Point(endP.X - x * sinTheta, endP.Y - x * cosTheta))); + strokes.Add(GenerateLineStroke(new Point(iniP.X + x * sinTheta, iniP.Y + x * cosTheta), + new Point(endP.X + x * sinTheta, endP.Y + x * cosTheta))); + strokes.Add(GenerateLineStroke(new Point(iniP.X + 3 * x * sinTheta, iniP.Y + 3 * x * cosTheta), + new Point(endP.X + 3 * x * sinTheta, endP.Y + 3 * x * cosTheta))); try { inkCanvas.Strokes.Remove(lastTempStrokeCollection); - } catch { + } + catch { Trace.WriteLine("lastTempStrokeCollection failed."); } + lastTempStrokeCollection = strokes; inkCanvas.Strokes.Add(strokes); break; case 11: _currentCommitType = CommitReason.ShapeDrawing; - strokes.Add(GenerateArrowLineStroke(new Point(2 * iniP.X - (endP.X - 20), iniP.Y), new Point(endP.X, iniP.Y))); - strokes.Add(GenerateArrowLineStroke(new Point(iniP.X, 2 * iniP.Y - (endP.Y + 20)), new Point(iniP.X, endP.Y))); + strokes.Add(GenerateArrowLineStroke(new Point(2 * iniP.X - (endP.X - 20), iniP.Y), + new Point(endP.X, iniP.Y))); + strokes.Add(GenerateArrowLineStroke(new Point(iniP.X, 2 * iniP.Y - (endP.Y + 20)), + new Point(iniP.X, endP.Y))); try { inkCanvas.Strokes.Remove(lastTempStrokeCollection); - } catch { + } + catch { Trace.WriteLine("lastTempStrokeCollection failed."); } + lastTempStrokeCollection = strokes; inkCanvas.Strokes.Add(strokes); break; case 12: _currentCommitType = CommitReason.ShapeDrawing; if (Math.Abs(iniP.X - endP.X) < 0.01) return; - strokes.Add(GenerateArrowLineStroke(new Point(iniP.X + (iniP.X - endP.X) / Math.Abs(iniP.X - endP.X) * 25, iniP.Y), new Point(endP.X, iniP.Y))); - strokes.Add(GenerateArrowLineStroke(new Point(iniP.X, 2 * iniP.Y - (endP.Y + 20)), new Point(iniP.X, endP.Y))); + strokes.Add(GenerateArrowLineStroke( + new Point(iniP.X + (iniP.X - endP.X) / Math.Abs(iniP.X - endP.X) * 25, iniP.Y), + new Point(endP.X, iniP.Y))); + strokes.Add(GenerateArrowLineStroke(new Point(iniP.X, 2 * iniP.Y - (endP.Y + 20)), + new Point(iniP.X, endP.Y))); try { inkCanvas.Strokes.Remove(lastTempStrokeCollection); - } catch { + } + catch { Trace.WriteLine("lastTempStrokeCollection failed."); } + lastTempStrokeCollection = strokes; inkCanvas.Strokes.Add(strokes); break; case 13: _currentCommitType = CommitReason.ShapeDrawing; if (Math.Abs(iniP.Y - endP.Y) < 0.01) return; - strokes.Add(GenerateArrowLineStroke(new Point(2 * iniP.X - (endP.X - 20), iniP.Y), new Point(endP.X, iniP.Y))); - strokes.Add(GenerateArrowLineStroke(new Point(iniP.X, iniP.Y + (iniP.Y - endP.Y) / Math.Abs(iniP.Y - endP.Y) * 25), new Point(iniP.X, endP.Y))); + strokes.Add(GenerateArrowLineStroke(new Point(2 * iniP.X - (endP.X - 20), iniP.Y), + new Point(endP.X, iniP.Y))); + strokes.Add(GenerateArrowLineStroke( + new Point(iniP.X, iniP.Y + (iniP.Y - endP.Y) / Math.Abs(iniP.Y - endP.Y) * 25), + new Point(iniP.X, endP.Y))); try { inkCanvas.Strokes.Remove(lastTempStrokeCollection); - } catch { + } + catch { Trace.WriteLine("lastTempStrokeCollection failed."); } + lastTempStrokeCollection = strokes; inkCanvas.Strokes.Add(strokes); break; case 14: _currentCommitType = CommitReason.ShapeDrawing; if (Math.Abs(iniP.X - endP.X) < 0.01 || Math.Abs(iniP.Y - endP.Y) < 0.01) return; - strokes.Add(GenerateArrowLineStroke(new Point(iniP.X + (iniP.X - endP.X) / Math.Abs(iniP.X - endP.X) * 25, iniP.Y), new Point(endP.X, iniP.Y))); - strokes.Add(GenerateArrowLineStroke(new Point(iniP.X, iniP.Y + (iniP.Y - endP.Y) / Math.Abs(iniP.Y - endP.Y) * 25), new Point(iniP.X, endP.Y))); + strokes.Add(GenerateArrowLineStroke( + new Point(iniP.X + (iniP.X - endP.X) / Math.Abs(iniP.X - endP.X) * 25, iniP.Y), + new Point(endP.X, iniP.Y))); + strokes.Add(GenerateArrowLineStroke( + new Point(iniP.X, iniP.Y + (iniP.Y - endP.Y) / Math.Abs(iniP.Y - endP.Y) * 25), + new Point(iniP.X, endP.Y))); try { inkCanvas.Strokes.Remove(lastTempStrokeCollection); - } catch { + } + catch { Trace.WriteLine("lastTempStrokeCollection failed."); } + lastTempStrokeCollection = strokes; inkCanvas.Strokes.Add(strokes); break; case 17: _currentCommitType = CommitReason.ShapeDrawing; - strokes.Add(GenerateArrowLineStroke(new Point(iniP.X, iniP.Y), new Point(iniP.X + Math.Abs(endP.X - iniP.X), iniP.Y))); - strokes.Add(GenerateArrowLineStroke(new Point(iniP.X, iniP.Y), new Point(iniP.X, iniP.Y - Math.Abs(endP.Y - iniP.Y)))); + strokes.Add(GenerateArrowLineStroke(new Point(iniP.X, iniP.Y), + new Point(iniP.X + Math.Abs(endP.X - iniP.X), iniP.Y))); + strokes.Add(GenerateArrowLineStroke(new Point(iniP.X, iniP.Y), + new Point(iniP.X, iniP.Y - Math.Abs(endP.Y - iniP.Y)))); d = (Math.Abs(iniP.X - endP.X) + Math.Abs(iniP.Y - endP.Y)) / 2; - strokes.Add(GenerateArrowLineStroke(new Point(iniP.X, iniP.Y), new Point(iniP.X - d / 1.76, iniP.Y + d / 1.76))); + strokes.Add(GenerateArrowLineStroke(new Point(iniP.X, iniP.Y), + new Point(iniP.X - d / 1.76, iniP.Y + d / 1.76))); try { inkCanvas.Strokes.Remove(lastTempStrokeCollection); - } catch { + } + catch { Trace.WriteLine("lastTempStrokeCollection failed."); } + lastTempStrokeCollection = strokes; inkCanvas.Strokes.Add(strokes); break; case 3: _currentCommitType = CommitReason.ShapeDrawing; - pointList = new List{ - new System.Windows.Point(iniP.X, iniP.Y), - new System.Windows.Point(iniP.X, endP.Y), - new System.Windows.Point(endP.X, endP.Y), - new System.Windows.Point(endP.X, iniP.Y), - new System.Windows.Point(iniP.X, iniP.Y) + pointList = new List { + new Point(iniP.X, iniP.Y), + new Point(iniP.X, endP.Y), + new Point(endP.X, endP.Y), + new Point(endP.X, iniP.Y), + new Point(iniP.X, iniP.Y) }; point = new StylusPointCollection(pointList); stroke = new Stroke(point) { @@ -655,20 +684,22 @@ namespace Ink_Canvas { }; try { inkCanvas.Strokes.Remove(lastTempStroke); - } catch { } + } + catch { } + lastTempStroke = stroke; inkCanvas.Strokes.Add(stroke); break; case 19: _currentCommitType = CommitReason.ShapeDrawing; - double a = iniP.X - endP.X; - double b = iniP.Y - endP.Y; - pointList = new List{ - new System.Windows.Point(iniP.X - a, iniP.Y - b), - new System.Windows.Point(iniP.X - a, iniP.Y + b), - new System.Windows.Point(iniP.X + a, iniP.Y + b), - new System.Windows.Point(iniP.X + a, iniP.Y - b), - new System.Windows.Point(iniP.X - a, iniP.Y - b) + var a = iniP.X - endP.X; + var b = iniP.Y - endP.Y; + pointList = new List { + new Point(iniP.X - a, iniP.Y - b), + new Point(iniP.X - a, iniP.Y + b), + new Point(iniP.X + a, iniP.Y + b), + new Point(iniP.X + a, iniP.Y - b), + new Point(iniP.X - a, iniP.Y - b) }; point = new StylusPointCollection(pointList); stroke = new Stroke(point) { @@ -676,7 +707,9 @@ namespace Ink_Canvas { }; try { inkCanvas.Strokes.Remove(lastTempStroke); - } catch { } + } + catch { } + lastTempStroke = stroke; inkCanvas.Strokes.Add(stroke); break; @@ -689,36 +722,44 @@ namespace Ink_Canvas { }; try { inkCanvas.Strokes.Remove(lastTempStroke); - } catch { } + } + catch { } + lastTempStroke = stroke; inkCanvas.Strokes.Add(stroke); break; case 5: _currentCommitType = CommitReason.ShapeDrawing; - double R = GetDistance(iniP, endP); - pointList = GenerateEllipseGeometry(new Point(iniP.X - R, iniP.Y - R), new Point(iniP.X + R, iniP.Y + R)); + var R = GetDistance(iniP, endP); + pointList = GenerateEllipseGeometry(new Point(iniP.X - R, iniP.Y - R), + new Point(iniP.X + R, iniP.Y + R)); point = new StylusPointCollection(pointList); stroke = new Stroke(point) { DrawingAttributes = inkCanvas.DefaultDrawingAttributes.Clone() }; try { inkCanvas.Strokes.Remove(lastTempStroke); - } catch { } + } + catch { } + lastTempStroke = stroke; inkCanvas.Strokes.Add(stroke); break; case 16: _currentCommitType = CommitReason.ShapeDrawing; - double halfA = endP.X - iniP.X; - double halfB = endP.Y - iniP.Y; - pointList = GenerateEllipseGeometry(new Point(iniP.X - halfA, iniP.Y - halfB), new Point(iniP.X + halfA, iniP.Y + halfB)); + var halfA = endP.X - iniP.X; + var halfB = endP.Y - iniP.Y; + pointList = GenerateEllipseGeometry(new Point(iniP.X - halfA, iniP.Y - halfB), + new Point(iniP.X + halfA, iniP.Y + halfB)); point = new StylusPointCollection(pointList); stroke = new Stroke(point) { DrawingAttributes = inkCanvas.DefaultDrawingAttributes.Clone() }; try { inkCanvas.Strokes.Remove(lastTempStroke); - } catch { } + } + catch { } + lastTempStroke = stroke; inkCanvas.Strokes.Add(stroke); break; @@ -726,13 +767,14 @@ namespace Ink_Canvas { _currentCommitType = CommitReason.ShapeDrawing; a = Math.Abs(endP.X - iniP.X); b = Math.Abs(endP.Y - iniP.Y); - pointList = GenerateEllipseGeometry(new Point(iniP.X - a, iniP.Y - b), new Point(iniP.X + a, iniP.Y + b)); + pointList = GenerateEllipseGeometry(new Point(iniP.X - a, iniP.Y - b), + new Point(iniP.X + a, iniP.Y + b)); point = new StylusPointCollection(pointList); stroke = new Stroke(point) { DrawingAttributes = inkCanvas.DefaultDrawingAttributes.Clone() }; strokes.Add(stroke); - double c = Math.Sqrt(Math.Abs(a * a - b * b)); + var c = Math.Sqrt(Math.Abs(a * a - b * b)); StylusPoint stylusPoint; if (a > b) { stylusPoint = new StylusPoint(iniP.X + c, iniP.Y, (float)1.0); @@ -749,7 +791,8 @@ namespace Ink_Canvas { DrawingAttributes = inkCanvas.DefaultDrawingAttributes.Clone() }; strokes.Add(stroke.Clone()); - } else if (a < b) { + } + else if (a < b) { stylusPoint = new StylusPoint(iniP.X, iniP.Y - c, (float)1.0); point = new StylusPointCollection(); point.Add(stylusPoint); @@ -765,21 +808,27 @@ namespace Ink_Canvas { }; strokes.Add(stroke.Clone()); } + try { inkCanvas.Strokes.Remove(lastTempStrokeCollection); - } catch { } + } + catch { } + lastTempStrokeCollection = strokes; inkCanvas.Strokes.Add(strokes); break; case 10: _currentCommitType = CommitReason.ShapeDrawing; R = GetDistance(iniP, endP); - strokes = GenerateDashedLineEllipseStrokeCollection(new Point(iniP.X - R, iniP.Y - R), new Point(iniP.X + R, iniP.Y + R)); + strokes = GenerateDashedLineEllipseStrokeCollection(new Point(iniP.X - R, iniP.Y - R), + new Point(iniP.X + R, iniP.Y + R)); try { inkCanvas.Strokes.Remove(lastTempStrokeCollection); - } catch { + } + catch { Trace.WriteLine("lastTempStrokeCollection failed."); } + lastTempStrokeCollection = strokes; inkCanvas.Strokes.Add(strokes); break; @@ -793,74 +842,98 @@ namespace Ink_Canvas { var pointList4 = new List(); if (drawMultiStepShapeCurrentStep == 0) { //第一笔:画渐近线 - double k = Math.Abs((endP.Y - iniP.Y) / (endP.X - iniP.X)); - strokes.Add(GenerateDashedLineStrokeCollection(new Point(2 * iniP.X - endP.X, 2 * iniP.Y - endP.Y), endP)); - strokes.Add(GenerateDashedLineStrokeCollection(new Point(2 * iniP.X - endP.X, endP.Y), new Point(endP.X, 2 * iniP.Y - endP.Y))); + var k = Math.Abs((endP.Y - iniP.Y) / (endP.X - iniP.X)); + strokes.Add( + GenerateDashedLineStrokeCollection(new Point(2 * iniP.X - endP.X, 2 * iniP.Y - endP.Y), + endP)); + strokes.Add(GenerateDashedLineStrokeCollection(new Point(2 * iniP.X - endP.X, endP.Y), + new Point(endP.X, 2 * iniP.Y - endP.Y))); drawMultiStepShapeSpecialParameter3 = k; drawMultiStepShapeSpecialStrokeCollection = strokes; - } else { + } + else { //第二笔:画双曲线 - double k = drawMultiStepShapeSpecialParameter3; - bool isHyperbolaFocalPointOnXAxis = Math.Abs((endP.Y - iniP.Y) / (endP.X - iniP.X)) < k; - if (isHyperbolaFocalPointOnXAxis) { // 焦点在 x 轴上 - a = Math.Sqrt(Math.Abs((endP.X - iniP.X) * (endP.X - iniP.X) - (endP.Y - iniP.Y) * (endP.Y - iniP.Y) / (k * k))); + var k = drawMultiStepShapeSpecialParameter3; + var isHyperbolaFocalPointOnXAxis = Math.Abs((endP.Y - iniP.Y) / (endP.X - iniP.X)) < k; + if (isHyperbolaFocalPointOnXAxis) { + // 焦点在 x 轴上 + a = Math.Sqrt(Math.Abs((endP.X - iniP.X) * (endP.X - iniP.X) - + (endP.Y - iniP.Y) * (endP.Y - iniP.Y) / (k * k))); b = a * k; pointList = new List(); - for (double i = a; i <= Math.Abs(endP.X - iniP.X); i += 0.5) { - double rY = Math.Sqrt(Math.Abs(k * k * i * i - b * b)); + for (var i = a; i <= Math.Abs(endP.X - iniP.X); i += 0.5) { + var rY = Math.Sqrt(Math.Abs(k * k * i * i - b * b)); pointList.Add(new Point(iniP.X + i, iniP.Y - rY)); pointList2.Add(new Point(iniP.X + i, iniP.Y + rY)); pointList3.Add(new Point(iniP.X - i, iniP.Y - rY)); pointList4.Add(new Point(iniP.X - i, iniP.Y + rY)); } - } else { // 焦点在 y 轴上 - a = Math.Sqrt(Math.Abs((endP.Y - iniP.Y) * (endP.Y - iniP.Y) - (endP.X - iniP.X) * (endP.X - iniP.X) * (k * k))); + } + else { + // 焦点在 y 轴上 + a = Math.Sqrt(Math.Abs((endP.Y - iniP.Y) * (endP.Y - iniP.Y) - + (endP.X - iniP.X) * (endP.X - iniP.X) * (k * k))); b = a / k; pointList = new List(); - for (double i = a; i <= Math.Abs(endP.Y - iniP.Y); i += 0.5) { - double rX = Math.Sqrt(Math.Abs(i * i / k / k - b * b)); + for (var i = a; i <= Math.Abs(endP.Y - iniP.Y); i += 0.5) { + var rX = Math.Sqrt(Math.Abs(i * i / k / k - b * b)); pointList.Add(new Point(iniP.X - rX, iniP.Y + i)); pointList2.Add(new Point(iniP.X + rX, iniP.Y + i)); pointList3.Add(new Point(iniP.X - rX, iniP.Y - i)); pointList4.Add(new Point(iniP.X + rX, iniP.Y - i)); } } + try { point = new StylusPointCollection(pointList); - stroke = new Stroke(point) { DrawingAttributes = inkCanvas.DefaultDrawingAttributes.Clone() }; + stroke = new Stroke(point) + { DrawingAttributes = inkCanvas.DefaultDrawingAttributes.Clone() }; strokes.Add(stroke.Clone()); point = new StylusPointCollection(pointList2); - stroke = new Stroke(point) { DrawingAttributes = inkCanvas.DefaultDrawingAttributes.Clone() }; + stroke = new Stroke(point) + { DrawingAttributes = inkCanvas.DefaultDrawingAttributes.Clone() }; strokes.Add(stroke.Clone()); point = new StylusPointCollection(pointList3); - stroke = new Stroke(point) { DrawingAttributes = inkCanvas.DefaultDrawingAttributes.Clone() }; + stroke = new Stroke(point) + { DrawingAttributes = inkCanvas.DefaultDrawingAttributes.Clone() }; strokes.Add(stroke.Clone()); point = new StylusPointCollection(pointList4); - stroke = new Stroke(point) { DrawingAttributes = inkCanvas.DefaultDrawingAttributes.Clone() }; + stroke = new Stroke(point) + { DrawingAttributes = inkCanvas.DefaultDrawingAttributes.Clone() }; strokes.Add(stroke.Clone()); if (drawingShapeMode == 25) { //画焦点 c = Math.Sqrt(a * a + b * b); - stylusPoint = isHyperbolaFocalPointOnXAxis ? new StylusPoint(iniP.X + c, iniP.Y, (float)1.0) : new StylusPoint(iniP.X, iniP.Y + c, (float)1.0); + stylusPoint = isHyperbolaFocalPointOnXAxis + ? new StylusPoint(iniP.X + c, iniP.Y, (float)1.0) + : new StylusPoint(iniP.X, iniP.Y + c, (float)1.0); point = new StylusPointCollection(); point.Add(stylusPoint); - stroke = new Stroke(point) { DrawingAttributes = inkCanvas.DefaultDrawingAttributes.Clone() }; + stroke = new Stroke(point) + { DrawingAttributes = inkCanvas.DefaultDrawingAttributes.Clone() }; strokes.Add(stroke.Clone()); - stylusPoint = isHyperbolaFocalPointOnXAxis ? new StylusPoint(iniP.X - c, iniP.Y, (float)1.0) : new StylusPoint(iniP.X, iniP.Y - c, (float)1.0); + stylusPoint = isHyperbolaFocalPointOnXAxis + ? new StylusPoint(iniP.X - c, iniP.Y, (float)1.0) + : new StylusPoint(iniP.X, iniP.Y - c, (float)1.0); point = new StylusPointCollection(); point.Add(stylusPoint); - stroke = new Stroke(point) { DrawingAttributes = inkCanvas.DefaultDrawingAttributes.Clone() }; + stroke = new Stroke(point) + { DrawingAttributes = inkCanvas.DefaultDrawingAttributes.Clone() }; strokes.Add(stroke.Clone()); } - } catch { + } + catch { return; } } + try { inkCanvas.Strokes.Remove(lastTempStrokeCollection); - } catch { + } + catch { Trace.WriteLine("lastTempStrokeCollection failed."); } + lastTempStrokeCollection = strokes; inkCanvas.Strokes.Add(strokes); break; @@ -871,10 +944,11 @@ namespace Ink_Canvas { a = (iniP.Y - endP.Y) / ((iniP.X - endP.X) * (iniP.X - endP.X)); pointList = new List(); pointList2 = new List(); - for (double i = 0.0; i <= Math.Abs(endP.X - iniP.X); i += 0.5) { + for (var i = 0.0; i <= Math.Abs(endP.X - iniP.X); i += 0.5) { pointList.Add(new Point(iniP.X + i, iniP.Y - a * i * i)); pointList2.Add(new Point(iniP.X - i, iniP.Y - a * i * i)); } + point = new StylusPointCollection(pointList); stroke = new Stroke(point) { DrawingAttributes = inkCanvas.DefaultDrawingAttributes.Clone() @@ -887,9 +961,11 @@ namespace Ink_Canvas { strokes.Add(stroke.Clone()); try { inkCanvas.Strokes.Remove(lastTempStrokeCollection); - } catch { + } + catch { Trace.WriteLine("lastTempStrokeCollection failed."); } + lastTempStrokeCollection = strokes; inkCanvas.Strokes.Add(strokes); break; @@ -900,10 +976,11 @@ namespace Ink_Canvas { a = (iniP.X - endP.X) / ((iniP.Y - endP.Y) * (iniP.Y - endP.Y)); pointList = new List(); pointList2 = new List(); - for (double i = 0.0; i <= Math.Abs(endP.Y - iniP.Y); i += 0.5) { + for (var i = 0.0; i <= Math.Abs(endP.Y - iniP.Y); i += 0.5) { pointList.Add(new Point(iniP.X - a * i * i, iniP.Y + i)); pointList2.Add(new Point(iniP.X - a * i * i, iniP.Y - i)); } + point = new StylusPointCollection(pointList); stroke = new Stroke(point) { DrawingAttributes = inkCanvas.DefaultDrawingAttributes.Clone() @@ -916,9 +993,11 @@ namespace Ink_Canvas { strokes.Add(stroke.Clone()); try { inkCanvas.Strokes.Remove(lastTempStrokeCollection); - } catch { + } + catch { Trace.WriteLine("lastTempStrokeCollection failed."); } + lastTempStrokeCollection = strokes; inkCanvas.Strokes.Add(strokes); break; @@ -926,14 +1005,15 @@ namespace Ink_Canvas { _currentCommitType = CommitReason.ShapeDrawing; //抛物线 y^2=ax, 含焦点 if (Math.Abs(iniP.X - endP.X) < 0.01 || Math.Abs(iniP.Y - endP.Y) < 0.01) return; - double p = (iniP.Y - endP.Y) * (iniP.Y - endP.Y) / (2 * (iniP.X - endP.X)); + var p = (iniP.Y - endP.Y) * (iniP.Y - endP.Y) / (2 * (iniP.X - endP.X)); a = 0.5 / p; pointList = new List(); pointList2 = new List(); - for (double i = 0.0; i <= Math.Abs(endP.Y - iniP.Y); i += 0.5) { + for (var i = 0.0; i <= Math.Abs(endP.Y - iniP.Y); i += 0.5) { pointList.Add(new Point(iniP.X - a * i * i, iniP.Y + i)); pointList2.Add(new Point(iniP.X - a * i * i, iniP.Y - i)); } + point = new StylusPointCollection(pointList); stroke = new Stroke(point) { DrawingAttributes = inkCanvas.DefaultDrawingAttributes.Clone() @@ -953,9 +1033,11 @@ namespace Ink_Canvas { strokes.Add(stroke.Clone()); try { inkCanvas.Strokes.Remove(lastTempStrokeCollection); - } catch { + } + catch { Trace.WriteLine("lastTempStrokeCollection failed."); } + lastTempStrokeCollection = strokes; inkCanvas.Strokes.Add(strokes); break; @@ -966,27 +1048,31 @@ namespace Ink_Canvas { newIniP = new Point(iniP.X, endP.Y); endP = new Point(endP.X, iniP.Y); } - double topA = Math.Abs(newIniP.X - endP.X); - double topB = topA / 2.646; + + var topA = Math.Abs(newIniP.X - endP.X); + var topB = topA / 2.646; //顶部椭圆 - pointList = GenerateEllipseGeometry(new Point(newIniP.X, newIniP.Y - topB / 2), new Point(endP.X, newIniP.Y + topB / 2)); + pointList = GenerateEllipseGeometry(new Point(newIniP.X, newIniP.Y - topB / 2), + new Point(endP.X, newIniP.Y + topB / 2)); point = new StylusPointCollection(pointList); stroke = new Stroke(point) { DrawingAttributes = inkCanvas.DefaultDrawingAttributes.Clone() }; strokes.Add(stroke.Clone()); //底部椭圆 - pointList = GenerateEllipseGeometry(new Point(newIniP.X, endP.Y - topB / 2), new Point(endP.X, endP.Y + topB / 2), false, true); + pointList = GenerateEllipseGeometry(new Point(newIniP.X, endP.Y - topB / 2), + new Point(endP.X, endP.Y + topB / 2), false, true); point = new StylusPointCollection(pointList); stroke = new Stroke(point) { DrawingAttributes = inkCanvas.DefaultDrawingAttributes.Clone() }; strokes.Add(stroke.Clone()); - strokes.Add(GenerateDashedLineEllipseStrokeCollection(new Point(newIniP.X, endP.Y - topB / 2), new Point(endP.X, endP.Y + topB / 2), true, false)); + strokes.Add(GenerateDashedLineEllipseStrokeCollection(new Point(newIniP.X, endP.Y - topB / 2), + new Point(endP.X, endP.Y + topB / 2), true, false)); //左侧 - pointList = new List{ - new System.Windows.Point(newIniP.X, newIniP.Y), - new System.Windows.Point(newIniP.X, endP.Y) + pointList = new List { + new Point(newIniP.X, newIniP.Y), + new Point(newIniP.X, endP.Y) }; point = new StylusPointCollection(pointList); stroke = new Stroke(point) { @@ -994,9 +1080,9 @@ namespace Ink_Canvas { }; strokes.Add(stroke.Clone()); //右侧 - pointList = new List{ - new System.Windows.Point(endP.X, newIniP.Y), - new System.Windows.Point(endP.X, endP.Y) + pointList = new List { + new Point(endP.X, newIniP.Y), + new Point(endP.X, endP.Y) }; point = new StylusPointCollection(pointList); stroke = new Stroke(point) { @@ -1005,9 +1091,11 @@ namespace Ink_Canvas { strokes.Add(stroke.Clone()); try { inkCanvas.Strokes.Remove(lastTempStrokeCollection); - } catch { + } + catch { Trace.WriteLine("lastTempStrokeCollection failed."); } + lastTempStrokeCollection = strokes; inkCanvas.Strokes.Add(strokes); break; @@ -1017,20 +1105,23 @@ namespace Ink_Canvas { newIniP = new Point(iniP.X, endP.Y); endP = new Point(endP.X, iniP.Y); } - double bottomA = Math.Abs(newIniP.X - endP.X); - double bottomB = bottomA / 2.646; + + var bottomA = Math.Abs(newIniP.X - endP.X); + var bottomB = bottomA / 2.646; //底部椭圆 - pointList = GenerateEllipseGeometry(new Point(newIniP.X, endP.Y - bottomB / 2), new Point(endP.X, endP.Y + bottomB / 2), false, true); + pointList = GenerateEllipseGeometry(new Point(newIniP.X, endP.Y - bottomB / 2), + new Point(endP.X, endP.Y + bottomB / 2), false, true); point = new StylusPointCollection(pointList); stroke = new Stroke(point) { DrawingAttributes = inkCanvas.DefaultDrawingAttributes.Clone() }; strokes.Add(stroke.Clone()); - strokes.Add(GenerateDashedLineEllipseStrokeCollection(new Point(newIniP.X, endP.Y - bottomB / 2), new Point(endP.X, endP.Y + bottomB / 2), true, false)); + strokes.Add(GenerateDashedLineEllipseStrokeCollection(new Point(newIniP.X, endP.Y - bottomB / 2), + new Point(endP.X, endP.Y + bottomB / 2), true, false)); //左侧 - pointList = new List{ - new System.Windows.Point((newIniP.X + endP.X) / 2, newIniP.Y), - new System.Windows.Point(newIniP.X, endP.Y) + pointList = new List { + new Point((newIniP.X + endP.X) / 2, newIniP.Y), + new Point(newIniP.X, endP.Y) }; point = new StylusPointCollection(pointList); stroke = new Stroke(point) { @@ -1038,9 +1129,9 @@ namespace Ink_Canvas { }; strokes.Add(stroke.Clone()); //右侧 - pointList = new List{ - new System.Windows.Point((newIniP.X + endP.X) / 2, newIniP.Y), - new System.Windows.Point(endP.X, endP.Y) + pointList = new List { + new Point((newIniP.X + endP.X) / 2, newIniP.Y), + new Point(endP.X, endP.Y) }; point = new StylusPointCollection(pointList); stroke = new Stroke(point) { @@ -1049,9 +1140,11 @@ namespace Ink_Canvas { strokes.Add(stroke.Clone()); try { inkCanvas.Strokes.Remove(lastTempStrokeCollection); - } catch { + } + catch { Trace.WriteLine("lastTempStrokeCollection failed."); } + lastTempStrokeCollection = strokes; inkCanvas.Strokes.Add(strokes); break; @@ -1066,23 +1159,26 @@ namespace Ink_Canvas { strokes.Add(GenerateLineStroke(new Point(iniP.X, iniP.Y), new Point(endP.X, iniP.Y))); try { inkCanvas.Strokes.Remove(lastTempStrokeCollection); - } catch { + } + catch { Trace.WriteLine("lastTempStrokeCollection failed."); } + lastTempStrokeCollection = strokes; inkCanvas.Strokes.Add(strokes); CuboidFrontRectIniP = iniP; CuboidFrontRectEndP = endP; - } else { + } + else { d = CuboidFrontRectIniP.Y - endP.Y; if (d < 0) d = -d; //就是懒不想做反向的,不要让我去做,想做自己做好之后 Pull Request a = CuboidFrontRectEndP.X - CuboidFrontRectIniP.X; //正面矩形长 b = CuboidFrontRectEndP.Y - CuboidFrontRectIniP.Y; //正面矩形宽 //横上 - Point newLineIniP = new Point(CuboidFrontRectIniP.X + d, CuboidFrontRectIniP.Y - d); - Point newLineEndP = new Point(CuboidFrontRectEndP.X + d, CuboidFrontRectIniP.Y - d); - pointList = new List { newLineIniP, newLineEndP }; + var newLineIniP = new Point(CuboidFrontRectIniP.X + d, CuboidFrontRectIniP.Y - d); + var newLineEndP = new Point(CuboidFrontRectEndP.X + d, CuboidFrontRectIniP.Y - d); + pointList = new List { newLineIniP, newLineEndP }; point = new StylusPointCollection(pointList); stroke = new Stroke(point) { DrawingAttributes = inkCanvas.DefaultDrawingAttributes.Clone() }; strokes.Add(stroke.Clone()); @@ -1093,14 +1189,14 @@ namespace Ink_Canvas { //斜左上 newLineIniP = new Point(CuboidFrontRectIniP.X, CuboidFrontRectIniP.Y); newLineEndP = new Point(CuboidFrontRectIniP.X + d, CuboidFrontRectIniP.Y - d); - pointList = new List { newLineIniP, newLineEndP }; + pointList = new List { newLineIniP, newLineEndP }; point = new StylusPointCollection(pointList); stroke = new Stroke(point) { DrawingAttributes = inkCanvas.DefaultDrawingAttributes.Clone() }; strokes.Add(stroke.Clone()); //斜右上 newLineIniP = new Point(CuboidFrontRectEndP.X, CuboidFrontRectIniP.Y); newLineEndP = new Point(CuboidFrontRectEndP.X + d, CuboidFrontRectIniP.Y - d); - pointList = new List { newLineIniP, newLineEndP }; + pointList = new List { newLineIniP, newLineEndP }; point = new StylusPointCollection(pointList); stroke = new Stroke(point) { DrawingAttributes = inkCanvas.DefaultDrawingAttributes.Clone() }; strokes.Add(stroke.Clone()); @@ -1111,7 +1207,7 @@ namespace Ink_Canvas { //斜右下 newLineIniP = new Point(CuboidFrontRectEndP.X, CuboidFrontRectEndP.Y); newLineEndP = new Point(CuboidFrontRectEndP.X + d, CuboidFrontRectEndP.Y - d); - pointList = new List { newLineIniP, newLineEndP }; + pointList = new List { newLineIniP, newLineEndP }; point = new StylusPointCollection(pointList); stroke = new Stroke(point) { DrawingAttributes = inkCanvas.DefaultDrawingAttributes.Clone() }; strokes.Add(stroke.Clone()); @@ -1122,106 +1218,112 @@ namespace Ink_Canvas { //竖右 newLineIniP = new Point(CuboidFrontRectEndP.X + d, CuboidFrontRectIniP.Y - d); newLineEndP = new Point(CuboidFrontRectEndP.X + d, CuboidFrontRectEndP.Y - d); - pointList = new List { newLineIniP, newLineEndP }; + pointList = new List { newLineIniP, newLineEndP }; point = new StylusPointCollection(pointList); stroke = new Stroke(point) { DrawingAttributes = inkCanvas.DefaultDrawingAttributes.Clone() }; strokes.Add(stroke.Clone()); try { inkCanvas.Strokes.Remove(lastTempStrokeCollection); - } catch { + } + catch { Trace.WriteLine("lastTempStrokeCollection failed."); } + lastTempStrokeCollection = strokes; - inkCanvas.Strokes.Add(strokes); + inkCanvas.Strokes.Add(strokes); } + break; } } + #endregion - bool isFirstTouchCuboid = true; - Point CuboidFrontRectIniP = new Point(); - Point CuboidFrontRectEndP = new Point(); + private bool isFirstTouchCuboid = true; + private Point CuboidFrontRectIniP = new Point(); + private Point CuboidFrontRectEndP = new Point(); private void Main_Grid_TouchUp(object sender, TouchEventArgs e) { inkCanvas_MouseUp(sender, null); - if (dec.Count == 0) { - isWaitUntilNextTouchDown = false; - } + if (dec.Count == 0) isWaitUntilNextTouchDown = false; } - Stroke lastTempStroke = null; - StrokeCollection lastTempStrokeCollection = new StrokeCollection(); - Matrix? lastTempManiputlaionMatrix = null; - bool isWaitUntilNextTouchDown = false; - private List GenerateEllipseGeometry(System.Windows.Point st, System.Windows.Point ed, bool isDrawTop = true, bool isDrawBottom = true) { - double a = 0.5 * (ed.X - st.X); - double b = 0.5 * (ed.Y - st.Y); - List pointList = new List(); + private Stroke lastTempStroke = null; + private StrokeCollection lastTempStrokeCollection = new StrokeCollection(); + private Matrix? lastTempManiputlaionMatrix = null; + + private bool isWaitUntilNextTouchDown = false; + + private List GenerateEllipseGeometry(Point st, Point ed, bool isDrawTop = true, + bool isDrawBottom = true) { + var a = 0.5 * (ed.X - st.X); + var b = 0.5 * (ed.Y - st.Y); + var pointList = new List(); if (isDrawTop && isDrawBottom) { - for (double r = 0; r <= 2 * Math.PI; r = r + 0.01) { - pointList.Add(new System.Windows.Point(0.5 * (st.X + ed.X) + a * Math.Cos(r), 0.5 * (st.Y + ed.Y) + b * Math.Sin(r))); - } - } else { - if (isDrawBottom) { - for (double r = 0; r <= Math.PI; r = r + 0.01) { - pointList.Add(new System.Windows.Point(0.5 * (st.X + ed.X) + a * Math.Cos(r), 0.5 * (st.Y + ed.Y) + b * Math.Sin(r))); - } - } - if (isDrawTop) { - for (double r = Math.PI; r <= 2 * Math.PI; r = r + 0.01) { - pointList.Add(new System.Windows.Point(0.5 * (st.X + ed.X) + a * Math.Cos(r), 0.5 * (st.Y + ed.Y) + b * Math.Sin(r))); - } - } + for (double r = 0; r <= 2 * Math.PI; r = r + 0.01) + pointList.Add(new Point(0.5 * (st.X + ed.X) + a * Math.Cos(r), + 0.5 * (st.Y + ed.Y) + b * Math.Sin(r))); } + else { + if (isDrawBottom) + for (double r = 0; r <= Math.PI; r = r + 0.01) + pointList.Add(new Point(0.5 * (st.X + ed.X) + a * Math.Cos(r), + 0.5 * (st.Y + ed.Y) + b * Math.Sin(r))); + if (isDrawTop) + for (var r = Math.PI; r <= 2 * Math.PI; r = r + 0.01) + pointList.Add(new Point(0.5 * (st.X + ed.X) + a * Math.Cos(r), + 0.5 * (st.Y + ed.Y) + b * Math.Sin(r))); + } + return pointList; } - private StrokeCollection GenerateDashedLineEllipseStrokeCollection(System.Windows.Point st, System.Windows.Point ed, bool isDrawTop = true, bool isDrawBottom = true) { - double a = 0.5 * (ed.X - st.X); - double b = 0.5 * (ed.Y - st.Y); - double step = 0.05; - List pointList = new List(); + private StrokeCollection GenerateDashedLineEllipseStrokeCollection(Point st, Point ed, bool isDrawTop = true, + bool isDrawBottom = true) { + var a = 0.5 * (ed.X - st.X); + var b = 0.5 * (ed.Y - st.Y); + var step = 0.05; + var pointList = new List(); StylusPointCollection point; Stroke stroke; - StrokeCollection strokes = new StrokeCollection(); - if (isDrawBottom) { - for (double i = 0.0; i < 1.0; i += step * 1.66) { + var strokes = new StrokeCollection(); + if (isDrawBottom) + for (var i = 0.0; i < 1.0; i += step * 1.66) { pointList = new List(); - for (double r = Math.PI * i; r <= Math.PI * (i + step); r = r + 0.01) { - pointList.Add(new System.Windows.Point(0.5 * (st.X + ed.X) + a * Math.Cos(r), 0.5 * (st.Y + ed.Y) + b * Math.Sin(r))); - } + for (var r = Math.PI * i; r <= Math.PI * (i + step); r = r + 0.01) + pointList.Add(new Point(0.5 * (st.X + ed.X) + a * Math.Cos(r), + 0.5 * (st.Y + ed.Y) + b * Math.Sin(r))); point = new StylusPointCollection(pointList); stroke = new Stroke(point) { DrawingAttributes = inkCanvas.DefaultDrawingAttributes.Clone() }; strokes.Add(stroke.Clone()); } - } - if (isDrawTop) { - for (double i = 1.0; i < 2.0; i += step * 1.66) { + + if (isDrawTop) + for (var i = 1.0; i < 2.0; i += step * 1.66) { pointList = new List(); - for (double r = Math.PI * i; r <= Math.PI * (i + step); r = r + 0.01) { - pointList.Add(new System.Windows.Point(0.5 * (st.X + ed.X) + a * Math.Cos(r), 0.5 * (st.Y + ed.Y) + b * Math.Sin(r))); - } + for (var r = Math.PI * i; r <= Math.PI * (i + step); r = r + 0.01) + pointList.Add(new Point(0.5 * (st.X + ed.X) + a * Math.Cos(r), + 0.5 * (st.Y + ed.Y) + b * Math.Sin(r))); point = new StylusPointCollection(pointList); stroke = new Stroke(point) { DrawingAttributes = inkCanvas.DefaultDrawingAttributes.Clone() }; strokes.Add(stroke.Clone()); } - } + return strokes; } - private Stroke GenerateLineStroke(System.Windows.Point st, System.Windows.Point ed) { - List pointList = new List(); + private Stroke GenerateLineStroke(Point st, Point ed) { + var pointList = new List(); StylusPointCollection point; Stroke stroke; - pointList = new List{ - new System.Windows.Point(st.X, st.Y), - new System.Windows.Point(ed.X, ed.Y) + pointList = new List { + new Point(st.X, st.Y), + new Point(ed.X, ed.Y) }; point = new StylusPointCollection(pointList); stroke = new Stroke(point) { @@ -1230,47 +1332,44 @@ namespace Ink_Canvas { return stroke; } - private Stroke GenerateArrowLineStroke(System.Windows.Point st, System.Windows.Point ed) - { - List pointList = new List(); + private Stroke GenerateArrowLineStroke(Point st, Point ed) { + var pointList = new List(); StylusPointCollection point; Stroke stroke; double w = 20, h = 7; - double theta = Math.Atan2(st.Y - ed.Y, st.X - ed.X); - double sint = Math.Sin(theta); - double cost = Math.Cos(theta); + var theta = Math.Atan2(st.Y - ed.Y, st.X - ed.X); + var sint = Math.Sin(theta); + var cost = Math.Cos(theta); - pointList = new List - { + pointList = new List { new Point(st.X, st.Y), - new Point(ed.X , ed.Y), + new Point(ed.X, ed.Y), new Point(ed.X + (w * cost - h * sint), ed.Y + (w * sint + h * cost)), - new Point(ed.X,ed.Y), + new Point(ed.X, ed.Y), new Point(ed.X + (w * cost + h * sint), ed.Y - (h * cost - w * sint)) }; point = new StylusPointCollection(pointList); - stroke = new Stroke(point) - { + stroke = new Stroke(point) { DrawingAttributes = inkCanvas.DefaultDrawingAttributes.Clone() }; return stroke; } - private StrokeCollection GenerateDashedLineStrokeCollection(System.Windows.Point st, System.Windows.Point ed) { + private StrokeCollection GenerateDashedLineStrokeCollection(Point st, Point ed) { double step = 5; - List pointList = new List(); + var pointList = new List(); StylusPointCollection point; Stroke stroke; - StrokeCollection strokes = new StrokeCollection(); - double d = GetDistance(st, ed); - double sinTheta = (ed.Y - st.Y) / d; - double cosTheta = (ed.X - st.X) / d; - for (double i = 0.0; i < d; i += step * 2.76) { - pointList = new List{ - new System.Windows.Point(st.X + i * cosTheta, st.Y + i * sinTheta), - new System.Windows.Point(st.X + Math.Min(i + step, d) * cosTheta, st.Y + Math.Min(i + step, d) * sinTheta) + var strokes = new StrokeCollection(); + var d = GetDistance(st, ed); + var sinTheta = (ed.Y - st.Y) / d; + var cosTheta = (ed.X - st.X) / d; + for (var i = 0.0; i < d; i += step * 2.76) { + pointList = new List { + new Point(st.X + i * cosTheta, st.Y + i * sinTheta), + new Point(st.X + Math.Min(i + step, d) * cosTheta, st.Y + Math.Min(i + step, d) * sinTheta) }; point = new StylusPointCollection(pointList); stroke = new Stroke(point) { @@ -1278,19 +1377,20 @@ namespace Ink_Canvas { }; strokes.Add(stroke.Clone()); } + return strokes; } - private StrokeCollection GenerateDotLineStrokeCollection(System.Windows.Point st, System.Windows.Point ed) { + private StrokeCollection GenerateDotLineStrokeCollection(Point st, Point ed) { double step = 3; - List pointList = new List(); + var pointList = new List(); StylusPointCollection point; Stroke stroke; - StrokeCollection strokes = new StrokeCollection(); - double d = GetDistance(st, ed); - double sinTheta = (ed.Y - st.Y) / d; - double cosTheta = (ed.X - st.X) / d; - for (double i = 0.0; i < d; i += step * 2.76) { + var strokes = new StrokeCollection(); + var d = GetDistance(st, ed); + var sinTheta = (ed.Y - st.Y) / d; + var cosTheta = (ed.X - st.X) / d; + for (var i = 0.0; i < d; i += step * 2.76) { var stylusPoint = new StylusPoint(st.X + i * cosTheta, st.Y + i * sinTheta, (float)0.8); point = new StylusPointCollection(); point.Add(stylusPoint); @@ -1299,97 +1399,99 @@ namespace Ink_Canvas { }; strokes.Add(stroke.Clone()); } + return strokes; } - bool isMouseDown = false; + private bool isMouseDown = false; + private void inkCanvas_MouseDown(object sender, MouseButtonEventArgs e) { isMouseDown = true; - if (NeedUpdateIniP()) { - iniP = e.GetPosition(inkCanvas); - } + if (NeedUpdateIniP()) iniP = e.GetPosition(inkCanvas); } private void inkCanvas_MouseMove(object sender, MouseEventArgs e) { - if (isMouseDown) { - MouseTouchMove(e.GetPosition(inkCanvas)); - } + if (isMouseDown) MouseTouchMove(e.GetPosition(inkCanvas)); } private void inkCanvas_MouseUp(object sender, MouseButtonEventArgs e) { - if (drawingShapeMode == 5) { - if (lastTempStroke != null) - { - Circle circle = new Circle(new Point(), 0, lastTempStroke); - circle.R = GetDistance(circle.Stroke.StylusPoints[0].ToPoint(), circle.Stroke.StylusPoints[circle.Stroke.StylusPoints.Count / 2].ToPoint()) / 2; - circle.Centroid = new Point((circle.Stroke.StylusPoints[0].X + circle.Stroke.StylusPoints[circle.Stroke.StylusPoints.Count / 2].X) / 2, - (circle.Stroke.StylusPoints[0].Y + circle.Stroke.StylusPoints[circle.Stroke.StylusPoints.Count / 2].Y) / 2); + if (lastTempStroke != null) { + var circle = new Circle(new Point(), 0, lastTempStroke); + circle.R = GetDistance(circle.Stroke.StylusPoints[0].ToPoint(), + circle.Stroke.StylusPoints[circle.Stroke.StylusPoints.Count / 2].ToPoint()) / 2; + circle.Centroid = new Point( + (circle.Stroke.StylusPoints[0].X + + circle.Stroke.StylusPoints[circle.Stroke.StylusPoints.Count / 2].X) / 2, + (circle.Stroke.StylusPoints[0].Y + + circle.Stroke.StylusPoints[circle.Stroke.StylusPoints.Count / 2].Y) / 2); circles.Add(circle); } - if (lastIsInMultiTouchMode) - { + + if (lastIsInMultiTouchMode) { ToggleSwitchEnableMultiTouchMode.IsOn = true; lastIsInMultiTouchMode = false; } } - if (drawingShapeMode != 9 && drawingShapeMode != 0 && drawingShapeMode != 24 && drawingShapeMode != 25) { - if (isLongPressSelected) { - } else { + if (drawingShapeMode != 9 && drawingShapeMode != 0 && drawingShapeMode != 24 && drawingShapeMode != 25) { + if (isLongPressSelected) { } + else { BtnPen_Click(null, null); //画完一次还原到笔模式 - if (lastIsInMultiTouchMode) - { + if (lastIsInMultiTouchMode) { ToggleSwitchEnableMultiTouchMode.IsOn = true; lastIsInMultiTouchMode = false; } } } + if (drawingShapeMode == 9) { if (isFirstTouchCuboid) { if (CuboidStrokeCollection == null) CuboidStrokeCollection = new StrokeCollection(); isFirstTouchCuboid = false; - Point newIniP = new Point(Math.Min(CuboidFrontRectIniP.X, CuboidFrontRectEndP.X), Math.Min(CuboidFrontRectIniP.Y, CuboidFrontRectEndP.Y)); - Point newEndP = new Point(Math.Max(CuboidFrontRectIniP.X, CuboidFrontRectEndP.X), Math.Max(CuboidFrontRectIniP.Y, CuboidFrontRectEndP.Y)); + var newIniP = new Point(Math.Min(CuboidFrontRectIniP.X, CuboidFrontRectEndP.X), + Math.Min(CuboidFrontRectIniP.Y, CuboidFrontRectEndP.Y)); + var newEndP = new Point(Math.Max(CuboidFrontRectIniP.X, CuboidFrontRectEndP.X), + Math.Max(CuboidFrontRectIniP.Y, CuboidFrontRectEndP.Y)); CuboidFrontRectIniP = newIniP; CuboidFrontRectEndP = newEndP; - try - { + try { CuboidStrokeCollection.Add(lastTempStrokeCollection); - } catch - { + } + catch { Trace.WriteLine("lastTempStrokeCollection failed."); } - - } else { + } + else { BtnPen_Click(null, null); //画完还原到笔模式 - if (lastIsInMultiTouchMode) - { + if (lastIsInMultiTouchMode) { ToggleSwitchEnableMultiTouchMode.IsOn = true; lastIsInMultiTouchMode = false; } + if (_currentCommitType == CommitReason.ShapeDrawing) { - try - { + try { CuboidStrokeCollection.Add(lastTempStrokeCollection); } - catch - { + catch { Trace.WriteLine("lastTempStrokeCollection failed."); } + _currentCommitType = CommitReason.UserInput; timeMachine.CommitStrokeUserInputHistory(CuboidStrokeCollection); CuboidStrokeCollection = null; } } } + if (drawingShapeMode == 24 || drawingShapeMode == 25) { if (drawMultiStepShapeCurrentStep == 0) { drawMultiStepShapeCurrentStep = 1; - } else { + } + else { drawMultiStepShapeCurrentStep = 0; if (drawMultiStepShapeSpecialStrokeCollection != null) { - bool opFlag = false; + var opFlag = false; switch (Settings.Canvas.HyperbolaAsymptoteOption) { case OptionalOperation.Yes: opFlag = true; @@ -1398,61 +1500,56 @@ namespace Ink_Canvas { opFlag = false; break; case OptionalOperation.Ask: - opFlag = MessageBox.Show("是否移除渐近线?", "Ink Canvas", MessageBoxButton.YesNo) != MessageBoxResult.Yes; + opFlag = MessageBox.Show("是否移除渐近线?", "Ink Canvas", MessageBoxButton.YesNo) != + MessageBoxResult.Yes; break; - }; - if (!opFlag) { - inkCanvas.Strokes.Remove(drawMultiStepShapeSpecialStrokeCollection); } + + ; + if (!opFlag) inkCanvas.Strokes.Remove(drawMultiStepShapeSpecialStrokeCollection); } + BtnPen_Click(null, null); //画完还原到笔模式 - if (lastIsInMultiTouchMode) - { + if (lastIsInMultiTouchMode) { ToggleSwitchEnableMultiTouchMode.IsOn = true; lastIsInMultiTouchMode = false; } } } + isMouseDown = false; if (ReplacedStroke != null || AddedStroke != null) { timeMachine.CommitStrokeEraseHistory(ReplacedStroke, AddedStroke); AddedStroke = null; ReplacedStroke = null; } + if (_currentCommitType == CommitReason.ShapeDrawing && drawingShapeMode != 9) { _currentCommitType = CommitReason.UserInput; StrokeCollection collection = null; - if (lastTempStrokeCollection != null && lastTempStrokeCollection.Count > 0) { + if (lastTempStrokeCollection != null && lastTempStrokeCollection.Count > 0) collection = lastTempStrokeCollection; - } else if (lastTempStroke != null) - { - collection = new StrokeCollection() { lastTempStroke }; - } - if (collection != null) - { - timeMachine.CommitStrokeUserInputHistory(collection); - } + else if (lastTempStroke != null) collection = new StrokeCollection() { lastTempStroke }; + if (collection != null) timeMachine.CommitStrokeUserInputHistory(collection); } - if (lastTempManiputlaionMatrix != null) - { + + if (lastTempManiputlaionMatrix != null) { timeMachine.CommitStrokeManipulationHistory(lastTempStrokeCollection, lastTempManiputlaionMatrix.Value); lastTempStrokeCollection = null; lastTempManiputlaionMatrix = null; } + lastTempStroke = null; lastTempStrokeCollection = null; lastTempManiputlaionMatrix = null; - if (Settings.Canvas.FitToCurve == true) - { - drawingAttributes.FitToCurve = true; - } + if (Settings.Canvas.FitToCurve == true) drawingAttributes.FitToCurve = true; } private bool NeedUpdateIniP() { - if (drawingShapeMode == 24 || drawingShapeMode == 25) { - if (drawMultiStepShapeCurrentStep == 1) return false; - } + if (drawingShapeMode == 24 || drawingShapeMode == 25) + if (drawMultiStepShapeCurrentStep == 1) + return false; return true; } } -} +} \ No newline at end of file diff --git a/Ink Canvas/MainWindow_cs/MW_SimulatePressure&InkToShape.cs b/Ink Canvas/MainWindow_cs/MW_SimulatePressure&InkToShape.cs index f843805..e31f1e0 100644 --- a/Ink Canvas/MainWindow_cs/MW_SimulatePressure&InkToShape.cs +++ b/Ink Canvas/MainWindow_cs/MW_SimulatePressure&InkToShape.cs @@ -9,50 +9,36 @@ using System.Windows.Input; using System.Windows.Media; using Point = System.Windows.Point; -namespace Ink_Canvas -{ - public partial class MainWindow : Window - { - StrokeCollection newStrokes = new StrokeCollection(); - List circles = new List(); +namespace Ink_Canvas { + public partial class MainWindow : Window { + private StrokeCollection newStrokes = new StrokeCollection(); + private List circles = new List(); - private void inkCanvas_StrokeCollected(object sender, InkCanvasStrokeCollectedEventArgs e) - { - if (Settings.Canvas.FitToCurve == true) - { - drawingAttributes.FitToCurve = false; - } + private void inkCanvas_StrokeCollected(object sender, InkCanvasStrokeCollectedEventArgs e) { + if (Settings.Canvas.FitToCurve == true) drawingAttributes.FitToCurve = false; - try - { + try { inkCanvas.Opacity = 1; - if (Settings.InkToShape.IsInkToShapeEnabled && !Environment.Is64BitProcess) - { - void InkToShapeProcess() - { - try - { + if (Settings.InkToShape.IsInkToShapeEnabled && !Environment.Is64BitProcess) { + void InkToShapeProcess() { + try { newStrokes.Add(e.Stroke); if (newStrokes.Count > 4) newStrokes.RemoveAt(0); - for (int i = 0; i < newStrokes.Count; i++) - { - if (!inkCanvas.Strokes.Contains(newStrokes[i])) newStrokes.RemoveAt(i--); - } + for (var i = 0; i < newStrokes.Count; i++) + if (!inkCanvas.Strokes.Contains(newStrokes[i])) + newStrokes.RemoveAt(i--); - for (int i = 0; i < circles.Count; i++) - { - if (!inkCanvas.Strokes.Contains(circles[i].Stroke)) circles.RemoveAt(i); - } + for (var i = 0; i < circles.Count; i++) + if (!inkCanvas.Strokes.Contains(circles[i].Stroke)) + circles.RemoveAt(i); var strokeReco = new StrokeCollection(); var result = InkRecognizeHelper.RecognizeShape(newStrokes); - for (int i = newStrokes.Count - 1; i >= 0; i--) - { + for (var i = newStrokes.Count - 1; i >= 0; i--) { strokeReco.Add(newStrokes[i]); var newResult = InkRecognizeHelper.RecognizeShape(strokeReco); if (newResult.InkDrawingNode.GetShapeName() == "Circle" || - newResult.InkDrawingNode.GetShapeName() == "Ellipse") - { + newResult.InkDrawingNode.GetShapeName() == "Ellipse") { result = newResult; break; } @@ -61,59 +47,50 @@ namespace Ink_Canvas } if (result.InkDrawingNode.GetShapeName() == "Circle" && - Settings.InkToShape.IsInkToShapeRounded == true) - { + Settings.InkToShape.IsInkToShapeRounded == true) { var shape = result.InkDrawingNode.GetShape(); - if (shape.Width > 75) - { - foreach (Circle circle in circles) - { + if (shape.Width > 75) { + foreach (var circle in circles) //判断是否画同心圆 if (Math.Abs(result.Centroid.X - circle.Centroid.X) / shape.Width < 0.12 && - Math.Abs(result.Centroid.Y - circle.Centroid.Y) / shape.Width < 0.12) - { + Math.Abs(result.Centroid.Y - circle.Centroid.Y) / shape.Width < 0.12) { result.Centroid = circle.Centroid; break; } - else - { - double d = (result.Centroid.X - circle.Centroid.X) * - (result.Centroid.X - circle.Centroid.X) + - (result.Centroid.Y - circle.Centroid.Y) * - (result.Centroid.Y - circle.Centroid.Y); + else { + var d = (result.Centroid.X - circle.Centroid.X) * + (result.Centroid.X - circle.Centroid.X) + + (result.Centroid.Y - circle.Centroid.Y) * + (result.Centroid.Y - circle.Centroid.Y); d = Math.Sqrt(d); //判断是否画外切圆 - double x = shape.Width / 2.0 + circle.R - d; - if (Math.Abs(x) / shape.Width < 0.1) - { - double sinTheta = (result.Centroid.Y - circle.Centroid.Y) / d; - double cosTheta = (result.Centroid.X - circle.Centroid.X) / d; - double newX = result.Centroid.X + x * cosTheta; - double newY = result.Centroid.Y + x * sinTheta; + var x = shape.Width / 2.0 + circle.R - d; + if (Math.Abs(x) / shape.Width < 0.1) { + var sinTheta = (result.Centroid.Y - circle.Centroid.Y) / d; + var cosTheta = (result.Centroid.X - circle.Centroid.X) / d; + var newX = result.Centroid.X + x * cosTheta; + var newY = result.Centroid.Y + x * sinTheta; result.Centroid = new Point(newX, newY); } //判断是否画外切圆 x = Math.Abs(circle.R - shape.Width / 2.0) - d; - if (Math.Abs(x) / shape.Width < 0.1) - { - double sinTheta = (result.Centroid.Y - circle.Centroid.Y) / d; - double cosTheta = (result.Centroid.X - circle.Centroid.X) / d; - double newX = result.Centroid.X + x * cosTheta; - double newY = result.Centroid.Y + x * sinTheta; + if (Math.Abs(x) / shape.Width < 0.1) { + var sinTheta = (result.Centroid.Y - circle.Centroid.Y) / d; + var cosTheta = (result.Centroid.X - circle.Centroid.X) / d; + var newX = result.Centroid.X + x * cosTheta; + var newY = result.Centroid.Y + x * sinTheta; result.Centroid = new Point(newX, newY); } } - } - Point iniP = new Point(result.Centroid.X - shape.Width / 2, + var iniP = new Point(result.Centroid.X - shape.Width / 2, result.Centroid.Y - shape.Height / 2); - Point endP = new Point(result.Centroid.X + shape.Width / 2, + var endP = new Point(result.Centroid.X + shape.Width / 2, result.Centroid.Y + shape.Height / 2); var pointList = GenerateEllipseGeometry(iniP, endP); var point = new StylusPointCollection(pointList); - var stroke = new Stroke(point) - { + var stroke = new Stroke(point) { DrawingAttributes = inkCanvas.DefaultDrawingAttributes.Clone() }; circles.Add(new Circle(result.Centroid, shape.Width / 2.0, stroke)); @@ -126,38 +103,33 @@ namespace Ink_Canvas } } else if (result.InkDrawingNode.GetShapeName().Contains("Ellipse") && - Settings.InkToShape.IsInkToShapeRounded == true) - { + Settings.InkToShape.IsInkToShapeRounded == true) { var shape = result.InkDrawingNode.GetShape(); //var shape1 = result.InkDrawingNode.GetShape(); //shape1.Fill = Brushes.Gray; //Canvas.Children.Add(shape1); var p = result.InkDrawingNode.HotPoints; - double a = GetDistance(p[0], p[2]) / 2; //长半轴 - double b = GetDistance(p[1], p[3]) / 2; //短半轴 - if (a < b) - { - double t = a; + var a = GetDistance(p[0], p[2]) / 2; //长半轴 + var b = GetDistance(p[1], p[3]) / 2; //短半轴 + if (a < b) { + var t = a; a = b; b = t; } result.Centroid = new Point((p[0].X + p[2].X) / 2, (p[0].Y + p[2].Y) / 2); - bool needRotation = true; + var needRotation = true; - if (shape.Width > 75 || shape.Height > 75 && p.Count == 4) - { - Point iniP = new Point(result.Centroid.X - shape.Width / 2, + if (shape.Width > 75 || (shape.Height > 75 && p.Count == 4)) { + var iniP = new Point(result.Centroid.X - shape.Width / 2, result.Centroid.Y - shape.Height / 2); - Point endP = new Point(result.Centroid.X + shape.Width / 2, + var endP = new Point(result.Centroid.X + shape.Width / 2, result.Centroid.Y + shape.Height / 2); - foreach (Circle circle in circles) - { + foreach (var circle in circles) //判断是否画同心椭圆 if (Math.Abs(result.Centroid.X - circle.Centroid.X) / a < 0.2 && - Math.Abs(result.Centroid.Y - circle.Centroid.Y) / a < 0.2) - { + Math.Abs(result.Centroid.Y - circle.Centroid.Y) / a < 0.2) { result.Centroid = circle.Centroid; iniP = new Point(result.Centroid.X - shape.Width / 2, result.Centroid.Y - shape.Height / 2); @@ -165,17 +137,14 @@ namespace Ink_Canvas result.Centroid.Y + shape.Height / 2); //再判断是否与圆相切 - if (Math.Abs(a - circle.R) / a < 0.2) - { - if (shape.Width >= shape.Height) - { + if (Math.Abs(a - circle.R) / a < 0.2) { + if (shape.Width >= shape.Height) { iniP.X = result.Centroid.X - circle.R; endP.X = result.Centroid.X + circle.R; iniP.Y = result.Centroid.Y - b; endP.Y = result.Centroid.Y + b; } - else - { + else { iniP.Y = result.Centroid.Y - circle.R; endP.Y = result.Centroid.Y + circle.R; iniP.X = result.Centroid.X - a; @@ -185,21 +154,19 @@ namespace Ink_Canvas break; } - else if (Math.Abs(result.Centroid.X - circle.Centroid.X) / a < 0.2) - { - double sinTheta = Math.Abs(circle.Centroid.Y - result.Centroid.Y) / - circle.R; - double cosTheta = Math.Sqrt(1 - sinTheta * sinTheta); - double newA = circle.R * cosTheta; + else if (Math.Abs(result.Centroid.X - circle.Centroid.X) / a < 0.2) { + var sinTheta = Math.Abs(circle.Centroid.Y - result.Centroid.Y) / + circle.R; + var cosTheta = Math.Sqrt(1 - sinTheta * sinTheta); + var newA = circle.R * cosTheta; if (circle.R * sinTheta / circle.R < 0.9 && a / b > 2 && - Math.Abs(newA - a) / newA < 0.3) - { + Math.Abs(newA - a) / newA < 0.3) { iniP.X = circle.Centroid.X - newA; endP.X = circle.Centroid.X + newA; iniP.Y = result.Centroid.Y - newA / 5; endP.Y = result.Centroid.Y + newA / 5; - double topB = endP.Y - iniP.Y; + var topB = endP.Y - iniP.Y; SetNewBackupOfStroke(); _currentCommitType = CommitReason.ShapeRecognition; @@ -208,14 +175,12 @@ namespace Ink_Canvas var _pointList = GenerateEllipseGeometry(iniP, endP, false, true); var _point = new StylusPointCollection(_pointList); - var _stroke = new Stroke(_point) - { + var _stroke = new Stroke(_point) { DrawingAttributes = inkCanvas.DefaultDrawingAttributes.Clone() }; var _dashedLineStroke = GenerateDashedLineEllipseStrokeCollection(iniP, endP, true, false); - StrokeCollection strokes = new StrokeCollection() - { + var strokes = new StrokeCollection() { _stroke, _dashedLineStroke }; @@ -224,15 +189,13 @@ namespace Ink_Canvas return; } } - else if (Math.Abs(result.Centroid.Y - circle.Centroid.Y) / a < 0.2) - { - double cosTheta = Math.Abs(circle.Centroid.X - result.Centroid.X) / - circle.R; - double sinTheta = Math.Sqrt(1 - cosTheta * cosTheta); - double newA = circle.R * sinTheta; + else if (Math.Abs(result.Centroid.Y - circle.Centroid.Y) / a < 0.2) { + var cosTheta = Math.Abs(circle.Centroid.X - result.Centroid.X) / + circle.R; + var sinTheta = Math.Sqrt(1 - cosTheta * cosTheta); + var newA = circle.R * sinTheta; if (circle.R * sinTheta / circle.R < 0.9 && a / b > 2 && - Math.Abs(newA - a) / newA < 0.3) - { + Math.Abs(newA - a) / newA < 0.3) { iniP.X = result.Centroid.X - newA / 5; endP.X = result.Centroid.X + newA / 5; iniP.Y = circle.Centroid.Y - newA; @@ -240,7 +203,6 @@ namespace Ink_Canvas needRotation = false; } } - } //纠正垂直与水平关系 var newPoints = FixPointsDirection(p[0], p[2]); @@ -252,17 +214,15 @@ namespace Ink_Canvas var pointList = GenerateEllipseGeometry(iniP, endP); var point = new StylusPointCollection(pointList); - var stroke = new Stroke(point) - { + var stroke = new Stroke(point) { DrawingAttributes = inkCanvas.DefaultDrawingAttributes.Clone() }; - if (needRotation) - { - Matrix m = new Matrix(); - FrameworkElement fe = e.Source as FrameworkElement; - double tanTheta = (p[2].Y - p[0].Y) / (p[2].X - p[0].X); - double theta = Math.Atan(tanTheta); + if (needRotation) { + var m = new Matrix(); + var fe = e.Source as FrameworkElement; + var tanTheta = (p[2].Y - p[0].Y) / (p[2].X - p[0].X); + var theta = Math.Atan(tanTheta); m.RotateAt(theta * 180.0 / Math.PI, result.Centroid.X, result.Centroid.Y); stroke.Transform(m, false); } @@ -277,16 +237,14 @@ namespace Ink_Canvas } } else if (result.InkDrawingNode.GetShapeName().Contains("Triangle") && - Settings.InkToShape.IsInkToShapeTriangle == true) - { + Settings.InkToShape.IsInkToShapeTriangle == true) { var shape = result.InkDrawingNode.GetShape(); var p = result.InkDrawingNode.HotPoints; if ((Math.Max(Math.Max(p[0].X, p[1].X), p[2].X) - Math.Min(Math.Min(p[0].X, p[1].X), p[2].X) >= 100 || Math.Max(Math.Max(p[0].Y, p[1].Y), p[2].Y) - Math.Min(Math.Min(p[0].Y, p[1].Y), p[2].Y) >= 100) && - result.InkDrawingNode.HotPoints.Count == 3) - { + result.InkDrawingNode.HotPoints.Count == 3) { //纠正垂直与水平关系 var newPoints = FixPointsDirection(p[0], p[1]); p[0] = newPoints[0]; @@ -301,8 +259,7 @@ namespace Ink_Canvas var pointList = p.ToList(); //pointList.Add(p[0]); var point = new StylusPointCollection(pointList); - var stroke = new Stroke(GenerateFakePressureTriangle(point)) - { + var stroke = new Stroke(GenerateFakePressureTriangle(point)) { DrawingAttributes = inkCanvas.DefaultDrawingAttributes.Clone() }; SetNewBackupOfStroke(); @@ -319,16 +276,14 @@ namespace Ink_Canvas result.InkDrawingNode.GetShapeName().Contains("Parallelogram") || result.InkDrawingNode.GetShapeName().Contains("Square") || result.InkDrawingNode.GetShapeName().Contains("Trapezoid")) && - Settings.InkToShape.IsInkToShapeRectangle == true) - { + Settings.InkToShape.IsInkToShapeRectangle == true) { var shape = result.InkDrawingNode.GetShape(); var p = result.InkDrawingNode.HotPoints; if ((Math.Max(Math.Max(Math.Max(p[0].X, p[1].X), p[2].X), p[3].X) - Math.Min(Math.Min(Math.Min(p[0].X, p[1].X), p[2].X), p[3].X) >= 100 || Math.Max(Math.Max(Math.Max(p[0].Y, p[1].Y), p[2].Y), p[3].Y) - Math.Min(Math.Min(Math.Min(p[0].Y, p[1].Y), p[2].Y), p[3].Y) >= 100) && - result.InkDrawingNode.HotPoints.Count == 4) - { + result.InkDrawingNode.HotPoints.Count == 4) { //纠正垂直与水平关系 var newPoints = FixPointsDirection(p[0], p[1]); p[0] = newPoints[0]; @@ -346,8 +301,7 @@ namespace Ink_Canvas var pointList = p.ToList(); pointList.Add(p[0]); var point = new StylusPointCollection(pointList); - var stroke = new Stroke(GenerateFakePressureRectangle(point)) - { + var stroke = new Stroke(GenerateFakePressureRectangle(point)) { DrawingAttributes = inkCanvas.DefaultDrawingAttributes.Clone() }; SetNewBackupOfStroke(); @@ -360,32 +314,24 @@ namespace Ink_Canvas } } } - catch - { - } + catch { } } InkToShapeProcess(); } - foreach (StylusPoint stylusPoint in e.Stroke.StylusPoints) - { + foreach (var stylusPoint in e.Stroke.StylusPoints) //LogHelper.WriteLogToFile(stylusPoint.PressureFactor.ToString(), LogHelper.LogType.Info); // 检查是否是压感笔书写 //if (stylusPoint.PressureFactor != 0.5 && stylusPoint.PressureFactor != 0) if ((stylusPoint.PressureFactor > 0.501 || stylusPoint.PressureFactor < 0.5) && stylusPoint.PressureFactor != 0) - { return; - } - } - try - { - if (e.Stroke.StylusPoints.Count > 3) - { - Random random = new Random(); - double _speed = GetPointSpeed( + try { + if (e.Stroke.StylusPoints.Count > 3) { + var random = new Random(); + var _speed = GetPointSpeed( e.Stroke.StylusPoints[random.Next(0, e.Stroke.StylusPoints.Count - 1)].ToPoint(), e.Stroke.StylusPoints[random.Next(0, e.Stroke.StylusPoints.Count - 1)].ToPoint(), e.Stroke.StylusPoints[random.Next(0, e.Stroke.StylusPoints.Count - 1)].ToPoint()); @@ -393,40 +339,28 @@ namespace Ink_Canvas RandWindow.randSeed = (int)(_speed * 100000 * 1000); } } - catch - { - } + catch { } - switch (Settings.Canvas.InkStyle) - { + switch (Settings.Canvas.InkStyle) { case 1: if (penType == 0) - { - try - { - StylusPointCollection stylusPoints = new StylusPointCollection(); - int n = e.Stroke.StylusPoints.Count - 1; - string s = ""; + try { + var stylusPoints = new StylusPointCollection(); + var n = e.Stroke.StylusPoints.Count - 1; + var s = ""; - for (int i = 0; i <= n; i++) - { - double speed = GetPointSpeed(e.Stroke.StylusPoints[Math.Max(i - 1, 0)].ToPoint(), + for (var i = 0; i <= n; i++) { + var 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(); + var 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; @@ -435,27 +369,20 @@ namespace Ink_Canvas e.Stroke.StylusPoints = stylusPoints; } - catch - { - } - } + catch { } break; case 0: if (penType == 0) - { - try - { - StylusPointCollection stylusPoints = new StylusPointCollection(); - int n = e.Stroke.StylusPoints.Count - 1; - double pressure = 0.1; - int x = 10; + try { + var stylusPoints = new StylusPointCollection(); + var n = e.Stroke.StylusPoints.Count - 1; + var pressure = 0.1; + var x = 10; if (n == 1) return; - if (n >= x) - { - for (int i = 0; i < n - x; i++) - { - StylusPoint point = new StylusPoint(); + if (n >= x) { + for (var i = 0; i < n - x; i++) { + var point = new StylusPoint(); point.PressureFactor = (float)0.5; point.X = e.Stroke.StylusPoints[i].X; @@ -463,9 +390,8 @@ namespace Ink_Canvas stylusPoints.Add(point); } - for (int i = n - x; i <= n; i++) - { - StylusPoint point = new StylusPoint(); + for (var i = n - x; i <= n; i++) { + var point = new StylusPoint(); point.PressureFactor = (float)((0.5 - pressure) * (n - i) / x + pressure); point.X = e.Stroke.StylusPoints[i].X; @@ -473,11 +399,9 @@ namespace Ink_Canvas stylusPoints.Add(point); } } - else - { - for (int i = 0; i <= n; i++) - { - StylusPoint point = new StylusPoint(); + else { + for (var i = 0; i <= n; i++) { + var point = new StylusPoint(); point.PressureFactor = (float)(0.4 * (n - i) / n + pressure); point.X = e.Stroke.StylusPoints[i].X; @@ -488,44 +412,30 @@ namespace Ink_Canvas e.Stroke.StylusPoints = stylusPoints; } - catch - { - } - } + catch { } break; } } - catch - { - } + catch { } - if (Settings.Canvas.FitToCurve == true) - { - drawingAttributes.FitToCurve = true; - } + if (Settings.Canvas.FitToCurve == true) drawingAttributes.FitToCurve = true; } - private void SetNewBackupOfStroke() - { + private void SetNewBackupOfStroke() { lastTouchDownStrokeCollection = inkCanvas.Strokes.Clone(); - int whiteboardIndex = CurrentWhiteboardIndex; - if (currentMode == 0) - { - whiteboardIndex = 0; - } + var whiteboardIndex = CurrentWhiteboardIndex; + if (currentMode == 0) whiteboardIndex = 0; strokeCollections[whiteboardIndex] = lastTouchDownStrokeCollection; } - public double GetDistance(Point point1, Point point2) - { + public double GetDistance(Point point1, Point point2) { return Math.Sqrt((point1.X - point2.X) * (point1.X - point2.X) + (point1.Y - point2.Y) * (point1.Y - point2.Y)); } - public double GetPointSpeed(Point point1, Point point2, Point point3) - { + public double GetPointSpeed(Point point1, Point point2, Point point3) { return (Math.Sqrt((point1.X - point2.X) * (point1.X - point2.X) + (point1.Y - point2.Y) * (point1.Y - point2.Y)) + Math.Sqrt((point3.X - point2.X) * (point3.X - point2.X) + @@ -533,34 +443,27 @@ namespace Ink_Canvas / 20; } - public Point[] FixPointsDirection(Point p1, Point p2) - { - if (Math.Abs(p1.X - p2.X) / Math.Abs(p1.Y - p2.Y) > 8) - { + public Point[] FixPointsDirection(Point p1, Point p2) { + if (Math.Abs(p1.X - p2.X) / Math.Abs(p1.Y - p2.Y) > 8) { //水平 - double x = Math.Abs(p1.Y - p2.Y) / 2; - if (p1.Y > p2.Y) - { + var x = Math.Abs(p1.Y - p2.Y) / 2; + if (p1.Y > p2.Y) { p1.Y -= x; p2.Y += x; } - else - { + else { p1.Y += x; p2.Y -= x; } } - else if (Math.Abs(p1.Y - p2.Y) / Math.Abs(p1.X - p2.X) > 8) - { + else if (Math.Abs(p1.Y - p2.Y) / Math.Abs(p1.X - p2.X) > 8) { //垂直 - double x = Math.Abs(p1.X - p2.X) / 2; - if (p1.X > p2.X) - { + var x = Math.Abs(p1.X - p2.X) / 2; + if (p1.X > p2.X) { p1.X -= x; p2.X += x; } - else - { + else { p1.X += x; p2.X -= x; } @@ -569,10 +472,8 @@ namespace Ink_Canvas return new Point[2] { p1, p2 }; } - public StylusPointCollection GenerateFakePressureTriangle(StylusPointCollection points) - { - if (Settings.InkToShape.IsInkToShapeNoFakePressureTriangle == true || penType == 1) - { + public StylusPointCollection GenerateFakePressureTriangle(StylusPointCollection points) { + if (Settings.InkToShape.IsInkToShapeNoFakePressureTriangle == true || penType == 1) { var newPoint = new StylusPointCollection(); newPoint.Add(new StylusPoint(points[0].X, points[0].Y)); var cPoint = GetCenterPoint(points[0], points[1]); @@ -588,8 +489,7 @@ namespace Ink_Canvas newPoint.Add(new StylusPoint(points[0].X, points[0].Y)); return newPoint; } - else - { + else { var newPoint = new StylusPointCollection(); newPoint.Add(new StylusPoint(points[0].X, points[0].Y, (float)0.4)); var cPoint = GetCenterPoint(points[0], points[1]); @@ -607,14 +507,11 @@ namespace Ink_Canvas } } - public StylusPointCollection GenerateFakePressureRectangle(StylusPointCollection points) - { - if (Settings.InkToShape.IsInkToShapeNoFakePressureRectangle == true || penType == 1) - { + public StylusPointCollection GenerateFakePressureRectangle(StylusPointCollection points) { + if (Settings.InkToShape.IsInkToShapeNoFakePressureRectangle == true || penType == 1) { return points; } - else - { + else { var newPoint = new StylusPointCollection(); newPoint.Add(new StylusPoint(points[0].X, points[0].Y, (float)0.4)); var cPoint = GetCenterPoint(points[0], points[1]); @@ -636,13 +533,11 @@ namespace Ink_Canvas } } - public Point GetCenterPoint(Point point1, Point point2) - { + public Point GetCenterPoint(Point point1, Point point2) { return new Point((point1.X + point2.X) / 2, (point1.Y + point2.Y) / 2); } - public StylusPoint GetCenterPoint(StylusPoint point1, StylusPoint point2) - { + public StylusPoint GetCenterPoint(StylusPoint point1, StylusPoint point2) { return new StylusPoint((point1.X + point2.X) / 2, (point1.Y + point2.Y) / 2); } } diff --git a/Ink Canvas/MainWindow_cs/MW_TimeMachine.cs b/Ink Canvas/MainWindow_cs/MW_TimeMachine.cs index 246cb37..64a1c27 100644 --- a/Ink Canvas/MainWindow_cs/MW_TimeMachine.cs +++ b/Ink Canvas/MainWindow_cs/MW_TimeMachine.cs @@ -25,74 +25,62 @@ namespace Ink_Canvas { _currentCommitType = CommitReason.CodeInput; if (item.CommitType == TimeMachineHistoryType.UserInput) { if (!item.StrokeHasBeenCleared) { - foreach (var strokes in item.CurrentStroke) { + foreach (var strokes in item.CurrentStroke) if (!inkCanvas.Strokes.Contains(strokes)) inkCanvas.Strokes.Add(strokes); - } } else { - foreach (var strokes in item.CurrentStroke) { + foreach (var strokes in item.CurrentStroke) if (inkCanvas.Strokes.Contains(strokes)) inkCanvas.Strokes.Remove(strokes); - } } } else if (item.CommitType == TimeMachineHistoryType.ShapeRecognition) { if (item.StrokeHasBeenCleared) { - foreach (var strokes in item.CurrentStroke) { + foreach (var strokes in item.CurrentStroke) if (inkCanvas.Strokes.Contains(strokes)) inkCanvas.Strokes.Remove(strokes); - } - foreach (var strokes in item.ReplacedStroke) { + foreach (var strokes in item.ReplacedStroke) if (!inkCanvas.Strokes.Contains(strokes)) inkCanvas.Strokes.Add(strokes); - } } else { - foreach (var strokes in item.CurrentStroke) { + foreach (var strokes in item.CurrentStroke) if (!inkCanvas.Strokes.Contains(strokes)) inkCanvas.Strokes.Add(strokes); - } - foreach (var strokes in item.ReplacedStroke) { + foreach (var strokes in item.ReplacedStroke) if (inkCanvas.Strokes.Contains(strokes)) inkCanvas.Strokes.Remove(strokes); - } } } else if (item.CommitType == TimeMachineHistoryType.Manipulation) { item.ManipulationHistory.Invert(); - foreach (var strokes in item.CurrentStroke) { - strokes.Transform(item.ManipulationHistory, false); - } + foreach (var strokes in item.CurrentStroke) strokes.Transform(item.ManipulationHistory, false); } else if (item.CommitType == TimeMachineHistoryType.Clear) { if (!item.StrokeHasBeenCleared) { - if (item.CurrentStroke != null) { - foreach (var currentStroke in item.CurrentStroke) { - if (!inkCanvas.Strokes.Contains(currentStroke)) inkCanvas.Strokes.Add(currentStroke); - } - } + if (item.CurrentStroke != null) + foreach (var currentStroke in item.CurrentStroke) + if (!inkCanvas.Strokes.Contains(currentStroke)) + inkCanvas.Strokes.Add(currentStroke); - if (item.ReplacedStroke != null) { - foreach (var replacedStroke in item.ReplacedStroke) { - if (inkCanvas.Strokes.Contains(replacedStroke)) inkCanvas.Strokes.Remove(replacedStroke); - } - } + if (item.ReplacedStroke != null) + foreach (var replacedStroke in item.ReplacedStroke) + if (inkCanvas.Strokes.Contains(replacedStroke)) + inkCanvas.Strokes.Remove(replacedStroke); } else { - if (item.ReplacedStroke != null) { - foreach (var replacedStroke in item.ReplacedStroke) { - if (!inkCanvas.Strokes.Contains(replacedStroke)) inkCanvas.Strokes.Add(replacedStroke); - } - } + if (item.ReplacedStroke != null) + foreach (var replacedStroke in item.ReplacedStroke) + if (!inkCanvas.Strokes.Contains(replacedStroke)) + inkCanvas.Strokes.Add(replacedStroke); - if (item.CurrentStroke != null) { - foreach (var currentStroke in item.CurrentStroke) { - if (inkCanvas.Strokes.Contains(currentStroke)) inkCanvas.Strokes.Remove(currentStroke); - } - } + if (item.CurrentStroke != null) + foreach (var currentStroke in item.CurrentStroke) + if (inkCanvas.Strokes.Contains(currentStroke)) + inkCanvas.Strokes.Remove(currentStroke); } } @@ -118,7 +106,7 @@ namespace Ink_Canvas { } if (_currentCommitType == CommitReason.CodeInput || _currentCommitType == CommitReason.ShapeDrawing) return; - + if ((e.Added.Count != 0 || e.Removed.Count != 0) && IsEraseByPoint) { if (AddedStroke == null) AddedStroke = new StrokeCollection(); if (ReplacedStroke == null) ReplacedStroke = new StrokeCollection(); diff --git a/Ink Canvas/MainWindow_cs/MW_Timer.cs b/Ink Canvas/MainWindow_cs/MW_Timer.cs index f59e165..531879b 100644 --- a/Ink Canvas/MainWindow_cs/MW_Timer.cs +++ b/Ink Canvas/MainWindow_cs/MW_Timer.cs @@ -7,34 +7,25 @@ using System.Timers; using System.Windows; using MessageBox = System.Windows.MessageBox; -namespace Ink_Canvas -{ - - public class TimeViewModel : INotifyPropertyChanged - { +namespace Ink_Canvas { + public class TimeViewModel : INotifyPropertyChanged { private string _nowTime; private string _nowDate; - public string nowTime - { - get { return _nowTime; } - set - { - if (_nowTime != value) - { + public string nowTime { + get => _nowTime; + set { + if (_nowTime != value) { _nowTime = value; OnPropertyChanged(); } } } - public string nowDate - { - get { return _nowDate; } - set - { - if (_nowDate != value) - { + public string nowDate { + get => _nowDate; + set { + if (_nowDate != value) { _nowDate = value; OnPropertyChanged(); } @@ -43,28 +34,25 @@ namespace Ink_Canvas public event PropertyChangedEventHandler PropertyChanged; - protected virtual void OnPropertyChanged([CallerMemberName] string propertyName = null) - { + protected virtual void OnPropertyChanged([CallerMemberName] string propertyName = null) { PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName)); } } - public partial class MainWindow : Window - { - Timer timerCheckPPT = new Timer(); - Timer timerKillProcess = new Timer(); - Timer timerCheckAutoFold = new Timer(); - string AvailableLatestVersion = null; - Timer timerCheckAutoUpdateWithSilence = new Timer(); - bool isHidingSubPanelsWhenInking = false; // 避免书写时触发二次关闭二级菜单导致动画不连续 + public partial class MainWindow : Window { + private Timer timerCheckPPT = new Timer(); + private Timer timerKillProcess = new Timer(); + private Timer timerCheckAutoFold = new Timer(); + private string AvailableLatestVersion = null; + private Timer timerCheckAutoUpdateWithSilence = new Timer(); + private bool isHidingSubPanelsWhenInking = false; // 避免书写时触发二次关闭二级菜单导致动画不连续 - Timer timerDisplayTime = new Timer(); - Timer timerDisplayDate = new Timer(); + private Timer timerDisplayTime = new Timer(); + private Timer timerDisplayDate = new Timer(); private TimeViewModel nowTimeVM = new TimeViewModel(); - private void InitTimers() - { + private void InitTimers() { timerCheckPPT.Elapsed += TimerCheckPPT_Elapsed; timerCheckPPT.Interval = 500; timerKillProcess.Elapsed += TimerKillProcess_Elapsed; @@ -85,65 +73,47 @@ namespace Ink_Canvas nowTimeVM.nowTime = DateTime.Now.ToShortTimeString().ToString(); } - private void TimerDisplayTime_Elapsed(object sender, System.Timers.ElapsedEventArgs e) - { + private void TimerDisplayTime_Elapsed(object sender, ElapsedEventArgs e) { nowTimeVM.nowTime = DateTime.Now.ToShortTimeString().ToString(); } - private void TimerDisplayDate_Elapsed(object sender, System.Timers.ElapsedEventArgs e) - { + private void TimerDisplayDate_Elapsed(object sender, ElapsedEventArgs e) { nowTimeVM.nowDate = DateTime.Now.ToShortDateString().ToString(); } - private void TimerKillProcess_Elapsed(object sender, ElapsedEventArgs e) - { - try - { + private void TimerKillProcess_Elapsed(object sender, ElapsedEventArgs e) { + try { // 希沃相关: easinote swenserver RemoteProcess EasiNote.MediaHttpService smartnote.cloud EasiUpdate smartnote EasiUpdate3 EasiUpdate3Protect SeewoP2P CefSharp.BrowserSubprocess SeewoUploadService - string arg = "/F"; - if (Settings.Automation.IsAutoKillPptService) - { - Process[] processes = Process.GetProcessesByName("PPTService"); - if (processes.Length > 0) - { - arg += " /IM PPTService.exe"; - } + var arg = "/F"; + if (Settings.Automation.IsAutoKillPptService) { + var processes = Process.GetProcessesByName("PPTService"); + if (processes.Length > 0) arg += " /IM PPTService.exe"; processes = Process.GetProcessesByName("SeewoIwbAssistant"); - if (processes.Length > 0) - { - arg += " /IM SeewoIwbAssistant.exe" + " /IM Sia.Guard.exe"; - } + if (processes.Length > 0) arg += " /IM SeewoIwbAssistant.exe" + " /IM Sia.Guard.exe"; } - if (Settings.Automation.IsAutoKillEasiNote) - { - Process[] processes = Process.GetProcessesByName("EasiNote"); - if (processes.Length > 0) - { - arg += " /IM EasiNote.exe"; - } + + if (Settings.Automation.IsAutoKillEasiNote) { + var processes = Process.GetProcessesByName("EasiNote"); + if (processes.Length > 0) arg += " /IM EasiNote.exe"; } - if (Settings.Automation.IsAutoKillHiteAnnotation) - { - Process[] processes = Process.GetProcessesByName("HiteAnnotation"); - if (processes.Length > 0) - { - arg += " /IM HiteAnnotation.exe"; - } + + if (Settings.Automation.IsAutoKillHiteAnnotation) { + var processes = Process.GetProcessesByName("HiteAnnotation"); + if (processes.Length > 0) arg += " /IM HiteAnnotation.exe"; } - if (arg != "/F") - { - Process p = new Process(); + + if (arg != "/F") { + var p = new Process(); p.StartInfo = new ProcessStartInfo("taskkill", arg); p.StartInfo.WindowStyle = ProcessWindowStyle.Hidden; p.Start(); - if (arg.Contains("EasiNote")) - { + if (arg.Contains("EasiNote")) { BtnSwitch_Click(BtnSwitch, null); MessageBox.Show("“希沃白板 5”已自动关闭"); } - if (arg.Contains("HiteAnnotation")) - { + + if (arg.Contains("HiteAnnotation")) { BtnSwitch_Click(BtnSwitch, null); MessageBox.Show("“鸿合屏幕书写”已自动关闭"); } @@ -153,80 +123,70 @@ namespace Ink_Canvas } - bool foldFloatingBarByUser = false, // 保持收纳操作不受自动收纳的控制 + private bool foldFloatingBarByUser = false, // 保持收纳操作不受自动收纳的控制 unfoldFloatingBarByUser = false; // 允许用户在希沃软件内进行展开操作 - private void timerCheckAutoFold_Elapsed(object sender, ElapsedEventArgs e) - { + private void timerCheckAutoFold_Elapsed(object sender, ElapsedEventArgs e) { if (isFloatingBarChangingHideMode) return; - try - { - string windowProcessName = ForegroundWindowInfo.ProcessName(); - string windowTitle = ForegroundWindowInfo.WindowTitle(); + try { + var windowProcessName = ForegroundWindowInfo.ProcessName(); + var windowTitle = ForegroundWindowInfo.WindowTitle(); //LogHelper.WriteLogToFile("windowTitle | " + windowTitle + " | windowProcessName | " + windowProcessName); - if (Settings.Automation.IsAutoFoldInEasiNote && windowProcessName == "EasiNote" // 希沃白板 - && (!(windowTitle.Length == 0 && ForegroundWindowInfo.WindowRect().Height < 500) || !Settings.Automation.IsAutoFoldInEasiNoteIgnoreDesktopAnno) - || Settings.Automation.IsAutoFoldInEasiCamera && windowProcessName == "EasiCamera" // 希沃视频展台 - || Settings.Automation.IsAutoFoldInEasiNote3C && windowProcessName == "EasiNote" // 希沃轻白板3C - || Settings.Automation.IsAutoFoldInEasiNote5C && windowProcessName == "EasiNote5C" // 希沃轻白板5C - || Settings.Automation.IsAutoFoldInSeewoPincoTeacher && (windowProcessName == "BoardService" || windowProcessName == "seewoPincoTeacher") // 希沃品课 - || Settings.Automation.IsAutoFoldInHiteCamera && windowProcessName == "HiteCamera" // 鸿合视频展台 - || Settings.Automation.IsAutoFoldInHiteTouchPro && windowProcessName == "HiteTouchPro" // 鸿合白板 - || Settings.Automation.IsAutoFoldInWxBoardMain && windowProcessName == "WxBoardMain" // 文香白板 - || Settings.Automation.IsAutoFoldInMSWhiteboard && (windowProcessName == "MicrosoftWhiteboard" || windowProcessName == "msedgewebview2") // 微软白板 - || Settings.Automation.IsAutoFoldInOldZyBoard && // 中原旧白板 - (WinTabWindowsChecker.IsWindowExisted("WhiteBoard - DrawingWindow") - || WinTabWindowsChecker.IsWindowExisted("InstantAnnotationWindow"))) - { - if (!unfoldFloatingBarByUser && !isFloatingBarFolded) - { - FoldFloatingBar_MouseUp(null, null); - } + if ((Settings.Automation.IsAutoFoldInEasiNote && windowProcessName == "EasiNote" // 希沃白板 + && (!(windowTitle.Length == 0 && + ForegroundWindowInfo.WindowRect().Height < 500) || + !Settings.Automation + .IsAutoFoldInEasiNoteIgnoreDesktopAnno)) + || (Settings.Automation.IsAutoFoldInEasiCamera && windowProcessName == "EasiCamera") // 希沃视频展台 + || (Settings.Automation.IsAutoFoldInEasiNote3C && windowProcessName == "EasiNote") // 希沃轻白板3C + || (Settings.Automation.IsAutoFoldInEasiNote5C && windowProcessName == "EasiNote5C") // 希沃轻白板5C + || (Settings.Automation.IsAutoFoldInSeewoPincoTeacher && (windowProcessName == "BoardService" || + windowProcessName == + "seewoPincoTeacher")) // 希沃品课 + || (Settings.Automation.IsAutoFoldInHiteCamera && windowProcessName == "HiteCamera") // 鸿合视频展台 + || (Settings.Automation.IsAutoFoldInHiteTouchPro && windowProcessName == "HiteTouchPro") // 鸿合白板 + || (Settings.Automation.IsAutoFoldInWxBoardMain && windowProcessName == "WxBoardMain") // 文香白板 + || (Settings.Automation.IsAutoFoldInMSWhiteboard && (windowProcessName == "MicrosoftWhiteboard" || + windowProcessName == "msedgewebview2")) // 微软白板 + || (Settings.Automation.IsAutoFoldInOldZyBoard && // 中原旧白板 + (WinTabWindowsChecker.IsWindowExisted("WhiteBoard - DrawingWindow") + || WinTabWindowsChecker.IsWindowExisted("InstantAnnotationWindow")))) { + if (!unfoldFloatingBarByUser && !isFloatingBarFolded) FoldFloatingBar_MouseUp(null, null); } - else if (WinTabWindowsChecker.IsWindowExisted("幻灯片放映", false)) - { // 处于幻灯片放映状态 + else if (WinTabWindowsChecker.IsWindowExisted("幻灯片放映", false)) { + // 处于幻灯片放映状态 if (!Settings.Automation.IsAutoFoldInPPTSlideShow && isFloatingBarFolded && !foldFloatingBarByUser) - { - UnFoldFloatingBar_MouseUp(new Object(), null); - } + UnFoldFloatingBar_MouseUp(new object(), null); } - else - { - if (isFloatingBarFolded && !foldFloatingBarByUser) - { - UnFoldFloatingBar_MouseUp(new Object(), null); - } + else { + if (isFloatingBarFolded && !foldFloatingBarByUser) UnFoldFloatingBar_MouseUp(new object(), null); unfoldFloatingBarByUser = false; } } catch { } } - private void timerCheckAutoUpdateWithSilence_Elapsed(object sender, ElapsedEventArgs e) - { + private void timerCheckAutoUpdateWithSilence_Elapsed(object sender, ElapsedEventArgs e) { Dispatcher.Invoke(() => { - try - { - if ((!Topmost) || (inkCanvas.Strokes.Count > 0)) return; + try { + if (!Topmost || inkCanvas.Strokes.Count > 0) return; } - catch (Exception ex) - { + catch (Exception ex) { LogHelper.WriteLogToFile(ex.ToString(), LogHelper.LogType.Error); } }); - try - { - if (AutoUpdateWithSilenceTimeComboBox.CheckIsInSilencePeriod(Settings.Startup.AutoUpdateWithSilenceStartTime, Settings.Startup.AutoUpdateWithSilenceEndTime)) - { + try { + if (AutoUpdateWithSilenceTimeComboBox.CheckIsInSilencePeriod( + Settings.Startup.AutoUpdateWithSilenceStartTime, + Settings.Startup.AutoUpdateWithSilenceEndTime)) { AutoUpdateHelper.InstallNewVersionApp(AvailableLatestVersion, true); timerCheckAutoUpdateWithSilence.Stop(); } } - catch (Exception ex) - { + catch (Exception ex) { LogHelper.WriteLogToFile(ex.ToString(), LogHelper.LogType.Error); } } } -} +} \ No newline at end of file diff --git a/Ink Canvas/MainWindow_cs/MW_TouchEvents.cs b/Ink Canvas/MainWindow_cs/MW_TouchEvents.cs index 3b6be6a..8b898ba 100644 --- a/Ink Canvas/MainWindow_cs/MW_TouchEvents.cs +++ b/Ink Canvas/MainWindow_cs/MW_TouchEvents.cs @@ -10,17 +10,14 @@ using System.Windows.Input; using System.Windows.Media; using Point = System.Windows.Point; -namespace Ink_Canvas -{ - public partial class MainWindow : Window - { +namespace Ink_Canvas { + public partial class MainWindow : Window { #region Multi-Touch - bool isInMultiTouchMode = false; - private void BorderMultiTouchMode_MouseUp(object sender, MouseButtonEventArgs e) - { - if (isInMultiTouchMode) - { + private bool isInMultiTouchMode = false; + + private void BorderMultiTouchMode_MouseUp(object sender, MouseButtonEventArgs e) { + if (isInMultiTouchMode) { inkCanvas.StylusDown -= MainWindow_StylusDown; inkCanvas.StylusMove -= MainWindow_StylusMove; inkCanvas.StylusUp -= MainWindow_StylusUp; @@ -30,8 +27,7 @@ namespace Ink_Canvas inkCanvas.Children.Clear(); isInMultiTouchMode = false; } - else - { + else { inkCanvas.StylusDown += MainWindow_StylusDown; inkCanvas.StylusMove += MainWindow_StylusMove; inkCanvas.StylusUp += MainWindow_StylusUp; @@ -43,31 +39,25 @@ namespace Ink_Canvas } } - private void MainWindow_TouchDown(object sender, TouchEventArgs e) - { + private void MainWindow_TouchDown(object sender, TouchEventArgs e) { if (inkCanvas.EditingMode == InkCanvasEditingMode.EraseByPoint || inkCanvas.EditingMode == InkCanvasEditingMode.EraseByStroke || inkCanvas.EditingMode == InkCanvasEditingMode.Select) return; - if (!isHidingSubPanelsWhenInking) - { + if (!isHidingSubPanelsWhenInking) { isHidingSubPanelsWhenInking = true; HideSubPanels(); // 书写时自动隐藏二级菜单 } double boundWidth = e.GetTouchPoint(null).Bounds.Width, eraserMultiplier = 1.0; if (!Settings.Advanced.EraserBindTouchMultiplier && Settings.Advanced.IsSpecialScreen) - { eraserMultiplier = 1 / Settings.Advanced.TouchMultiplier; - } if ((Settings.Advanced.TouchMultiplier != 0 || !Settings.Advanced.IsSpecialScreen) //启用特殊屏幕且触摸倍数为 0 时禁用橡皮 - && (boundWidth > BoundsWidth * 2.5)) - { + && boundWidth > BoundsWidth * 2.5) { if (drawingShapeMode == 0 && forceEraser) return; double k = 1; - switch (Settings.Canvas.EraserSize) - { + switch (Settings.Canvas.EraserSize) { case 0: k = 0.5; break; @@ -81,19 +71,19 @@ namespace Ink_Canvas k = 1.8; break; } - inkCanvas.EraserShape = new EllipseStylusShape(boundWidth * k * eraserMultiplier * 0.25, boundWidth * k * eraserMultiplier * 0.25); + + inkCanvas.EraserShape = new EllipseStylusShape(boundWidth * k * eraserMultiplier * 0.25, + boundWidth * k * eraserMultiplier * 0.25); TouchDownPointsList[e.TouchDevice.Id] = InkCanvasEditingMode.EraseByPoint; inkCanvas.EditingMode = InkCanvasEditingMode.EraseByPoint; } - else - { + else { TouchDownPointsList[e.TouchDevice.Id] = InkCanvasEditingMode.None; inkCanvas.EditingMode = InkCanvasEditingMode.None; } } - private void MainWindow_StylusDown(object sender, StylusDownEventArgs e) - { + private void MainWindow_StylusDown(object sender, StylusDownEventArgs e) { if (inkCanvas.EditingMode == InkCanvasEditingMode.EraseByPoint || inkCanvas.EditingMode == InkCanvasEditingMode.EraseByStroke || inkCanvas.EditingMode == InkCanvasEditingMode.Select) return; @@ -101,27 +91,24 @@ namespace Ink_Canvas TouchDownPointsList[e.StylusDevice.Id] = InkCanvasEditingMode.None; } - private async void MainWindow_StylusUp(object sender, StylusEventArgs e) - { - try - { + private async void MainWindow_StylusUp(object sender, StylusEventArgs e) { + try { inkCanvas.Strokes.Add(GetStrokeVisual(e.StylusDevice.Id).Stroke); await Task.Delay(5); // 避免渲染墨迹完成前预览墨迹被删除导致墨迹闪烁 inkCanvas.Children.Remove(GetVisualCanvas(e.StylusDevice.Id)); - inkCanvas_StrokeCollected(inkCanvas, new InkCanvasStrokeCollectedEventArgs(GetStrokeVisual(e.StylusDevice.Id).Stroke)); + inkCanvas_StrokeCollected(inkCanvas, + new InkCanvasStrokeCollectedEventArgs(GetStrokeVisual(e.StylusDevice.Id).Stroke)); } - catch (Exception ex) - { + catch (Exception ex) { Label.Content = ex.ToString(); } - try - { + + try { StrokeVisualList.Remove(e.StylusDevice.Id); VisualCanvasList.Remove(e.StylusDevice.Id); TouchDownPointsList.Remove(e.StylusDevice.Id); - if (StrokeVisualList.Count == 0 || VisualCanvasList.Count == 0 || TouchDownPointsList.Count == 0) - { + if (StrokeVisualList.Count == 0 || VisualCanvasList.Count == 0 || TouchDownPointsList.Count == 0) { inkCanvas.Children.Clear(); StrokeVisualList.Clear(); VisualCanvasList.Clear(); @@ -131,33 +118,25 @@ namespace Ink_Canvas catch { } } - private void MainWindow_StylusMove(object sender, StylusEventArgs e) - { - try - { + private void MainWindow_StylusMove(object sender, StylusEventArgs e) { + try { if (GetTouchDownPointsList(e.StylusDevice.Id) != InkCanvasEditingMode.None) return; - try - { + try { if (e.StylusDevice.StylusButtons[1].StylusButtonState == StylusButtonState.Down) return; } catch { } + var strokeVisual = GetStrokeVisual(e.StylusDevice.Id); var stylusPointCollection = e.GetStylusPoints(this); foreach (var stylusPoint in stylusPointCollection) - { strokeVisual.Add(new StylusPoint(stylusPoint.X, stylusPoint.Y, stylusPoint.PressureFactor)); - } strokeVisual.Redraw(); } catch { } } - private StrokeVisual GetStrokeVisual(int id) - { - if (StrokeVisualList.TryGetValue(id, out var visual)) - { - return visual; - } + private StrokeVisual GetStrokeVisual(int id) { + if (StrokeVisualList.TryGetValue(id, out var visual)) return visual; var strokeVisual = new StrokeVisual(inkCanvas.DefaultDrawingAttributes.Clone()); StrokeVisualList[id] = strokeVisual; @@ -169,69 +148,47 @@ namespace Ink_Canvas return strokeVisual; } - private VisualCanvas GetVisualCanvas(int id) - { - if (VisualCanvasList.TryGetValue(id, out var visualCanvas)) - { - return visualCanvas; - } - return null; + private VisualCanvas GetVisualCanvas(int id) { + return VisualCanvasList.TryGetValue(id, out var visualCanvas) ? visualCanvas : null; } - private InkCanvasEditingMode GetTouchDownPointsList(int id) - { - if (TouchDownPointsList.TryGetValue(id, out var inkCanvasEditingMode)) - { - return inkCanvasEditingMode; - } - return inkCanvas.EditingMode; + private InkCanvasEditingMode GetTouchDownPointsList(int id) { + return TouchDownPointsList.TryGetValue(id, out var inkCanvasEditingMode) ? inkCanvasEditingMode : inkCanvas.EditingMode; } - private Dictionary TouchDownPointsList { get; } = new Dictionary(); + private Dictionary TouchDownPointsList { get; } = + new Dictionary(); + private Dictionary StrokeVisualList { get; } = new Dictionary(); private Dictionary VisualCanvasList { get; } = new Dictionary(); #endregion + private int lastTouchDownTime = 0, lastTouchUpTime = 0; - int lastTouchDownTime = 0, lastTouchUpTime = 0; - - Point iniP = new Point(0, 0); - bool isLastTouchEraser = false; + private Point iniP = new Point(0, 0); + private bool isLastTouchEraser = false; private bool forcePointEraser = true; - private void Main_Grid_TouchDown(object sender, TouchEventArgs e) - { - if (!isHidingSubPanelsWhenInking) - { + private void Main_Grid_TouchDown(object sender, TouchEventArgs e) { + if (!isHidingSubPanelsWhenInking) { isHidingSubPanelsWhenInking = true; HideSubPanels(); // 书写时自动隐藏二级菜单 } - if (NeedUpdateIniP()) - { - iniP = e.GetTouchPoint(inkCanvas).Position; - } - if (drawingShapeMode == 9 && isFirstTouchCuboid == false) - { - MouseTouchMove(iniP); - } + if (NeedUpdateIniP()) iniP = e.GetTouchPoint(inkCanvas).Position; + if (drawingShapeMode == 9 && isFirstTouchCuboid == false) MouseTouchMove(iniP); inkCanvas.Opacity = 1; double boundsWidth = GetTouchBoundWidth(e), eraserMultiplier = 1.0; if (!Settings.Advanced.EraserBindTouchMultiplier && Settings.Advanced.IsSpecialScreen) - { eraserMultiplier = 1 / Settings.Advanced.TouchMultiplier; - } - if (boundsWidth > BoundsWidth) - { + if (boundsWidth > BoundsWidth) { isLastTouchEraser = true; if (drawingShapeMode == 0 && forceEraser) return; - if (boundsWidth > BoundsWidth * 2.5) - { + if (boundsWidth > BoundsWidth * 2.5) { double k = 1; - switch (Settings.Canvas.EraserSize) - { + switch (Settings.Canvas.EraserSize) { case 0: k = 0.5; break; @@ -245,35 +202,34 @@ namespace Ink_Canvas k = 1.8; break; } - inkCanvas.EraserShape = new EllipseStylusShape(boundsWidth * k * eraserMultiplier, boundsWidth * k * eraserMultiplier); + + inkCanvas.EraserShape = new EllipseStylusShape(boundsWidth * k * eraserMultiplier, + boundsWidth * k * eraserMultiplier); inkCanvas.EditingMode = InkCanvasEditingMode.EraseByPoint; } - else - { - if (StackPanelPPTControls.Visibility == Visibility.Visible && inkCanvas.Strokes.Count == 0 && Settings.PowerPointSettings.IsEnableFingerGestureSlideShowControl) - { + else { + if (StackPanelPPTControls.Visibility == Visibility.Visible && inkCanvas.Strokes.Count == 0 && + Settings.PowerPointSettings.IsEnableFingerGestureSlideShowControl) { isLastTouchEraser = false; inkCanvas.EditingMode = InkCanvasEditingMode.GestureOnly; inkCanvas.Opacity = 0.1; } - else - { + else { inkCanvas.EraserShape = new EllipseStylusShape(5, 5); inkCanvas.EditingMode = InkCanvasEditingMode.EraseByStroke; } } } - else - { + else { isLastTouchEraser = false; - inkCanvas.EraserShape = forcePointEraser ? new EllipseStylusShape(50, 50) : new EllipseStylusShape(5, 5); + inkCanvas.EraserShape = + forcePointEraser ? new EllipseStylusShape(50, 50) : new EllipseStylusShape(5, 5); if (forceEraser) return; inkCanvas.EditingMode = InkCanvasEditingMode.Ink; } } - public double GetTouchBoundWidth(TouchEventArgs e) - { + private double GetTouchBoundWidth(TouchEventArgs e) { var args = e.GetTouchPoint(null).Bounds; double value; if (!Settings.Advanced.IsQuadIR) value = args.Width; @@ -284,78 +240,59 @@ namespace Ink_Canvas //记录触摸设备ID private List dec = new List(); - //中心点 - System.Windows.Point centerPoint; - InkCanvasEditingMode lastInkCanvasEditingMode = InkCanvasEditingMode.Ink; - bool isSingleFingerDragMode = false; - private void inkCanvas_PreviewTouchDown(object sender, TouchEventArgs e) - { + //中心点 + private Point centerPoint; + private InkCanvasEditingMode lastInkCanvasEditingMode = InkCanvasEditingMode.Ink; + private bool isSingleFingerDragMode = false; + + private void inkCanvas_PreviewTouchDown(object sender, TouchEventArgs e) { dec.Add(e.TouchDevice.Id); //设备1个的时候,记录中心点 - if (dec.Count == 1) - { - TouchPoint touchPoint = e.GetTouchPoint(inkCanvas); + if (dec.Count == 1) { + var touchPoint = e.GetTouchPoint(inkCanvas); centerPoint = touchPoint.Position; //记录第一根手指点击时的 StrokeCollection lastTouchDownStrokeCollection = inkCanvas.Strokes.Clone(); } + //设备两个及两个以上,将画笔功能关闭 - if (dec.Count > 1 || isSingleFingerDragMode || !Settings.Gesture.IsEnableTwoFingerGesture) - { + if (dec.Count > 1 || isSingleFingerDragMode || !Settings.Gesture.IsEnableTwoFingerGesture) { if (isInMultiTouchMode || !Settings.Gesture.IsEnableTwoFingerGesture) return; - if (inkCanvas.EditingMode != InkCanvasEditingMode.None && inkCanvas.EditingMode != InkCanvasEditingMode.Select) - { - lastInkCanvasEditingMode = inkCanvas.EditingMode; - inkCanvas.EditingMode = InkCanvasEditingMode.None; - } + if (inkCanvas.EditingMode == InkCanvasEditingMode.None || + inkCanvas.EditingMode == InkCanvasEditingMode.Select) return; + lastInkCanvasEditingMode = inkCanvas.EditingMode; + inkCanvas.EditingMode = InkCanvasEditingMode.None; } } - private void inkCanvas_PreviewTouchUp(object sender, TouchEventArgs e) - { + private void inkCanvas_PreviewTouchUp(object sender, TouchEventArgs e) { //手势完成后切回之前的状态 if (dec.Count > 1) - { if (inkCanvas.EditingMode == InkCanvasEditingMode.None) - { inkCanvas.EditingMode = lastInkCanvasEditingMode; - } - } dec.Remove(e.TouchDevice.Id); inkCanvas.Opacity = 1; if (dec.Count == 0) - { if (lastTouchDownStrokeCollection.Count() != inkCanvas.Strokes.Count() && - !(drawingShapeMode == 9 && !isFirstTouchCuboid)) - { - int whiteboardIndex = CurrentWhiteboardIndex; - if (currentMode == 0) - { - whiteboardIndex = 0; - } + !(drawingShapeMode == 9 && !isFirstTouchCuboid)) { + var whiteboardIndex = CurrentWhiteboardIndex; + if (currentMode == 0) whiteboardIndex = 0; strokeCollections[whiteboardIndex] = lastTouchDownStrokeCollection; } - } } - private void inkCanvas_ManipulationStarting(object sender, ManipulationStartingEventArgs e) - { + + private void inkCanvas_ManipulationStarting(object sender, ManipulationStartingEventArgs e) { e.Mode = ManipulationModes.All; } - private void inkCanvas_ManipulationInertiaStarting(object sender, ManipulationInertiaStartingEventArgs e) - { + private void inkCanvas_ManipulationInertiaStarting(object sender, ManipulationInertiaStartingEventArgs e) { } - } - - private void Main_Grid_ManipulationCompleted(object sender, ManipulationCompletedEventArgs e) - { - if (e.Manipulators.Count() == 0) - { - if (forceEraser) return; - inkCanvas.EditingMode = InkCanvasEditingMode.Ink; - } + private void Main_Grid_ManipulationCompleted(object sender, ManipulationCompletedEventArgs e) { + if (e.Manipulators.Count() != 0) return; + if (forceEraser) return; + inkCanvas.EditingMode = InkCanvasEditingMode.Ink; } // -- removed -- @@ -378,111 +315,103 @@ namespace Ink_Canvas // _currentCommitType = CommitReason.UserInput; //} - private void Main_Grid_ManipulationDelta(object sender, ManipulationDeltaEventArgs e) - { + private void Main_Grid_ManipulationDelta(object sender, ManipulationDeltaEventArgs e) { if (isInMultiTouchMode || !Settings.Gesture.IsEnableTwoFingerGesture) return; - if ((dec.Count >= 2 && (Settings.PowerPointSettings.IsEnableTwoFingerGestureInPresentationMode || StackPanelPPTControls.Visibility != Visibility.Visible || StackPanelPPTButtons.Visibility == Visibility.Collapsed)) || isSingleFingerDragMode) - { - ManipulationDelta md = e.DeltaManipulation; - Vector trans = md.Translation; // 获得位移矢量 + if ((dec.Count >= 2 && (Settings.PowerPointSettings.IsEnableTwoFingerGestureInPresentationMode || + StackPanelPPTControls.Visibility != Visibility.Visible || + StackPanelPPTButtons.Visibility == Visibility.Collapsed)) || + isSingleFingerDragMode) { + var md = e.DeltaManipulation; + var trans = md.Translation; // 获得位移矢量 - Matrix m = new Matrix(); + var m = new Matrix(); if (Settings.Gesture.IsEnableTwoFingerTranslate) - m.Translate(trans.X, trans.Y); // 移动 + m.Translate(trans.X, trans.Y); // 移动 - if (Settings.Gesture.IsEnableTwoFingerGestureTranslateOrRotation) - { - double rotate = md.Rotation; // 获得旋转角度 - Vector scale = md.Scale; // 获得缩放倍数 + if (Settings.Gesture.IsEnableTwoFingerGestureTranslateOrRotation) { + var rotate = md.Rotation; // 获得旋转角度 + var scale = md.Scale; // 获得缩放倍数 // Find center of element and then transform to get current location of center - FrameworkElement fe = e.Source as FrameworkElement; - Point center = new Point(fe.ActualWidth / 2, fe.ActualHeight / 2); - center = m.Transform(center); // 转换为矩阵缩放和旋转的中心点 + var fe = e.Source as FrameworkElement; + var center = new Point(fe.ActualWidth / 2, fe.ActualHeight / 2); + center = m.Transform(center); // 转换为矩阵缩放和旋转的中心点 if (Settings.Gesture.IsEnableTwoFingerRotation) - m.RotateAt(rotate, center.X, center.Y); // 旋转 + m.RotateAt(rotate, center.X, center.Y); // 旋转 if (Settings.Gesture.IsEnableTwoFingerZoom) - m.ScaleAt(scale.X, scale.Y, center.X, center.Y); // 缩放 + m.ScaleAt(scale.X, scale.Y, center.X, center.Y); // 缩放 } - StrokeCollection strokes = inkCanvas.GetSelectedStrokes(); - if (strokes.Count != 0) - { - foreach (Stroke stroke in strokes) - { + var strokes = inkCanvas.GetSelectedStrokes(); + if (strokes.Count != 0) { + foreach (var stroke in strokes) { stroke.Transform(m, false); - foreach (Circle circle in circles) - { - if (stroke == circle.Stroke) - { - circle.R = GetDistance(circle.Stroke.StylusPoints[0].ToPoint(), circle.Stroke.StylusPoints[circle.Stroke.StylusPoints.Count / 2].ToPoint()) / 2; - circle.Centroid = new Point((circle.Stroke.StylusPoints[0].X + circle.Stroke.StylusPoints[circle.Stroke.StylusPoints.Count / 2].X) / 2, - (circle.Stroke.StylusPoints[0].Y + circle.Stroke.StylusPoints[circle.Stroke.StylusPoints.Count / 2].Y) / 2); + foreach (var circle in circles) + if (stroke == circle.Stroke) { + circle.R = GetDistance(circle.Stroke.StylusPoints[0].ToPoint(), + circle.Stroke.StylusPoints[circle.Stroke.StylusPoints.Count / 2].ToPoint()) / 2; + circle.Centroid = new Point( + (circle.Stroke.StylusPoints[0].X + + circle.Stroke.StylusPoints[circle.Stroke.StylusPoints.Count / 2].X) / 2, + (circle.Stroke.StylusPoints[0].Y + + circle.Stroke.StylusPoints[circle.Stroke.StylusPoints.Count / 2].Y) / 2); break; } - } - if (Settings.Gesture.IsEnableTwoFingerZoom) - { - try - { - stroke.DrawingAttributes.Width *= md.Scale.X; - stroke.DrawingAttributes.Height *= md.Scale.Y; - } - catch { } + if (!Settings.Gesture.IsEnableTwoFingerZoom) continue; + try { + stroke.DrawingAttributes.Width *= md.Scale.X; + stroke.DrawingAttributes.Height *= md.Scale.Y; } + catch { } } - if (lastTempManiputlaionMatrix == null) - { + + if (lastTempManiputlaionMatrix == null) { lastTempManiputlaionMatrix = m; lastTempStrokeCollection = strokes; } - else - { + else { lastTempManiputlaionMatrix?.Append(m); } } - else - { - if (Settings.Gesture.IsEnableTwoFingerZoom) - { - foreach (Stroke stroke in inkCanvas.Strokes) - { + else { + if (Settings.Gesture.IsEnableTwoFingerZoom) { + foreach (var stroke in inkCanvas.Strokes) { stroke.Transform(m, false); - try - { + try { stroke.DrawingAttributes.Width *= md.Scale.X; stroke.DrawingAttributes.Height *= md.Scale.Y; } catch { } - }; + } + + ; } - else - { - foreach (Stroke stroke in inkCanvas.Strokes) - { - stroke.Transform(m, false); - }; + else { + foreach (var stroke in inkCanvas.Strokes) stroke.Transform(m, false); + ; } - foreach (Circle circle in circles) - { - circle.R = GetDistance(circle.Stroke.StylusPoints[0].ToPoint(), circle.Stroke.StylusPoints[circle.Stroke.StylusPoints.Count / 2].ToPoint()) / 2; + foreach (var circle in circles) { + circle.R = GetDistance(circle.Stroke.StylusPoints[0].ToPoint(), + circle.Stroke.StylusPoints[circle.Stroke.StylusPoints.Count / 2].ToPoint()) / 2; circle.Centroid = new Point( - (circle.Stroke.StylusPoints[0].X + circle.Stroke.StylusPoints[circle.Stroke.StylusPoints.Count / 2].X) / 2, - (circle.Stroke.StylusPoints[0].Y + circle.Stroke.StylusPoints[circle.Stroke.StylusPoints.Count / 2].Y) / 2 + (circle.Stroke.StylusPoints[0].X + + circle.Stroke.StylusPoints[circle.Stroke.StylusPoints.Count / 2].X) / 2, + (circle.Stroke.StylusPoints[0].Y + + circle.Stroke.StylusPoints[circle.Stroke.StylusPoints.Count / 2].Y) / 2 ); - }; - if (lastTempManiputlaionMatrix == null) - { + } + + ; + if (lastTempManiputlaionMatrix == null) { lastTempManiputlaionMatrix = m; lastTempStrokeCollection = inkCanvas.Strokes; } - else - { + else { lastTempManiputlaionMatrix?.Append(m); } } diff --git a/Ink Canvas/Resources/Settings.cs b/Ink Canvas/Resources/Settings.cs index 460497f..fad77f3 100644 --- a/Ink Canvas/Resources/Settings.cs +++ b/Ink Canvas/Resources/Settings.cs @@ -286,8 +286,8 @@ namespace Ink_Canvas [JsonProperty("isLogEnabled")] public bool IsLogEnabled { get; set; } = true; - [JsonProperty("isSecondConfimeWhenShutdownApp")] - public bool IsSecondConfimeWhenShutdownApp { get; set; } = false; + [JsonProperty("isSecondConfirmWhenShutdownApp")] + public bool IsSecondConfirmWhenShutdownApp { get; set; } = false; } public class InkToShape