diff --git a/InkCanvasForClass/MainWindow.xaml b/InkCanvasForClass/MainWindow.xaml
index 5c00d67..1a0799b 100644
--- a/InkCanvasForClass/MainWindow.xaml
+++ b/InkCanvasForClass/MainWindow.xaml
@@ -106,2138 +106,9 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 左下
-
-
- 右下
-
-
- 左侧
-
-
- 右侧
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 显示页码
-
-
- 半透明
-
-
- 黑色背景
-
-
-
-
-
- 显示页码
-
-
- 半透明
-
-
- 黑色背景
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- DesktopAnnotation
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- s
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Dubi906w
-
-
- ICC 的开发者
-
-
-
-
-
-
-
-
-
- ChangSakura
-
-
- ICA 的开发者
-
-
-
-
-
-
-
-
-
- WXRIW
-
-
- Ink Canvas 的开发者
-
-
-
-
-
- ICC 仓库源:
-
-
-
-
-
- ICA 仓库源:
-
-
-
-
-
- Ink Canvas 仓库源:
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Raspberry Kan
-
-
-
-
-
-
-
-
-
- Kengwang
-
-
-
-
-
-
-
-
-
- Charles Jia
-
-
-
-
-
-
-
-
-
- clover_yan
-
-
-
-
-
-
-
-
-
- Netherite_Bowl
-
-
-
-
-
-
-
-
-
- Yoojun Zhou
-
-
-
-
-
-
-
-
-
- YuWenHui2020
-
-
-
-
-
-
-
-
-
- ZongziTEK
-
-
-
-
-
-
-
-
-
- Aesthed
-
-
-
-
-
-
-
-
-
- Wei
-
-
-
-
-
-
-
-
-
- Alan-CRL
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
@@ -2435,6 +306,9 @@
+
+
+
@@ -2785,6 +659,186 @@
HorizontalAlignment="Center" FontSize="12" />
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -2839,7 +893,7 @@
-
+
@@ -3732,7 +1786,7 @@
HorizontalAlignment="Center" FontSize="12" />
-
+
@@ -4451,6 +2505,9 @@
+
+
+
@@ -4970,7 +3027,7 @@
-
@@ -5039,7 +3096,7 @@
+ Background="#f4f4f5" Opacity="1" CornerRadius="6" Margin="0,0,6,0">
@@ -7239,5 +5296,2558 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 左下
+
+
+ 右下
+
+
+ 左侧
+
+
+ 右侧
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 显示页码
+
+
+ 半透明
+
+
+ 黑色背景
+
+
+
+
+
+ 显示页码
+
+
+ 半透明
+
+
+ 黑色背景
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ DesktopAnnotation
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ s
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Dubi906w
+
+
+ ICC 的开发者
+
+
+
+
+
+
+
+
+
+ ChangSakura
+
+
+ ICA 的开发者
+
+
+
+
+
+
+
+
+
+ WXRIW
+
+
+ Ink Canvas 的开发者
+
+
+
+
+
+ ICC 仓库源:
+
+
+
+
+
+ ICA 仓库源:
+
+
+
+
+
+ Ink Canvas 仓库源:
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Raspberry Kan
+
+
+
+
+
+
+
+
+
+ Kengwang
+
+
+
+
+
+
+
+
+
+ Charles Jia
+
+
+
+
+
+
+
+
+
+ clover_yan
+
+
+
+
+
+
+
+
+
+ Netherite_Bowl
+
+
+
+
+
+
+
+
+
+ Yoojun Zhou
+
+
+
+
+
+
+
+
+
+ YuWenHui2020
+
+
+
+
+
+
+
+
+
+ ZongziTEK
+
+
+
+
+
+
+
+
+
+ Aesthed
+
+
+
+
+
+
+
+
+
+ Wei
+
+
+
+
+
+
+
+
+
+ Alan-CRL
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/InkCanvasForClass/MainWindow.xaml.cs b/InkCanvasForClass/MainWindow.xaml.cs
index f921ed2..0197fd9 100644
--- a/InkCanvasForClass/MainWindow.xaml.cs
+++ b/InkCanvasForClass/MainWindow.xaml.cs
@@ -169,7 +169,7 @@ namespace Ink_Canvas {
//加载设置
LoadSettings(true);
// HasNewUpdateWindow hasNewUpdateWindow = new HasNewUpdateWindow();
- if (Environment.Is64BitProcess) GroupBoxInkRecognition.Visibility = Visibility.Collapsed;
+ if (Environment.Is64BitProcess) SettingsInkRecognitionGroupBox.Visibility = Visibility.Collapsed;
ThemeManager.Current.ApplicationTheme = ApplicationTheme.Light;
SystemEvents_UserPreferenceChanged(null, null);
diff --git a/InkCanvasForClass/MainWindow_cs/MW_FloatingBarIcons.cs b/InkCanvasForClass/MainWindow_cs/MW_FloatingBarIcons.cs
index 5787da8..c1e3c99 100644
--- a/InkCanvasForClass/MainWindow_cs/MW_FloatingBarIcons.cs
+++ b/InkCanvasForClass/MainWindow_cs/MW_FloatingBarIcons.cs
@@ -282,14 +282,14 @@ namespace Ink_Canvas {
AnimationsHelper.HideWithSlideAndFade(BoardBorderRightPageListView);
if (BorderSettings.Visibility == Visibility.Visible) {
- BorderSettingsMask.IsHitTestVisible = false;
- BorderSettingsMask.Background = null;
+ SettingsOverlay.IsHitTestVisible = false;
+ SettingsOverlay.Background = null;
var sb = new Storyboard();
// 滑动动画
var slideAnimation = new DoubleAnimation {
From = 0, // 滑动距离
- To = BorderSettings.RenderTransform.Value.OffsetX - 440,
+ To = BorderSettings.RenderTransform.Value.OffsetX - 490,
Duration = TimeSpan.FromSeconds(0.6)
};
slideAnimation.EasingFunction = new CubicEase() { EasingMode = EasingMode.EaseOut };
@@ -1575,14 +1575,14 @@ namespace Ink_Canvas {
HideSubPanels();
}
else {
- BorderSettingsMask.IsHitTestVisible = true;
- BorderSettingsMask.Background = new SolidColorBrush(Color.FromArgb(1, 0, 0, 0));
+ SettingsOverlay.IsHitTestVisible = true;
+ SettingsOverlay.Background = new SolidColorBrush(Color.FromArgb(1, 0, 0, 0));
SettingsPanelScrollViewer.ScrollToTop();
var sb = new Storyboard();
// 滑动动画
var slideAnimation = new DoubleAnimation {
- From = BorderSettings.RenderTransform.Value.OffsetX - 440, // 滑动距离
+ From = BorderSettings.RenderTransform.Value.OffsetX - 490, // 滑动距离
To = 0,
Duration = TimeSpan.FromSeconds(0.6)
};
diff --git a/InkCanvasForClass/MainWindow_cs/MW_Settings.cs b/InkCanvasForClass/MainWindow_cs/MW_Settings.cs
index c146538..5b45a2f 100644
--- a/InkCanvasForClass/MainWindow_cs/MW_Settings.cs
+++ b/InkCanvasForClass/MainWindow_cs/MW_Settings.cs
@@ -219,8 +219,27 @@ namespace Ink_Canvas {
if (!isLoaded) return;
Settings.Appearance.EnableViewboxBlackBoardScaleTransform =
ToggleSwitchEnableViewboxBlackBoardScaleTransform.IsOn;
+
+ if (Settings.Appearance.EnableViewboxBlackBoardScaleTransform) // 画板 UI 缩放 80%
+ {
+ ViewboxBlackboardLeftSideScaleTransform.ScaleX = 0.8;
+ ViewboxBlackboardLeftSideScaleTransform.ScaleY = 0.8;
+ ViewboxBlackboardCenterSideScaleTransform.ScaleX = 0.8;
+ ViewboxBlackboardCenterSideScaleTransform.ScaleY = 0.8;
+ ViewboxBlackboardRightSideScaleTransform.ScaleX = 0.8;
+ ViewboxBlackboardRightSideScaleTransform.ScaleY = 0.8;
+ }
+ else
+ {
+ ViewboxBlackboardLeftSideScaleTransform.ScaleX = 1;
+ ViewboxBlackboardLeftSideScaleTransform.ScaleY = 1;
+ ViewboxBlackboardCenterSideScaleTransform.ScaleX = 1;
+ ViewboxBlackboardCenterSideScaleTransform.ScaleY = 1;
+ ViewboxBlackboardRightSideScaleTransform.ScaleX = 1;
+ ViewboxBlackboardRightSideScaleTransform.ScaleY = 1;
+ }
+
SaveSettingsToFile();
- LoadSettings();
}
public void ComboBoxFloatingBarImg_SelectionChanged(object sender, RoutedEventArgs e) {
@@ -277,7 +296,6 @@ namespace Ink_Canvas {
}
SaveSettingsToFile();
- LoadSettings();
}
private void ToggleSwitchEnableChickenSoupInWhiteboardMode_Toggled(object sender, RoutedEventArgs e) {
@@ -292,7 +310,6 @@ namespace Ink_Canvas {
}
SaveSettingsToFile();
- LoadSettings();
}
//[Obsolete]
@@ -1014,11 +1031,11 @@ namespace Ink_Canvas {
Settings.Automation.IsAutoFoldInPPTSlideShow = ToggleSwitchAutoFoldInPPTSlideShow.IsOn;
if (Settings.Automation.IsAutoFoldInPPTSlideShow)
{
- SettingsPPTInkingAndAutoFoldExplictBorder.Visibility = Visibility.Visible;
+ SettingsPPTInkingAndAutoFoldExplictBorder.IsOpen = true;
SettingsShowCanvasAtNewSlideShowStackPanel.Opacity = 0.5;
SettingsShowCanvasAtNewSlideShowStackPanel.IsHitTestVisible = false;
} else {
- SettingsPPTInkingAndAutoFoldExplictBorder.Visibility = Visibility.Collapsed;
+ SettingsPPTInkingAndAutoFoldExplictBorder.IsOpen = false;
SettingsShowCanvasAtNewSlideShowStackPanel.Opacity = 1;
SettingsShowCanvasAtNewSlideShowStackPanel.IsHitTestVisible = true;
}
@@ -1343,6 +1360,54 @@ namespace Ink_Canvas {
SaveSettingsToFile();
}
+ private void ToggleSwitchDisableGestureEraser_Toggled(object sender, RoutedEventArgs e)
+ {
+ if (!isLoaded) return;
+ Settings.Gesture.DisableGestureEraser = ToggleSwitchDisableGestureEraser.IsOn;
+ if (Settings.Gesture.DisableGestureEraser) {
+ GestureEraserSettingsItemsPanel.Opacity = 0.5;
+ GestureEraserSettingsItemsPanel.IsHitTestVisible = false;
+ SettingsGestureEraserDisabledBorder.IsOpen = true;
+ } else {
+ GestureEraserSettingsItemsPanel.Opacity = 1;
+ GestureEraserSettingsItemsPanel.IsHitTestVisible = true;
+ SettingsGestureEraserDisabledBorder.IsOpen = false;
+ }
+ SaveSettingsToFile();
+ }
+
+ private void ComboBoxDefaultMultiPointHandWriting_SelectionChanged(object sender, RoutedEventArgs e) {
+ if (!isLoaded) return;
+ Settings.Gesture.DefaultMultiPointHandWritingMode = ComboBoxDefaultMultiPointHandWriting.SelectedIndex;
+ SaveSettingsToFile();
+ }
+
+ private void ToggleSwitchHideCursorWhenUsingTouchDevice_Toggled(object sender, RoutedEventArgs e) {
+ if (!isLoaded) return;
+ Settings.Gesture.HideCursorWhenUsingTouchDevice = ToggleSwitchHideCursorWhenUsingTouchDevice.IsOn;
+ SaveSettingsToFile();
+ }
+
+ private void ToggleSwitchEnableMouseGesture_Toggled(object sender, RoutedEventArgs e) {
+ if (!isLoaded) return;
+ Settings.Gesture.EnableMouseGesture = ToggleSwitchEnableMouseGesture.IsOn;
+ SaveSettingsToFile();
+ }
+
+ private void ToggleSwitchEnableMouseRightBtnGesture_Toggled(object sender, RoutedEventArgs e)
+ {
+ if (!isLoaded) return;
+ Settings.Gesture.EnableMouseRightBtnGesture = ToggleSwitchEnableMouseRightBtnGesture.IsOn;
+ SaveSettingsToFile();
+ }
+
+ private void ToggleSwitchEnableMouseWheelGesture_Toggled(object sender, RoutedEventArgs e)
+ {
+ if (!isLoaded) return;
+ Settings.Gesture.EnableMouseWheelGesture = ToggleSwitchEnableMouseWheelGesture.IsOn;
+ SaveSettingsToFile();
+ }
+
#endregion
#region Reset
@@ -1451,6 +1516,12 @@ namespace Ink_Canvas {
Settings.Gesture.IsEnableTwoFingerZoom = false;
Settings.Gesture.IsEnableTwoFingerRotation = false;
Settings.Gesture.IsEnableTwoFingerRotationOnSelection = false;
+ Settings.Gesture.DisableGestureEraser = true;
+ Settings.Gesture.DefaultMultiPointHandWritingMode = 2;
+ Settings.Gesture.HideCursorWhenUsingTouchDevice = true;
+ Settings.Gesture.EnableMouseGesture = true;
+ Settings.Gesture.EnableMouseRightBtnGesture = true;
+ Settings.Gesture.EnableMouseWheelGesture = true;
Settings.InkToShape.IsInkToShapeEnabled = true;
Settings.InkToShape.IsInkToShapeNoFakePressureRectangle = false;
@@ -1648,6 +1719,13 @@ namespace Ink_Canvas {
SaveSettingsToFile();
}
+ private void ToggleSwitchEnsureFloatingBarVisibleInScreen_Toggled(object sender, RoutedEventArgs e) {
+ if (!isLoaded) return;
+ Settings.Advanced.IsEnableDPIChangeDetection = ToggleSwitchEnsureFloatingBarVisibleInScreen.IsOn;
+ Settings.Advanced.IsEnableResolutionChangeDetection = ToggleSwitchEnsureFloatingBarVisibleInScreen.IsOn;
+ SaveSettingsToFile();
+ }
+
#endregion
#region RandSettings
@@ -1674,6 +1752,179 @@ namespace Ink_Canvas {
#endregion
+ #region SettingsPane
+
+ public void SettingsPane_ScrollChanged(object sender, RoutedEventArgs e) {
+ UpdateSettingsIndexSidebarDisplayStatus();
+ }
+
+ public void UpdateSettingsIndexSidebarDisplayStatus() {
+
+ if (Math.Truncate(SettingsAboutGroupBox.MinHeight) != Math.Truncate(SettingsPanelScrollViewer.ActualHeight)) SettingsAboutGroupBox.MinHeight = SettingsPanelScrollViewer.ActualHeight;
+
+ SettingsStartupJumpToGroupBoxButton.BorderThickness = new Thickness(0, 0, 0, 0);
+ SettingsStartupJumpToGroupBoxButton.Background = new SolidColorBrush(Colors.Transparent);
+ SettingsCanvasJumpToGroupBoxButton.BorderThickness = new Thickness(0, 0, 0, 0);
+ SettingsCanvasJumpToGroupBoxButton.Background = new SolidColorBrush(Colors.Transparent);
+ SettingsGestureJumpToGroupBoxButton.BorderThickness = new Thickness(0, 0, 0, 0);
+ SettingsGestureJumpToGroupBoxButton.Background = new SolidColorBrush(Colors.Transparent);
+ SettingsInkRecognitionJumpToGroupBoxButton.BorderThickness = new Thickness(0, 0, 0, 0);
+ SettingsInkRecognitionJumpToGroupBoxButton.Background = new SolidColorBrush(Colors.Transparent);
+ SettingsAppearanceJumpToGroupBoxButton.BorderThickness = new Thickness(0, 0, 0, 0);
+ SettingsAppearanceJumpToGroupBoxButton.Background = new SolidColorBrush(Colors.Transparent);
+ SettingsPPTJumpToGroupBoxButton.BorderThickness = new Thickness(0, 0, 0, 0);
+ SettingsPPTJumpToGroupBoxButton.Background = new SolidColorBrush(Colors.Transparent);
+ SettingsAdvancedJumpToGroupBoxButton.BorderThickness = new Thickness(0, 0, 0, 0);
+ SettingsAdvancedJumpToGroupBoxButton.Background = new SolidColorBrush(Colors.Transparent);
+ SettingsAutomationJumpToGroupBoxButton.BorderThickness = new Thickness(0, 0, 0, 0);
+ SettingsAutomationJumpToGroupBoxButton.Background = new SolidColorBrush(Colors.Transparent);
+ SettingsRandWindowJumpToGroupBoxButton.BorderThickness = new Thickness(0, 0, 0, 0);
+ SettingsRandWindowJumpToGroupBoxButton.Background = new SolidColorBrush(Colors.Transparent);
+ SettingsAboutJumpToGroupBoxButton.BorderThickness = new Thickness(0, 0, 0, 0);
+ SettingsAboutJumpToGroupBoxButton.Background = new SolidColorBrush(Colors.Transparent);
+
+ var SettingsStartupGroupBoxTransform = SettingsStartupGroupBox.TransformToVisual(SettingsPanelScrollViewer);
+ var SettingsStartupGroupBoxTopPosition = SettingsStartupGroupBoxTransform.Transform(new Point(0, 0));
+ var SettingsStartupGroupBoxBottomPosition = SettingsStartupGroupBoxTransform.Transform(new Point(0, SettingsStartupGroupBox.ActualHeight));
+
+ var SettingsCanvasGroupBoxTransform = SettingsCanvasGroupBox.TransformToVisual(SettingsPanelScrollViewer);
+ var SettingsCanvasGroupBoxTopPosition = SettingsCanvasGroupBoxTransform.Transform(new Point(0, 0));
+ var SettingsCanvasGroupBoxBottomPosition = SettingsCanvasGroupBoxTransform.Transform(new Point(0, SettingsCanvasGroupBox.ActualHeight));
+
+ var SettingsGestureGroupBoxTransform = SettingsGestureGroupBox.TransformToVisual(SettingsPanelScrollViewer);
+ var SettingsGestureGroupBoxTopPosition = SettingsGestureGroupBoxTransform.Transform(new Point(0, 0));
+ var SettingsGestureGroupBoxBottomPosition = SettingsGestureGroupBoxTransform.Transform(new Point(0, SettingsGestureGroupBox.ActualHeight));
+
+ var SettingsInkRecognitionGroupBoxTransform = SettingsInkRecognitionGroupBox.TransformToVisual(SettingsPanelScrollViewer);
+ var SettingsInkRecognitionGroupBoxTopPosition = SettingsInkRecognitionGroupBoxTransform.Transform(new Point(0, 0));
+ var SettingsInkRecognitionGroupBoxBottomPosition = SettingsInkRecognitionGroupBoxTransform.Transform(new Point(0, SettingsInkRecognitionGroupBox.ActualHeight));
+
+ var SettingsAppearanceGroupBoxTransform = SettingsAppearanceGroupBox.TransformToVisual(SettingsPanelScrollViewer);
+ var SettingsAppearanceGroupBoxTopPosition = SettingsAppearanceGroupBoxTransform.Transform(new Point(0, 0));
+ var SettingsAppearanceGroupBoxBottomPosition = SettingsAppearanceGroupBoxTransform.Transform(new Point(0, SettingsAppearanceGroupBox.ActualHeight));
+
+ var SettingsPPTGroupBoxTransform = SettingsPPTGroupBox.TransformToVisual(SettingsPanelScrollViewer);
+ var SettingsPPTGroupBoxTopPosition = SettingsPPTGroupBoxTransform.Transform(new Point(0, 0));
+ var SettingsPPTGroupBoxBottomPosition = SettingsPPTGroupBoxTransform.Transform(new Point(0, SettingsPPTGroupBox.ActualHeight));
+
+ var SettingsAdvancedGroupBoxTransform = SettingsAdvancedGroupBox.TransformToVisual(SettingsPanelScrollViewer);
+ var SettingsAdvancedGroupBoxTopPosition = SettingsAdvancedGroupBoxTransform.Transform(new Point(0, 0));
+ var SettingsAdvancedGroupBoxBottomPosition = SettingsAdvancedGroupBoxTransform.Transform(new Point(0, SettingsAdvancedGroupBox.ActualHeight));
+
+ var SettingsAutomationGroupBoxTransform = SettingsAutomationGroupBox.TransformToVisual(SettingsPanelScrollViewer);
+ var SettingsAutomationGroupBoxTopPosition = SettingsAutomationGroupBoxTransform.Transform(new Point(0, 0));
+ var SettingsAutomationGroupBoxBottomPosition = SettingsAutomationGroupBoxTransform.Transform(new Point(0, SettingsAutomationGroupBox.ActualHeight));
+
+ var SettingsRandWindowGroupBoxTransform = SettingsRandWindowGroupBox.TransformToVisual(SettingsPanelScrollViewer);
+ var SettingsRandWindowGroupBoxTopPosition = SettingsRandWindowGroupBoxTransform.Transform(new Point(0, 0));
+ var SettingsRandWindowGroupBoxBottomPosition = SettingsRandWindowGroupBoxTransform.Transform(new Point(0, SettingsRandWindowGroupBox.ActualHeight));
+
+ if (SettingsStartupGroupBoxTopPosition.Y < SettingsPanelScrollViewer.ActualHeight /2 && SettingsStartupGroupBoxBottomPosition.Y > 50) {
+ SettingsStartupJumpToGroupBoxButton.BorderThickness = new Thickness(0, 0, 4, 0);
+ SettingsStartupJumpToGroupBoxButton.Background = new SolidColorBrush(Color.FromRgb(39, 39, 42));
+ } else if (SettingsCanvasGroupBoxTopPosition.Y < SettingsPanelScrollViewer.ActualHeight / 2 && SettingsCanvasGroupBoxBottomPosition.Y > 50) {
+ SettingsCanvasJumpToGroupBoxButton.BorderThickness = new Thickness(0, 0, 4, 0);
+ SettingsCanvasJumpToGroupBoxButton.Background = new SolidColorBrush(Color.FromRgb(39, 39, 42));
+ } else if (SettingsGestureGroupBoxTopPosition.Y < SettingsPanelScrollViewer.ActualHeight / 2 && SettingsGestureGroupBoxBottomPosition.Y > 50) {
+ SettingsGestureJumpToGroupBoxButton.BorderThickness = new Thickness(0, 0, 4, 0);
+ SettingsGestureJumpToGroupBoxButton.Background = new SolidColorBrush(Color.FromRgb(39, 39, 42));
+ } else if (SettingsInkRecognitionGroupBoxTopPosition.Y < SettingsPanelScrollViewer.ActualHeight / 2 && SettingsInkRecognitionGroupBoxBottomPosition.Y > 50) {
+ SettingsInkRecognitionJumpToGroupBoxButton.BorderThickness = new Thickness(0, 0, 4, 0);
+ SettingsInkRecognitionJumpToGroupBoxButton.Background = new SolidColorBrush(Color.FromRgb(39, 39, 42));
+ } else if (SettingsAppearanceGroupBoxTopPosition.Y < SettingsPanelScrollViewer.ActualHeight / 2 && SettingsAppearanceGroupBoxBottomPosition.Y > 50) {
+ SettingsAppearanceJumpToGroupBoxButton.BorderThickness = new Thickness(0, 0, 4, 0);
+ SettingsAppearanceJumpToGroupBoxButton.Background = new SolidColorBrush(Color.FromRgb(39, 39, 42));
+ } else if (SettingsPPTGroupBoxTopPosition.Y < SettingsPanelScrollViewer.ActualHeight / 2 && SettingsPPTGroupBoxBottomPosition.Y > 50) {
+ SettingsPPTJumpToGroupBoxButton.BorderThickness = new Thickness(0, 0, 4, 0);
+ SettingsPPTJumpToGroupBoxButton.Background = new SolidColorBrush(Color.FromRgb(39, 39, 42));
+ } else if (SettingsAdvancedGroupBoxTopPosition.Y < SettingsPanelScrollViewer.ActualHeight * 0.9 && SettingsAdvancedGroupBoxBottomPosition.Y > 50) {
+ SettingsAdvancedJumpToGroupBoxButton.BorderThickness = new Thickness(0, 0, 4, 0);
+ SettingsAdvancedJumpToGroupBoxButton.Background = new SolidColorBrush(Color.FromRgb(39, 39, 42));
+ } else if (SettingsAutomationGroupBoxTopPosition.Y < SettingsPanelScrollViewer.ActualHeight * 0.9 && SettingsAutomationGroupBoxBottomPosition.Y > 50) {
+ SettingsAutomationJumpToGroupBoxButton.BorderThickness = new Thickness(0, 0, 4, 0);
+ SettingsAutomationJumpToGroupBoxButton.Background = new SolidColorBrush(Color.FromRgb(39, 39, 42));
+ } else if (SettingsRandWindowGroupBoxTopPosition.Y < SettingsPanelScrollViewer.ActualHeight * 0.9 && SettingsRandWindowGroupBoxBottomPosition.Y > 50) {
+ SettingsRandWindowJumpToGroupBoxButton.BorderThickness = new Thickness(0, 0, 4, 0);
+ SettingsRandWindowJumpToGroupBoxButton.Background = new SolidColorBrush(Color.FromRgb(39, 39, 42));
+ } else {
+ SettingsAboutJumpToGroupBoxButton.BorderThickness = new Thickness(0, 0, 4, 0);
+ SettingsAboutJumpToGroupBoxButton.Background = new SolidColorBrush(Color.FromRgb(39, 39, 42));
+ }
+
+ Trace.WriteLine(SettingsRandWindowGroupBoxBottomPosition.Y);
+ }
+
+ public void SettingsStartupJumpToGroupBox(object sender, MouseButtonEventArgs e) {
+ var transform = SettingsStartupGroupBox.TransformToVisual(SettingsPanelScrollViewer);
+ var position = transform.Transform(new Point(0, 0));
+ SettingsPanelScrollViewer.ScrollToVerticalOffset(SettingsPanelScrollViewer.VerticalOffset + position.Y - 10);
+ }
+
+ public void SettingsCanvasJumpToGroupBox(object sender, MouseButtonEventArgs e)
+ {
+ var transform = SettingsCanvasGroupBox.TransformToVisual(SettingsPanelScrollViewer);
+ var position = transform.Transform(new Point(0, 0));
+ SettingsPanelScrollViewer.ScrollToVerticalOffset(SettingsPanelScrollViewer.VerticalOffset + position.Y - 10);
+ }
+
+ public void SettingsGestureJumpToGroupBox(object sender, MouseButtonEventArgs e)
+ {
+ var transform = SettingsGestureGroupBox.TransformToVisual(SettingsPanelScrollViewer);
+ var position = transform.Transform(new Point(0, 0));
+ SettingsPanelScrollViewer.ScrollToVerticalOffset(SettingsPanelScrollViewer.VerticalOffset + position.Y - 10);
+ }
+
+ public void SettingsInkRecognitionJumpToGroupBox(object sender, MouseButtonEventArgs e)
+ {
+ var transform = SettingsInkRecognitionGroupBox.TransformToVisual(SettingsPanelScrollViewer);
+ var position = transform.Transform(new Point(0, 0));
+ SettingsPanelScrollViewer.ScrollToVerticalOffset(SettingsPanelScrollViewer.VerticalOffset + position.Y - 10);
+ }
+
+ public void SettingsAppearanceJumpToGroupBox(object sender, MouseButtonEventArgs e)
+ {
+ var transform = SettingsAppearanceGroupBox.TransformToVisual(SettingsPanelScrollViewer);
+ var position = transform.Transform(new Point(0, 0));
+ SettingsPanelScrollViewer.ScrollToVerticalOffset(SettingsPanelScrollViewer.VerticalOffset + position.Y - 10);
+ }
+
+ public void SettingsPPTJumpToGroupBox(object sender, MouseButtonEventArgs e)
+ {
+ var transform = SettingsPPTGroupBox.TransformToVisual(SettingsPanelScrollViewer);
+ var position = transform.Transform(new Point(0, 0));
+ SettingsPanelScrollViewer.ScrollToVerticalOffset(SettingsPanelScrollViewer.VerticalOffset + position.Y - 10);
+ }
+
+ public void SettingsAdvancedJumpToGroupBox(object sender, MouseButtonEventArgs e)
+ {
+ var transform = SettingsAdvancedGroupBox.TransformToVisual(SettingsPanelScrollViewer);
+ var position = transform.Transform(new Point(0, 0));
+ SettingsPanelScrollViewer.ScrollToVerticalOffset(SettingsPanelScrollViewer.VerticalOffset + position.Y - 10);
+ }
+
+ public void SettingsAutomationJumpToGroupBox(object sender, MouseButtonEventArgs e)
+ {
+ var transform = SettingsAutomationGroupBox.TransformToVisual(SettingsPanelScrollViewer);
+ var position = transform.Transform(new Point(0, 0));
+ SettingsPanelScrollViewer.ScrollToVerticalOffset(SettingsPanelScrollViewer.VerticalOffset + position.Y - 10);
+ }
+
+ public void SettingsRandWindowJumpToGroupBox(object sender, MouseButtonEventArgs e)
+ {
+ var transform = SettingsRandWindowGroupBox.TransformToVisual(SettingsPanelScrollViewer);
+ var position = transform.Transform(new Point(0, 0));
+ SettingsPanelScrollViewer.ScrollToVerticalOffset(SettingsPanelScrollViewer.VerticalOffset + position.Y - 10);
+ }
+
+ public void SettingsAboutJumpToGroupBox(object sender, MouseButtonEventArgs e)
+ {
+ var transform = SettingsAboutGroupBox.TransformToVisual(SettingsPanelScrollViewer);
+ var position = transform.Transform(new Point(0, 0));
+ SettingsPanelScrollViewer.ScrollToVerticalOffset(SettingsPanelScrollViewer.VerticalOffset + position.Y - 10);
+ }
+
+ #endregion
+
public static void SaveSettingsToFile() {
var text = JsonConvert.SerializeObject(Settings, Formatting.Indented);
try {
diff --git a/InkCanvasForClass/MainWindow_cs/MW_SettingsToLoad.cs b/InkCanvasForClass/MainWindow_cs/MW_SettingsToLoad.cs
index 93b54bf..b242ccd 100644
--- a/InkCanvasForClass/MainWindow_cs/MW_SettingsToLoad.cs
+++ b/InkCanvasForClass/MainWindow_cs/MW_SettingsToLoad.cs
@@ -3,6 +3,7 @@ using Ink_Canvas.Helpers;
using Newtonsoft.Json;
using OSVersionExtension;
using System;
+using System.Diagnostics;
using System.Reflection;
using System.Windows;
using System.Windows.Controls;
@@ -180,21 +181,21 @@ namespace Ink_Canvas {
if (Settings.Appearance.EnableViewboxBlackBoardScaleTransform) // 画板 UI 缩放 80%
{
- //ViewboxBlackboardLeftSideScaleTransform.ScaleX = 0.8;
- //ViewboxBlackboardLeftSideScaleTransform.ScaleY = 0.8;
+ ViewboxBlackboardLeftSideScaleTransform.ScaleX = 0.8;
+ ViewboxBlackboardLeftSideScaleTransform.ScaleY = 0.8;
ViewboxBlackboardCenterSideScaleTransform.ScaleX = 0.8;
ViewboxBlackboardCenterSideScaleTransform.ScaleY = 0.8;
- //ViewboxBlackboardRightSideScaleTransform.ScaleX = 0.8;
- //ViewboxBlackboardRightSideScaleTransform.ScaleY = 0.8;
+ ViewboxBlackboardRightSideScaleTransform.ScaleX = 0.8;
+ ViewboxBlackboardRightSideScaleTransform.ScaleY = 0.8;
ToggleSwitchEnableViewboxBlackBoardScaleTransform.IsOn = true;
} else {
- //ViewboxBlackboardLeftSideScaleTransform.ScaleX = 1;
- //ViewboxBlackboardLeftSideScaleTransform.ScaleY = 1;
+ ViewboxBlackboardLeftSideScaleTransform.ScaleX = 1;
+ ViewboxBlackboardLeftSideScaleTransform.ScaleY = 1;
ViewboxBlackboardCenterSideScaleTransform.ScaleX = 1;
ViewboxBlackboardCenterSideScaleTransform.ScaleY = 1;
- //ViewboxBlackboardRightSideScaleTransform.ScaleX = 1;
- //ViewboxBlackboardRightSideScaleTransform.ScaleY = 1;
+ ViewboxBlackboardRightSideScaleTransform.ScaleX = 1;
+ ViewboxBlackboardRightSideScaleTransform.ScaleY = 1;
ToggleSwitchEnableViewboxBlackBoardScaleTransform.IsOn = false;
}
@@ -383,20 +384,42 @@ namespace Ink_Canvas {
ToggleSwitchEnableTwoFingerRotationOnSelection.IsOn =
Settings.Gesture.IsEnableTwoFingerRotationOnSelection;
- if (Settings.Gesture.AutoSwitchTwoFingerGesture) {
- if (Topmost) {
- ToggleSwitchEnableTwoFingerTranslate.IsOn = false;
- BoardToggleSwitchEnableTwoFingerTranslate.IsOn = false;
- Settings.Gesture.IsEnableTwoFingerTranslate = false;
- if (!isInMultiTouchMode) ToggleSwitchEnableMultiTouchMode.IsOn = true;
- } else {
- ToggleSwitchEnableTwoFingerTranslate.IsOn = true;
- BoardToggleSwitchEnableTwoFingerTranslate.IsOn = true;
- Settings.Gesture.IsEnableTwoFingerTranslate = true;
- if (isInMultiTouchMode) ToggleSwitchEnableMultiTouchMode.IsOn = false;
- }
+ //if (Settings.Gesture.AutoSwitchTwoFingerGesture) {
+ // if (Topmost) {
+ // ToggleSwitchEnableTwoFingerTranslate.IsOn = false;
+ // BoardToggleSwitchEnableTwoFingerTranslate.IsOn = false;
+ // Settings.Gesture.IsEnableTwoFingerTranslate = false;
+ // if (!isInMultiTouchMode) ToggleSwitchEnableMultiTouchMode.IsOn = true;
+ // } else {
+ // ToggleSwitchEnableTwoFingerTranslate.IsOn = true;
+ // BoardToggleSwitchEnableTwoFingerTranslate.IsOn = true;
+ // Settings.Gesture.IsEnableTwoFingerTranslate = true;
+ // if (isInMultiTouchMode) ToggleSwitchEnableMultiTouchMode.IsOn = false;
+ // }
+ //}
+
+ ToggleSwitchDisableGestureEraser.IsOn = Settings.Gesture.DisableGestureEraser;
+
+ if (Settings.Gesture.DisableGestureEraser) {
+ GestureEraserSettingsItemsPanel.Opacity = 0.5;
+ GestureEraserSettingsItemsPanel.IsHitTestVisible = false;
+ SettingsGestureEraserDisabledBorder.IsOpen = true;
+ } else {
+ GestureEraserSettingsItemsPanel.Opacity = 1;
+ GestureEraserSettingsItemsPanel.IsHitTestVisible = true;
+ SettingsGestureEraserDisabledBorder.IsOpen = false;
}
+ ComboBoxDefaultMultiPointHandWriting.SelectedIndex = Settings.Gesture.DefaultMultiPointHandWritingMode;
+
+ if (Settings.Gesture.DefaultMultiPointHandWritingMode == 0) {
+ ToggleSwitchEnableMultiTouchMode.IsOn = true;
+ } else if (Settings.Gesture.DefaultMultiPointHandWritingMode == 1) {
+ ToggleSwitchEnableMultiTouchMode.IsOn = false;
+ }
+
+ ToggleSwitchHideCursorWhenUsingTouchDevice.IsOn = Settings.Gesture.HideCursorWhenUsingTouchDevice;
+
CheckEnableTwoFingerGestureBtnColorPrompt();
} else {
Settings.Gesture = new Gesture();
@@ -539,6 +562,9 @@ namespace Ink_Canvas {
ToggleSwitchIsEnableResolutionChangeDetection.IsOn =
Settings.Advanced.IsEnableResolutionChangeDetection;
+
+ ToggleSwitchEnsureFloatingBarVisibleInScreen.IsOn = Settings.Advanced.IsEnableDPIChangeDetection &&
+ Settings.Advanced.IsEnableResolutionChangeDetection;
} else {
Settings.Advanced = new Advanced();
}
@@ -607,9 +633,9 @@ namespace Ink_Canvas {
ToggleSwitchAutoFoldInMaxHubWhiteboard.IsOn = Settings.Automation.IsAutoFoldInMaxHubWhiteboard;
- SettingsPPTInkingAndAutoFoldExplictBorder.Visibility = Visibility.Collapsed;
+ SettingsPPTInkingAndAutoFoldExplictBorder.IsOpen = false;
if (Settings.Automation.IsAutoFoldInPPTSlideShow) {
- SettingsPPTInkingAndAutoFoldExplictBorder.Visibility = Visibility.Visible;
+ SettingsPPTInkingAndAutoFoldExplictBorder.IsOpen = true;
SettingsShowCanvasAtNewSlideShowStackPanel.Opacity = 0.5;
SettingsShowCanvasAtNewSlideShowStackPanel.IsHitTestVisible = false;
}
diff --git a/InkCanvasForClass/MainWindow_cs/MW_ShapeDrawing.cs b/InkCanvasForClass/MainWindow_cs/MW_ShapeDrawing.cs
index f964ed5..9505c8d 100644
--- a/InkCanvasForClass/MainWindow_cs/MW_ShapeDrawing.cs
+++ b/InkCanvasForClass/MainWindow_cs/MW_ShapeDrawing.cs
@@ -1604,13 +1604,5 @@ namespace Ink_Canvas {
return false;
return true;
}
-
- private void MainWindow_OnMouseMove(object sender, MouseEventArgs e) {
- if (e.StylusDevice == null) {
- System.Windows.Forms.Cursor.Show();
- } else {
- System.Windows.Forms.Cursor.Hide();
- }
- }
}
}
\ No newline at end of file
diff --git a/InkCanvasForClass/MainWindow_cs/MW_TouchEvents.cs b/InkCanvasForClass/MainWindow_cs/MW_TouchEvents.cs
index e69f678..86ce0da 100644
--- a/InkCanvasForClass/MainWindow_cs/MW_TouchEvents.cs
+++ b/InkCanvasForClass/MainWindow_cs/MW_TouchEvents.cs
@@ -1,6 +1,7 @@
using Ink_Canvas.Helpers;
using System;
using System.Collections.Generic;
+using System.Diagnostics;
using System.Linq;
using System.Threading.Tasks;
using System.Windows;
@@ -40,6 +41,12 @@ namespace Ink_Canvas {
}
private void MainWindow_TouchDown(object sender, TouchEventArgs e) {
+
+ if (!isCursorHidden && Settings.Gesture.HideCursorWhenUsingTouchDevice) {
+ System.Windows.Forms.Cursor.Hide();
+ isCursorHidden = true;
+ }
+
if (inkCanvas.EditingMode == InkCanvasEditingMode.EraseByPoint
|| inkCanvas.EditingMode == InkCanvasEditingMode.EraseByStroke
|| inkCanvas.EditingMode == InkCanvasEditingMode.Select) return;
@@ -49,42 +56,52 @@ namespace Ink_Canvas {
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.Gesture.DisableGestureEraser) {
+ 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) {
- if (drawingShapeMode == 0 && forceEraser) return;
- double k = 1;
- switch (Settings.Canvas.EraserSize) {
- case 0:
- k = 0.5;
- break;
- case 1:
- k = 0.8;
- break;
- case 3:
- k = 1.25;
- break;
- case 4:
- k = 1.8;
- break;
+ if ((Settings.Advanced.TouchMultiplier != 0 || !Settings.Advanced.IsSpecialScreen) //启用特殊屏幕且触摸倍数为 0 时禁用橡皮
+ && boundWidth > BoundsWidth * 2.5) {
+ if (drawingShapeMode == 0 && forceEraser) return;
+ double k = 1;
+ switch (Settings.Canvas.EraserSize) {
+ case 0:
+ k = 0.5;
+ break;
+ case 1:
+ k = 0.8;
+ break;
+ case 3:
+ k = 1.25;
+ break;
+ case 4:
+ k = 1.8;
+ break;
+ }
+
+ inkCanvas.EraserShape = new EllipseStylusShape(boundWidth * k * eraserMultiplier * 0.25,
+ boundWidth * k * eraserMultiplier * 0.25);
+ TouchDownPointsList[e.TouchDevice.Id] = InkCanvasEditingMode.EraseByPoint;
+ inkCanvas.EditingMode = InkCanvasEditingMode.EraseByPoint;
}
+ else {
+ TouchDownPointsList[e.TouchDevice.Id] = InkCanvasEditingMode.None;
+ inkCanvas.EditingMode = InkCanvasEditingMode.None;
+ }
+ }
- 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 {
- TouchDownPointsList[e.TouchDevice.Id] = InkCanvasEditingMode.None;
- inkCanvas.EditingMode = InkCanvasEditingMode.None;
- }
}
private void MainWindow_StylusDown(object sender, StylusDownEventArgs e) {
+ if (!isCursorHidden && Settings.Gesture.HideCursorWhenUsingTouchDevice && e.StylusDevice.TabletDevice.Type == TabletDeviceType.Touch) {
+ System.Windows.Forms.Cursor.Hide();
+ isCursorHidden = true;
+ }
+
+
inkCanvas.CaptureStylus();
ViewboxFloatingBar.IsHitTestVisible = false;
BlackboardUIGridForInkReplay.IsHitTestVisible = false;
@@ -97,16 +114,18 @@ namespace Ink_Canvas {
}
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));
+ if (e.StylusDevice.TabletDevice.Type == TabletDeviceType.Touch) {
+ 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));
- }
- catch (Exception ex) {
- Label.Content = ex.ToString();
+ inkCanvas_StrokeCollected(inkCanvas,
+ new InkCanvasStrokeCollectedEventArgs(GetStrokeVisual(e.StylusDevice.Id).Stroke));
+ }
+ catch (Exception ex) {
+ Label.Content = ex.ToString();
+ }
}
try {
@@ -128,6 +147,15 @@ namespace Ink_Canvas {
}
private void MainWindow_StylusMove(object sender, StylusEventArgs e) {
+
+ if (!isCursorHidden && Settings.Gesture.HideCursorWhenUsingTouchDevice && e.StylusDevice.TabletDevice.Type == TabletDeviceType.Touch)
+ {
+ System.Windows.Forms.Cursor.Hide();
+ isCursorHidden = true;
+ }
+
+ Trace.WriteLine(e.Inverted);
+
try {
if (GetTouchDownPointsList(e.StylusDevice.Id) != InkCanvasEditingMode.None) return;
try {
@@ -173,6 +201,25 @@ namespace Ink_Canvas {
#endregion
+ #region Touch Pointer Hide
+
+ public bool isCursorHidden = false;
+
+ private void MainWindow_OnMouseMove(object sender, MouseEventArgs e) {
+ if (e.StylusDevice == null) {
+ if (isCursorHidden) {
+ System.Windows.Forms.Cursor.Show();
+ isCursorHidden = false;
+ }
+ } else if (e.StylusDevice.TabletDevice.Type == TabletDeviceType.Stylus) {
+ if (isCursorHidden) {
+ System.Windows.Forms.Cursor.Show();
+ isCursorHidden = false;
+ }
+ }
+ }
+
+ #endregion
private int lastTouchDownTime = 0, lastTouchUpTime = 0;
@@ -182,6 +229,12 @@ namespace Ink_Canvas {
private void Main_Grid_TouchDown(object sender, TouchEventArgs e) {
+ if (!isCursorHidden && Settings.Gesture.HideCursorWhenUsingTouchDevice)
+ {
+ System.Windows.Forms.Cursor.Hide();
+ isCursorHidden = true;
+ }
+
inkCanvas.CaptureTouch(e.TouchDevice);
ViewboxFloatingBar.IsHitTestVisible = false;
BlackboardUIGridForInkReplay.IsHitTestVisible = false;
@@ -194,52 +247,55 @@ namespace Ink_Canvas {
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) {
- isLastTouchEraser = true;
- if (drawingShapeMode == 0 && forceEraser) return;
- if (boundsWidth > BoundsWidth * 2.5) {
- double k = 1;
- switch (Settings.Canvas.EraserSize) {
- case 0:
- k = 0.5;
- break;
- case 1:
- k = 0.8;
- break;
- case 3:
- k = 1.25;
- break;
- case 4:
- k = 1.8;
- break;
- }
- inkCanvas.EraserShape = new EllipseStylusShape(boundsWidth * k * eraserMultiplier,
- boundsWidth * k * eraserMultiplier);
- inkCanvas.EditingMode = InkCanvasEditingMode.EraseByPoint;
- }
- else {
- if (StackPanelPPTControls.Visibility == Visibility.Visible && inkCanvas.Strokes.Count == 0 &&
- Settings.PowerPointSettings.IsEnableFingerGestureSlideShowControl) {
- isLastTouchEraser = false;
- inkCanvas.EditingMode = InkCanvasEditingMode.GestureOnly;
- inkCanvas.Opacity = 0.1;
+ if (!Settings.Gesture.DisableGestureEraser) {
+ double boundsWidth = GetTouchBoundWidth(e), eraserMultiplier = 1.0;
+ if (!Settings.Advanced.EraserBindTouchMultiplier && Settings.Advanced.IsSpecialScreen)
+ eraserMultiplier = 1 / Settings.Advanced.TouchMultiplier;
+ if (boundsWidth > BoundsWidth) {
+ isLastTouchEraser = true;
+ if (drawingShapeMode == 0 && forceEraser) return;
+ if (boundsWidth > BoundsWidth * 2.5) {
+ double k = 1;
+ switch (Settings.Canvas.EraserSize) {
+ case 0:
+ k = 0.5;
+ break;
+ case 1:
+ k = 0.8;
+ break;
+ case 3:
+ k = 1.25;
+ break;
+ case 4:
+ k = 1.8;
+ break;
+ }
+
+ inkCanvas.EraserShape = new EllipseStylusShape(boundsWidth * k * eraserMultiplier,
+ boundsWidth * k * eraserMultiplier);
+ inkCanvas.EditingMode = InkCanvasEditingMode.EraseByPoint;
}
else {
- inkCanvas.EraserShape = new EllipseStylusShape(5, 5);
- inkCanvas.EditingMode = InkCanvasEditingMode.EraseByStroke;
+ if (StackPanelPPTControls.Visibility == Visibility.Visible && inkCanvas.Strokes.Count == 0 &&
+ Settings.PowerPointSettings.IsEnableFingerGestureSlideShowControl) {
+ isLastTouchEraser = false;
+ inkCanvas.EditingMode = InkCanvasEditingMode.GestureOnly;
+ inkCanvas.Opacity = 0.1;
+ }
+ else {
+ inkCanvas.EraserShape = new EllipseStylusShape(5, 5);
+ inkCanvas.EditingMode = InkCanvasEditingMode.EraseByStroke;
+ }
}
}
- }
- else {
- isLastTouchEraser = false;
- inkCanvas.EraserShape =
- forcePointEraser ? new EllipseStylusShape(50, 50) : new EllipseStylusShape(5, 5);
- if (forceEraser) return;
- inkCanvas.EditingMode = InkCanvasEditingMode.Ink;
+ else {
+ isLastTouchEraser = false;
+ inkCanvas.EraserShape =
+ forcePointEraser ? new EllipseStylusShape(50, 50) : new EllipseStylusShape(5, 5);
+ if (forceEraser) return;
+ inkCanvas.EditingMode = InkCanvasEditingMode.Ink;
+ }
}
}
@@ -318,8 +374,7 @@ namespace Ink_Canvas {
inkCanvas.EditingMode = InkCanvasEditingMode.Ink;
}
- // -- removed --
- //
+
//private void inkCanvas_ManipulationStarted(object sender, ManipulationStartedEventArgs e)
//{
// if (isInMultiTouchMode || !Settings.Gesture.IsEnableTwoFingerGesture || inkCanvas.Strokes.Count == 0 || dec.Count() < 2) return;
diff --git a/InkCanvasForClass/Resources/Settings.cs b/InkCanvasForClass/Resources/Settings.cs
index 0320d0a..ee02280 100644
--- a/InkCanvasForClass/Resources/Settings.cs
+++ b/InkCanvasForClass/Resources/Settings.cs
@@ -81,6 +81,18 @@ namespace Ink_Canvas
public bool IsEnableTwoFingerRotation { get; set; } = false;
[JsonProperty("isEnableTwoFingerRotationOnSelection")]
public bool IsEnableTwoFingerRotationOnSelection { get; set; } = false;
+ [JsonProperty("disableGestureEraser")]
+ public bool DisableGestureEraser { get; set; } = true;
+ [JsonProperty("defaultMultiPointHandWritingMode")]
+ public int DefaultMultiPointHandWritingMode { get; set; } = 2;
+ [JsonProperty("hideCursorWhenUsingTouchDevice")]
+ public bool HideCursorWhenUsingTouchDevice { get; set; } = true;
+ [JsonProperty("enableMouseGesture")]
+ public bool EnableMouseGesture { get; set; } = true;
+ [JsonProperty("enableMouseRightBtnGesture")]
+ public bool EnableMouseRightBtnGesture { get; set; } = true;
+ [JsonProperty("enableMouseWheelGesture")]
+ public bool EnableMouseWheelGesture { get; set; } = true;
}
public class Startup
diff --git a/InkCanvasForClassX/InkCanvasForClassX.csproj.user b/InkCanvasForClassX/InkCanvasForClassX.csproj.user
new file mode 100644
index 0000000..4fdbee1
--- /dev/null
+++ b/InkCanvasForClassX/InkCanvasForClassX.csproj.user
@@ -0,0 +1,14 @@
+
+
+
+
+
+ Code
+
+
+
+
+ Designer
+
+
+
\ No newline at end of file
diff --git a/InkCanvasForClassX/Libraries/InkCanvas.xaml b/InkCanvasForClassX/Libraries/InkCanvas.xaml
new file mode 100644
index 0000000..7316ab7
--- /dev/null
+++ b/InkCanvasForClassX/Libraries/InkCanvas.xaml
@@ -0,0 +1,12 @@
+
+
+
+
+
diff --git a/InkCanvasForClassX/Libraries/InkCanvas.xaml.cs b/InkCanvasForClassX/Libraries/InkCanvas.xaml.cs
new file mode 100644
index 0000000..77ec5da
--- /dev/null
+++ b/InkCanvasForClassX/Libraries/InkCanvas.xaml.cs
@@ -0,0 +1,68 @@
+using System;
+using System.Collections.Generic;
+using System.Diagnostics;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using System.Windows;
+using System.Windows.Controls;
+using System.Windows.Data;
+using System.Windows.Documents;
+using System.Windows.Ink;
+using System.Windows.Input;
+using System.Windows.Media;
+using System.Windows.Media.Imaging;
+using System.Windows.Navigation;
+using System.Windows.Shapes;
+
+namespace InkCanvasForClassX.Libraries
+{
+ public partial class InkCanvas : UserControl
+ {
+
+ public static readonly DependencyProperty InkStrokesProperty =
+ DependencyProperty.Register(
+ name: "InkStrokes",
+ propertyType: typeof(StrokeCollection),
+ ownerType: typeof(InkCanvas),
+ typeMetadata: new FrameworkPropertyMetadata(
+ defaultValue: new StrokeCollection(),
+ propertyChangedCallback: new PropertyChangedCallback(OnInkStrokesChanged))
+ );
+
+ public StrokeCollection InkStrokes {
+ get => (StrokeCollection)GetValue(InkStrokesProperty);
+ set {
+ Trace.WriteLine("Set InkStrokes");
+ SetValue(InkStrokesProperty, value);
+ }
+ }
+
+ private static void OnInkStrokesChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
+ {
+ Trace.WriteLine("Update");
+ var control = (InkCanvas)d;
+ if (e.OldValue is StrokeCollection oldStrokes) {
+ oldStrokes.StrokesChanged -= control.OnStrokesChanged;
+ }
+
+ if (e.NewValue is StrokeCollection newStrokes) {
+ newStrokes.StrokesChanged += control.OnStrokesChanged;
+ control.inkProjector.Strokes = newStrokes;
+ }
+ }
+ private void OnStrokesChanged(object sender, StrokeCollectionChangedEventArgs e)
+ {
+ Trace.WriteLine("Strokes Collection Changed");
+ // Ensure that the InkStrokes dependency property updates
+ SetValue(InkStrokesProperty, sender as StrokeCollection);
+ inkProjector.Strokes = sender as StrokeCollection;
+ }
+
+ public InkCanvas()
+ {
+ InitializeComponent();
+ InkStrokes.StrokesChanged += OnStrokesChanged;
+ }
+ }
+}
diff --git a/InkCanvasForClassX/MainWindow.xaml b/InkCanvasForClassX/MainWindow.xaml
index e02e873..46c516b 100644
--- a/InkCanvasForClassX/MainWindow.xaml
+++ b/InkCanvasForClassX/MainWindow.xaml
@@ -8,7 +8,8 @@
mc:Ignorable="d"
Title="MainWindow" Height="1300" Width="1300">
-
+
+
diff --git a/InkCanvasForClassX/MainWindow.xaml.cs b/InkCanvasForClassX/MainWindow.xaml.cs
index 266215d..3c1f287 100644
--- a/InkCanvasForClassX/MainWindow.xaml.cs
+++ b/InkCanvasForClassX/MainWindow.xaml.cs
@@ -51,38 +51,38 @@ namespace InkCanvasForClassX
{
InitializeComponent();
InkC.StrokeCollected += (object sender, InkCanvasStrokeCollectedEventArgs e) => {
- InkP.Strokes = InkC.Strokes;
- var stylusPtsList = new List();
- foreach (var strokeStylusPoint in e.Stroke.StylusPoints) {
- stylusPtsList.Add(new PerfectFreehandJint.StylusPointLite()
- {
- x = Math.Round(strokeStylusPoint.X,2) ,
- y = Math.Round(strokeStylusPoint.Y,2),
- pressure = strokeStylusPoint.PressureFactor,
- });
- }
- var aaa = new PerfectFreehandJint();
- var ccc = aaa.GetSVGPathStroke(stylusPtsList.ToArray(), new PerfectFreehandJint.StrokeOptions() {
- size = 16,
- thinning = 0.5,
- smoothing = 0.5,
- streamline = 0.5,
- simulatePressure = true,
- easing = (t)=>t,
- last = true,
- start = new PerfectFreehandJint.StrokeCapOptions() {
- cap = true,
- taper = 0,
- easing = (t)=>t,
- },
- end = new PerfectFreehandJint.StrokeCapOptions()
- {
- cap = true,
- taper = 0,
- easing = (t) => t,
- },
- });
- Trace.WriteLine(ccc);
+ inkCanvas.InkStrokes = InkC.Strokes;
+ //var stylusPtsList = new List();
+ //foreach (var strokeStylusPoint in e.Stroke.StylusPoints) {
+ // stylusPtsList.Add(new PerfectFreehandJint.StylusPointLite()
+ // {
+ // x = Math.Round(strokeStylusPoint.X,2) ,
+ // y = Math.Round(strokeStylusPoint.Y,2),
+ // pressure = strokeStylusPoint.PressureFactor,
+ // });
+ //}
+ //var aaa = new PerfectFreehandJint();
+ //var ccc = aaa.GetSVGPathStroke(stylusPtsList.ToArray(), new PerfectFreehandJint.StrokeOptions() {
+ // size = 16,
+ // thinning = 0.5,
+ // smoothing = 0.5,
+ // streamline = 0.5,
+ // simulatePressure = true,
+ // easing = (t)=>t,
+ // last = true,
+ // start = new PerfectFreehandJint.StrokeCapOptions() {
+ // cap = true,
+ // taper = 0,
+ // easing = (t)=>t,
+ // },
+ // end = new PerfectFreehandJint.StrokeCapOptions()
+ // {
+ // cap = true,
+ // taper = 0,
+ // easing = (t) => t,
+ // },
+ //});
+ //Trace.WriteLine(ccc);
};
InkC.MouseRightButtonDown += Inkcanv_MouseRightButtonDown;
@@ -135,7 +135,7 @@ namespace InkCanvasForClassX
{
stroke.Transform(new Matrix(1, 0, 0, 1, delta.X, delta.Y), false);
}
- InkP.Strokes = InkC.Strokes;
+ inkCanvas.InkStrokes = InkC.Strokes;
startPoint = currentPoint;
}