[update] 设置界面更新,还需要继续完善,其他一些小修复。背景面板下次commit再交吧

This commit is contained in:
Dubi906w 2024-07-11 21:59:31 +08:00
parent 870440a6a2
commit f9bf8db659
13 changed files with 3333 additions and 2292 deletions

File diff suppressed because one or more lines are too long

View File

@ -169,7 +169,7 @@ namespace Ink_Canvas {
//加载设置 //加载设置
LoadSettings(true); LoadSettings(true);
// HasNewUpdateWindow hasNewUpdateWindow = new HasNewUpdateWindow(); // HasNewUpdateWindow hasNewUpdateWindow = new HasNewUpdateWindow();
if (Environment.Is64BitProcess) GroupBoxInkRecognition.Visibility = Visibility.Collapsed; if (Environment.Is64BitProcess) SettingsInkRecognitionGroupBox.Visibility = Visibility.Collapsed;
ThemeManager.Current.ApplicationTheme = ApplicationTheme.Light; ThemeManager.Current.ApplicationTheme = ApplicationTheme.Light;
SystemEvents_UserPreferenceChanged(null, null); SystemEvents_UserPreferenceChanged(null, null);

View File

@ -282,14 +282,14 @@ namespace Ink_Canvas {
AnimationsHelper.HideWithSlideAndFade(BoardBorderRightPageListView); AnimationsHelper.HideWithSlideAndFade(BoardBorderRightPageListView);
if (BorderSettings.Visibility == Visibility.Visible) { if (BorderSettings.Visibility == Visibility.Visible) {
BorderSettingsMask.IsHitTestVisible = false; SettingsOverlay.IsHitTestVisible = false;
BorderSettingsMask.Background = null; SettingsOverlay.Background = null;
var sb = new Storyboard(); var sb = new Storyboard();
// 滑动动画 // 滑动动画
var slideAnimation = new DoubleAnimation { var slideAnimation = new DoubleAnimation {
From = 0, // 滑动距离 From = 0, // 滑动距离
To = BorderSettings.RenderTransform.Value.OffsetX - 440, To = BorderSettings.RenderTransform.Value.OffsetX - 490,
Duration = TimeSpan.FromSeconds(0.6) Duration = TimeSpan.FromSeconds(0.6)
}; };
slideAnimation.EasingFunction = new CubicEase() { EasingMode = EasingMode.EaseOut }; slideAnimation.EasingFunction = new CubicEase() { EasingMode = EasingMode.EaseOut };
@ -1575,14 +1575,14 @@ namespace Ink_Canvas {
HideSubPanels(); HideSubPanels();
} }
else { else {
BorderSettingsMask.IsHitTestVisible = true; SettingsOverlay.IsHitTestVisible = true;
BorderSettingsMask.Background = new SolidColorBrush(Color.FromArgb(1, 0, 0, 0)); SettingsOverlay.Background = new SolidColorBrush(Color.FromArgb(1, 0, 0, 0));
SettingsPanelScrollViewer.ScrollToTop(); SettingsPanelScrollViewer.ScrollToTop();
var sb = new Storyboard(); var sb = new Storyboard();
// 滑动动画 // 滑动动画
var slideAnimation = new DoubleAnimation { var slideAnimation = new DoubleAnimation {
From = BorderSettings.RenderTransform.Value.OffsetX - 440, // 滑动距离 From = BorderSettings.RenderTransform.Value.OffsetX - 490, // 滑动距离
To = 0, To = 0,
Duration = TimeSpan.FromSeconds(0.6) Duration = TimeSpan.FromSeconds(0.6)
}; };

View File

@ -219,8 +219,27 @@ namespace Ink_Canvas {
if (!isLoaded) return; if (!isLoaded) return;
Settings.Appearance.EnableViewboxBlackBoardScaleTransform = Settings.Appearance.EnableViewboxBlackBoardScaleTransform =
ToggleSwitchEnableViewboxBlackBoardScaleTransform.IsOn; 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(); SaveSettingsToFile();
LoadSettings();
} }
public void ComboBoxFloatingBarImg_SelectionChanged(object sender, RoutedEventArgs e) { public void ComboBoxFloatingBarImg_SelectionChanged(object sender, RoutedEventArgs e) {
@ -277,7 +296,6 @@ namespace Ink_Canvas {
} }
SaveSettingsToFile(); SaveSettingsToFile();
LoadSettings();
} }
private void ToggleSwitchEnableChickenSoupInWhiteboardMode_Toggled(object sender, RoutedEventArgs e) { private void ToggleSwitchEnableChickenSoupInWhiteboardMode_Toggled(object sender, RoutedEventArgs e) {
@ -292,7 +310,6 @@ namespace Ink_Canvas {
} }
SaveSettingsToFile(); SaveSettingsToFile();
LoadSettings();
} }
//[Obsolete] //[Obsolete]
@ -1014,11 +1031,11 @@ namespace Ink_Canvas {
Settings.Automation.IsAutoFoldInPPTSlideShow = ToggleSwitchAutoFoldInPPTSlideShow.IsOn; Settings.Automation.IsAutoFoldInPPTSlideShow = ToggleSwitchAutoFoldInPPTSlideShow.IsOn;
if (Settings.Automation.IsAutoFoldInPPTSlideShow) if (Settings.Automation.IsAutoFoldInPPTSlideShow)
{ {
SettingsPPTInkingAndAutoFoldExplictBorder.Visibility = Visibility.Visible; SettingsPPTInkingAndAutoFoldExplictBorder.IsOpen = true;
SettingsShowCanvasAtNewSlideShowStackPanel.Opacity = 0.5; SettingsShowCanvasAtNewSlideShowStackPanel.Opacity = 0.5;
SettingsShowCanvasAtNewSlideShowStackPanel.IsHitTestVisible = false; SettingsShowCanvasAtNewSlideShowStackPanel.IsHitTestVisible = false;
} else { } else {
SettingsPPTInkingAndAutoFoldExplictBorder.Visibility = Visibility.Collapsed; SettingsPPTInkingAndAutoFoldExplictBorder.IsOpen = false;
SettingsShowCanvasAtNewSlideShowStackPanel.Opacity = 1; SettingsShowCanvasAtNewSlideShowStackPanel.Opacity = 1;
SettingsShowCanvasAtNewSlideShowStackPanel.IsHitTestVisible = true; SettingsShowCanvasAtNewSlideShowStackPanel.IsHitTestVisible = true;
} }
@ -1343,6 +1360,54 @@ namespace Ink_Canvas {
SaveSettingsToFile(); 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 #endregion
#region Reset #region Reset
@ -1451,6 +1516,12 @@ namespace Ink_Canvas {
Settings.Gesture.IsEnableTwoFingerZoom = false; Settings.Gesture.IsEnableTwoFingerZoom = false;
Settings.Gesture.IsEnableTwoFingerRotation = false; Settings.Gesture.IsEnableTwoFingerRotation = false;
Settings.Gesture.IsEnableTwoFingerRotationOnSelection = 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.IsInkToShapeEnabled = true;
Settings.InkToShape.IsInkToShapeNoFakePressureRectangle = false; Settings.InkToShape.IsInkToShapeNoFakePressureRectangle = false;
@ -1648,6 +1719,13 @@ namespace Ink_Canvas {
SaveSettingsToFile(); SaveSettingsToFile();
} }
private void ToggleSwitchEnsureFloatingBarVisibleInScreen_Toggled(object sender, RoutedEventArgs e) {
if (!isLoaded) return;
Settings.Advanced.IsEnableDPIChangeDetection = ToggleSwitchEnsureFloatingBarVisibleInScreen.IsOn;
Settings.Advanced.IsEnableResolutionChangeDetection = ToggleSwitchEnsureFloatingBarVisibleInScreen.IsOn;
SaveSettingsToFile();
}
#endregion #endregion
#region RandSettings #region RandSettings
@ -1674,6 +1752,179 @@ namespace Ink_Canvas {
#endregion #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() { public static void SaveSettingsToFile() {
var text = JsonConvert.SerializeObject(Settings, Formatting.Indented); var text = JsonConvert.SerializeObject(Settings, Formatting.Indented);
try { try {

View File

@ -3,6 +3,7 @@ using Ink_Canvas.Helpers;
using Newtonsoft.Json; using Newtonsoft.Json;
using OSVersionExtension; using OSVersionExtension;
using System; using System;
using System.Diagnostics;
using System.Reflection; using System.Reflection;
using System.Windows; using System.Windows;
using System.Windows.Controls; using System.Windows.Controls;
@ -180,21 +181,21 @@ namespace Ink_Canvas {
if (Settings.Appearance.EnableViewboxBlackBoardScaleTransform) // 画板 UI 缩放 80% if (Settings.Appearance.EnableViewboxBlackBoardScaleTransform) // 画板 UI 缩放 80%
{ {
//ViewboxBlackboardLeftSideScaleTransform.ScaleX = 0.8; ViewboxBlackboardLeftSideScaleTransform.ScaleX = 0.8;
//ViewboxBlackboardLeftSideScaleTransform.ScaleY = 0.8; ViewboxBlackboardLeftSideScaleTransform.ScaleY = 0.8;
ViewboxBlackboardCenterSideScaleTransform.ScaleX = 0.8; ViewboxBlackboardCenterSideScaleTransform.ScaleX = 0.8;
ViewboxBlackboardCenterSideScaleTransform.ScaleY = 0.8; ViewboxBlackboardCenterSideScaleTransform.ScaleY = 0.8;
//ViewboxBlackboardRightSideScaleTransform.ScaleX = 0.8; ViewboxBlackboardRightSideScaleTransform.ScaleX = 0.8;
//ViewboxBlackboardRightSideScaleTransform.ScaleY = 0.8; ViewboxBlackboardRightSideScaleTransform.ScaleY = 0.8;
ToggleSwitchEnableViewboxBlackBoardScaleTransform.IsOn = true; ToggleSwitchEnableViewboxBlackBoardScaleTransform.IsOn = true;
} else { } else {
//ViewboxBlackboardLeftSideScaleTransform.ScaleX = 1; ViewboxBlackboardLeftSideScaleTransform.ScaleX = 1;
//ViewboxBlackboardLeftSideScaleTransform.ScaleY = 1; ViewboxBlackboardLeftSideScaleTransform.ScaleY = 1;
ViewboxBlackboardCenterSideScaleTransform.ScaleX = 1; ViewboxBlackboardCenterSideScaleTransform.ScaleX = 1;
ViewboxBlackboardCenterSideScaleTransform.ScaleY = 1; ViewboxBlackboardCenterSideScaleTransform.ScaleY = 1;
//ViewboxBlackboardRightSideScaleTransform.ScaleX = 1; ViewboxBlackboardRightSideScaleTransform.ScaleX = 1;
//ViewboxBlackboardRightSideScaleTransform.ScaleY = 1; ViewboxBlackboardRightSideScaleTransform.ScaleY = 1;
ToggleSwitchEnableViewboxBlackBoardScaleTransform.IsOn = false; ToggleSwitchEnableViewboxBlackBoardScaleTransform.IsOn = false;
} }
@ -383,20 +384,42 @@ namespace Ink_Canvas {
ToggleSwitchEnableTwoFingerRotationOnSelection.IsOn = ToggleSwitchEnableTwoFingerRotationOnSelection.IsOn =
Settings.Gesture.IsEnableTwoFingerRotationOnSelection; Settings.Gesture.IsEnableTwoFingerRotationOnSelection;
if (Settings.Gesture.AutoSwitchTwoFingerGesture) { //if (Settings.Gesture.AutoSwitchTwoFingerGesture) {
if (Topmost) { // if (Topmost) {
ToggleSwitchEnableTwoFingerTranslate.IsOn = false; // ToggleSwitchEnableTwoFingerTranslate.IsOn = false;
BoardToggleSwitchEnableTwoFingerTranslate.IsOn = false; // BoardToggleSwitchEnableTwoFingerTranslate.IsOn = false;
Settings.Gesture.IsEnableTwoFingerTranslate = false; // Settings.Gesture.IsEnableTwoFingerTranslate = false;
if (!isInMultiTouchMode) ToggleSwitchEnableMultiTouchMode.IsOn = true; // if (!isInMultiTouchMode) ToggleSwitchEnableMultiTouchMode.IsOn = true;
} else { // } else {
ToggleSwitchEnableTwoFingerTranslate.IsOn = true; // ToggleSwitchEnableTwoFingerTranslate.IsOn = true;
BoardToggleSwitchEnableTwoFingerTranslate.IsOn = true; // BoardToggleSwitchEnableTwoFingerTranslate.IsOn = true;
Settings.Gesture.IsEnableTwoFingerTranslate = true; // Settings.Gesture.IsEnableTwoFingerTranslate = true;
if (isInMultiTouchMode) ToggleSwitchEnableMultiTouchMode.IsOn = false; // 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(); CheckEnableTwoFingerGestureBtnColorPrompt();
} else { } else {
Settings.Gesture = new Gesture(); Settings.Gesture = new Gesture();
@ -539,6 +562,9 @@ namespace Ink_Canvas {
ToggleSwitchIsEnableResolutionChangeDetection.IsOn = ToggleSwitchIsEnableResolutionChangeDetection.IsOn =
Settings.Advanced.IsEnableResolutionChangeDetection; Settings.Advanced.IsEnableResolutionChangeDetection;
ToggleSwitchEnsureFloatingBarVisibleInScreen.IsOn = Settings.Advanced.IsEnableDPIChangeDetection &&
Settings.Advanced.IsEnableResolutionChangeDetection;
} else { } else {
Settings.Advanced = new Advanced(); Settings.Advanced = new Advanced();
} }
@ -607,9 +633,9 @@ namespace Ink_Canvas {
ToggleSwitchAutoFoldInMaxHubWhiteboard.IsOn = Settings.Automation.IsAutoFoldInMaxHubWhiteboard; ToggleSwitchAutoFoldInMaxHubWhiteboard.IsOn = Settings.Automation.IsAutoFoldInMaxHubWhiteboard;
SettingsPPTInkingAndAutoFoldExplictBorder.Visibility = Visibility.Collapsed; SettingsPPTInkingAndAutoFoldExplictBorder.IsOpen = false;
if (Settings.Automation.IsAutoFoldInPPTSlideShow) { if (Settings.Automation.IsAutoFoldInPPTSlideShow) {
SettingsPPTInkingAndAutoFoldExplictBorder.Visibility = Visibility.Visible; SettingsPPTInkingAndAutoFoldExplictBorder.IsOpen = true;
SettingsShowCanvasAtNewSlideShowStackPanel.Opacity = 0.5; SettingsShowCanvasAtNewSlideShowStackPanel.Opacity = 0.5;
SettingsShowCanvasAtNewSlideShowStackPanel.IsHitTestVisible = false; SettingsShowCanvasAtNewSlideShowStackPanel.IsHitTestVisible = false;
} }

View File

@ -1604,13 +1604,5 @@ namespace Ink_Canvas {
return false; return false;
return true; 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();
}
}
} }
} }

View File

@ -1,6 +1,7 @@
using Ink_Canvas.Helpers; using Ink_Canvas.Helpers;
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Diagnostics;
using System.Linq; using System.Linq;
using System.Threading.Tasks; using System.Threading.Tasks;
using System.Windows; using System.Windows;
@ -40,6 +41,12 @@ namespace Ink_Canvas {
} }
private void MainWindow_TouchDown(object sender, TouchEventArgs e) { 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 if (inkCanvas.EditingMode == InkCanvasEditingMode.EraseByPoint
|| inkCanvas.EditingMode == InkCanvasEditingMode.EraseByStroke || inkCanvas.EditingMode == InkCanvasEditingMode.EraseByStroke
|| inkCanvas.EditingMode == InkCanvasEditingMode.Select) return; || inkCanvas.EditingMode == InkCanvasEditingMode.Select) return;
@ -49,42 +56,52 @@ namespace Ink_Canvas {
HideSubPanels(); // 书写时自动隐藏二级菜单 HideSubPanels(); // 书写时自动隐藏二级菜单
} }
double boundWidth = e.GetTouchPoint(null).Bounds.Width, eraserMultiplier = 1.0; // 不禁用手势橡皮
if (!Settings.Advanced.EraserBindTouchMultiplier && Settings.Advanced.IsSpecialScreen) if (!Settings.Gesture.DisableGestureEraser) {
eraserMultiplier = 1 / Settings.Advanced.TouchMultiplier; 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 时禁用橡皮 if ((Settings.Advanced.TouchMultiplier != 0 || !Settings.Advanced.IsSpecialScreen) //启用特殊屏幕且触摸倍数为 0 时禁用橡皮
&& boundWidth > BoundsWidth * 2.5) { && boundWidth > BoundsWidth * 2.5) {
if (drawingShapeMode == 0 && forceEraser) return; if (drawingShapeMode == 0 && forceEraser) return;
double k = 1; double k = 1;
switch (Settings.Canvas.EraserSize) { switch (Settings.Canvas.EraserSize) {
case 0: case 0:
k = 0.5; k = 0.5;
break; break;
case 1: case 1:
k = 0.8; k = 0.8;
break; break;
case 3: case 3:
k = 1.25; k = 1.25;
break; break;
case 4: case 4:
k = 1.8; k = 1.8;
break; 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) { 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(); inkCanvas.CaptureStylus();
ViewboxFloatingBar.IsHitTestVisible = false; ViewboxFloatingBar.IsHitTestVisible = false;
BlackboardUIGridForInkReplay.IsHitTestVisible = false; BlackboardUIGridForInkReplay.IsHitTestVisible = false;
@ -97,16 +114,18 @@ namespace Ink_Canvas {
} }
private async void MainWindow_StylusUp(object sender, StylusEventArgs e) { private async void MainWindow_StylusUp(object sender, StylusEventArgs e) {
try { if (e.StylusDevice.TabletDevice.Type == TabletDeviceType.Touch) {
inkCanvas.Strokes.Add(GetStrokeVisual(e.StylusDevice.Id).Stroke); try {
await Task.Delay(5); // 避免渲染墨迹完成前预览墨迹被删除导致墨迹闪烁 inkCanvas.Strokes.Add(GetStrokeVisual(e.StylusDevice.Id).Stroke);
inkCanvas.Children.Remove(GetVisualCanvas(e.StylusDevice.Id)); await Task.Delay(5); // 避免渲染墨迹完成前预览墨迹被删除导致墨迹闪烁
inkCanvas.Children.Remove(GetVisualCanvas(e.StylusDevice.Id));
inkCanvas_StrokeCollected(inkCanvas, inkCanvas_StrokeCollected(inkCanvas,
new InkCanvasStrokeCollectedEventArgs(GetStrokeVisual(e.StylusDevice.Id).Stroke)); new InkCanvasStrokeCollectedEventArgs(GetStrokeVisual(e.StylusDevice.Id).Stroke));
} }
catch (Exception ex) { catch (Exception ex) {
Label.Content = ex.ToString(); Label.Content = ex.ToString();
}
} }
try { try {
@ -128,6 +147,15 @@ namespace Ink_Canvas {
} }
private void MainWindow_StylusMove(object sender, StylusEventArgs e) { 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 { try {
if (GetTouchDownPointsList(e.StylusDevice.Id) != InkCanvasEditingMode.None) return; if (GetTouchDownPointsList(e.StylusDevice.Id) != InkCanvasEditingMode.None) return;
try { try {
@ -173,6 +201,25 @@ namespace Ink_Canvas {
#endregion #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; private int lastTouchDownTime = 0, lastTouchUpTime = 0;
@ -182,6 +229,12 @@ namespace Ink_Canvas {
private void Main_Grid_TouchDown(object sender, TouchEventArgs e) { 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); inkCanvas.CaptureTouch(e.TouchDevice);
ViewboxFloatingBar.IsHitTestVisible = false; ViewboxFloatingBar.IsHitTestVisible = false;
BlackboardUIGridForInkReplay.IsHitTestVisible = false; BlackboardUIGridForInkReplay.IsHitTestVisible = false;
@ -194,52 +247,55 @@ namespace Ink_Canvas {
if (NeedUpdateIniP()) iniP = e.GetTouchPoint(inkCanvas).Position; if (NeedUpdateIniP()) iniP = e.GetTouchPoint(inkCanvas).Position;
if (drawingShapeMode == 9 && isFirstTouchCuboid == false) MouseTouchMove(iniP); if (drawingShapeMode == 9 && isFirstTouchCuboid == false) MouseTouchMove(iniP);
inkCanvas.Opacity = 1; 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, if (!Settings.Gesture.DisableGestureEraser) {
boundsWidth * k * eraserMultiplier); double boundsWidth = GetTouchBoundWidth(e), eraserMultiplier = 1.0;
inkCanvas.EditingMode = InkCanvasEditingMode.EraseByPoint; if (!Settings.Advanced.EraserBindTouchMultiplier && Settings.Advanced.IsSpecialScreen)
} eraserMultiplier = 1 / Settings.Advanced.TouchMultiplier;
else { if (boundsWidth > BoundsWidth) {
if (StackPanelPPTControls.Visibility == Visibility.Visible && inkCanvas.Strokes.Count == 0 && isLastTouchEraser = true;
Settings.PowerPointSettings.IsEnableFingerGestureSlideShowControl) { if (drawingShapeMode == 0 && forceEraser) return;
isLastTouchEraser = false; if (boundsWidth > BoundsWidth * 2.5) {
inkCanvas.EditingMode = InkCanvasEditingMode.GestureOnly; double k = 1;
inkCanvas.Opacity = 0.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 { else {
inkCanvas.EraserShape = new EllipseStylusShape(5, 5); if (StackPanelPPTControls.Visibility == Visibility.Visible && inkCanvas.Strokes.Count == 0 &&
inkCanvas.EditingMode = InkCanvasEditingMode.EraseByStroke; 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 {
else { isLastTouchEraser = false;
isLastTouchEraser = false; inkCanvas.EraserShape =
inkCanvas.EraserShape = forcePointEraser ? new EllipseStylusShape(50, 50) : new EllipseStylusShape(5, 5);
forcePointEraser ? new EllipseStylusShape(50, 50) : new EllipseStylusShape(5, 5); if (forceEraser) return;
if (forceEraser) return; inkCanvas.EditingMode = InkCanvasEditingMode.Ink;
inkCanvas.EditingMode = InkCanvasEditingMode.Ink; }
} }
} }
@ -318,8 +374,7 @@ namespace Ink_Canvas {
inkCanvas.EditingMode = InkCanvasEditingMode.Ink; inkCanvas.EditingMode = InkCanvasEditingMode.Ink;
} }
// -- removed --
//
//private void inkCanvas_ManipulationStarted(object sender, ManipulationStartedEventArgs e) //private void inkCanvas_ManipulationStarted(object sender, ManipulationStartedEventArgs e)
//{ //{
// if (isInMultiTouchMode || !Settings.Gesture.IsEnableTwoFingerGesture || inkCanvas.Strokes.Count == 0 || dec.Count() < 2) return; // if (isInMultiTouchMode || !Settings.Gesture.IsEnableTwoFingerGesture || inkCanvas.Strokes.Count == 0 || dec.Count() < 2) return;

View File

@ -81,6 +81,18 @@ namespace Ink_Canvas
public bool IsEnableTwoFingerRotation { get; set; } = false; public bool IsEnableTwoFingerRotation { get; set; } = false;
[JsonProperty("isEnableTwoFingerRotationOnSelection")] [JsonProperty("isEnableTwoFingerRotationOnSelection")]
public bool IsEnableTwoFingerRotationOnSelection { get; set; } = false; 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 public class Startup

View File

@ -0,0 +1,14 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="Current" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup />
<ItemGroup>
<Compile Update="Libraries\InkCanvas.xaml.cs">
<SubType>Code</SubType>
</Compile>
</ItemGroup>
<ItemGroup>
<Page Update="Libraries\InkCanvas.xaml">
<SubType>Designer</SubType>
</Page>
</ItemGroup>
</Project>

View File

@ -0,0 +1,12 @@
<UserControl x:Class="InkCanvasForClassX.Libraries.InkCanvas"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:local="clr-namespace:InkCanvasForClassX.Libraries"
mc:Ignorable="d"
d:DesignHeight="450" d:DesignWidth="800">
<Grid Background="Red">
<local:InkProjector x:Name="inkProjector" Width="{Binding RelativeSource={RelativeSource AncestorType={x:Type UserControl}}, Path=ActualWidth}" Height="{Binding RelativeSource={RelativeSource AncestorType={x:Type UserControl}}, Path=ActualHeight}" Margin="0,0,0,0"/>
</Grid>
</UserControl>

View File

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

View File

@ -8,7 +8,8 @@
mc:Ignorable="d" mc:Ignorable="d"
Title="MainWindow" Height="1300" Width="1300"> Title="MainWindow" Height="1300" Width="1300">
<Grid> <Grid>
<libraries:InkProjector Width="600" Height="600" x:Name="InkP" Margin="0,0,0,600"/> <libraries:InkCanvas x:Name="inkCanvas" Width="600" Height="600" Margin="0,0,0,600"/>
<!--<libraries:InkCanvas InkStrokes="{Binding ElementName=InkC, Path=Strokes}" x:Name="inkCanvas" Width="600" Height="600" Margin="0,0,0,600"/>-->
<InkCanvas Height="600" Width="600" Name="InkC" Margin="0,600,0,0" Background="Wheat"></InkCanvas> <InkCanvas Height="600" Width="600" Name="InkC" Margin="0,600,0,0" Background="Wheat"></InkCanvas>
<StackPanel> <StackPanel>
<Button Click="ButtonBase1_OnClick">Change to None</Button> <Button Click="ButtonBase1_OnClick">Change to None</Button>

View File

@ -51,38 +51,38 @@ namespace InkCanvasForClassX
{ {
InitializeComponent(); InitializeComponent();
InkC.StrokeCollected += (object sender, InkCanvasStrokeCollectedEventArgs e) => { InkC.StrokeCollected += (object sender, InkCanvasStrokeCollectedEventArgs e) => {
InkP.Strokes = InkC.Strokes; inkCanvas.InkStrokes = InkC.Strokes;
var stylusPtsList = new List<PerfectFreehandJint.StylusPointLite>(); //var stylusPtsList = new List<PerfectFreehandJint.StylusPointLite>();
foreach (var strokeStylusPoint in e.Stroke.StylusPoints) { //foreach (var strokeStylusPoint in e.Stroke.StylusPoints) {
stylusPtsList.Add(new PerfectFreehandJint.StylusPointLite() // stylusPtsList.Add(new PerfectFreehandJint.StylusPointLite()
{ // {
x = Math.Round(strokeStylusPoint.X,2) , // x = Math.Round(strokeStylusPoint.X,2) ,
y = Math.Round(strokeStylusPoint.Y,2), // y = Math.Round(strokeStylusPoint.Y,2),
pressure = strokeStylusPoint.PressureFactor, // pressure = strokeStylusPoint.PressureFactor,
}); // });
} //}
var aaa = new PerfectFreehandJint(); //var aaa = new PerfectFreehandJint();
var ccc = aaa.GetSVGPathStroke(stylusPtsList.ToArray(), new PerfectFreehandJint.StrokeOptions() { //var ccc = aaa.GetSVGPathStroke(stylusPtsList.ToArray(), new PerfectFreehandJint.StrokeOptions() {
size = 16, // size = 16,
thinning = 0.5, // thinning = 0.5,
smoothing = 0.5, // smoothing = 0.5,
streamline = 0.5, // streamline = 0.5,
simulatePressure = true, // simulatePressure = true,
easing = (t)=>t, // easing = (t)=>t,
last = true, // last = true,
start = new PerfectFreehandJint.StrokeCapOptions() { // start = new PerfectFreehandJint.StrokeCapOptions() {
cap = true, // cap = true,
taper = 0, // taper = 0,
easing = (t)=>t, // easing = (t)=>t,
}, // },
end = new PerfectFreehandJint.StrokeCapOptions() // end = new PerfectFreehandJint.StrokeCapOptions()
{ // {
cap = true, // cap = true,
taper = 0, // taper = 0,
easing = (t) => t, // easing = (t) => t,
}, // },
}); //});
Trace.WriteLine(ccc); //Trace.WriteLine(ccc);
}; };
InkC.MouseRightButtonDown += Inkcanv_MouseRightButtonDown; InkC.MouseRightButtonDown += Inkcanv_MouseRightButtonDown;
@ -135,7 +135,7 @@ namespace InkCanvasForClassX
{ {
stroke.Transform(new Matrix(1, 0, 0, 1, delta.X, delta.Y), false); stroke.Transform(new Matrix(1, 0, 0, 1, delta.X, delta.Y), false);
} }
InkP.Strokes = InkC.Strokes; inkCanvas.InkStrokes = InkC.Strokes;
startPoint = currentPoint; startPoint = currentPoint;
} }