[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);
// 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);

View File

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

View File

@ -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 {

View File

@ -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;
//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 {
ToggleSwitchEnableTwoFingerTranslate.IsOn = true;
BoardToggleSwitchEnableTwoFingerTranslate.IsOn = true;
Settings.Gesture.IsEnableTwoFingerTranslate = true;
if (isInMultiTouchMode) ToggleSwitchEnableMultiTouchMode.IsOn = false;
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;
}

View File

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

View File

@ -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,6 +56,8 @@ namespace Ink_Canvas {
HideSubPanels(); // 书写时自动隐藏二级菜单
}
// 不禁用手势橡皮
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;
@ -83,8 +92,16 @@ namespace Ink_Canvas {
}
}
}
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,6 +114,7 @@ namespace Ink_Canvas {
}
private async void MainWindow_StylusUp(object sender, StylusEventArgs e) {
if (e.StylusDevice.TabletDevice.Type == TabletDeviceType.Touch) {
try {
inkCanvas.Strokes.Add(GetStrokeVisual(e.StylusDevice.Id).Stroke);
await Task.Delay(5); // 避免渲染墨迹完成前预览墨迹被删除导致墨迹闪烁
@ -108,6 +126,7 @@ namespace Ink_Canvas {
catch (Exception ex) {
Label.Content = ex.ToString();
}
}
try {
StrokeVisualList.Remove(e.StylusDevice.Id);
@ -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,6 +247,8 @@ namespace Ink_Canvas {
if (NeedUpdateIniP()) iniP = e.GetTouchPoint(inkCanvas).Position;
if (drawingShapeMode == 9 && isFirstTouchCuboid == false) MouseTouchMove(iniP);
inkCanvas.Opacity = 1;
if (!Settings.Gesture.DisableGestureEraser) {
double boundsWidth = GetTouchBoundWidth(e), eraserMultiplier = 1.0;
if (!Settings.Advanced.EraserBindTouchMultiplier && Settings.Advanced.IsSpecialScreen)
eraserMultiplier = 1 / Settings.Advanced.TouchMultiplier;
@ -242,6 +297,7 @@ namespace Ink_Canvas {
inkCanvas.EditingMode = InkCanvasEditingMode.Ink;
}
}
}
private double GetTouchBoundWidth(TouchEventArgs e) {
var args = e.GetTouchPoint(null).Bounds;
@ -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;

View File

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

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"
Title="MainWindow" Height="1300" Width="1300">
<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>
<StackPanel>
<Button Click="ButtonBase1_OnClick">Change to None</Button>

View File

@ -51,38 +51,38 @@ namespace InkCanvasForClassX
{
InitializeComponent();
InkC.StrokeCollected += (object sender, InkCanvasStrokeCollectedEventArgs e) => {
InkP.Strokes = InkC.Strokes;
var stylusPtsList = new List<PerfectFreehandJint.StylusPointLite>();
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<PerfectFreehandJint.StylusPointLite>();
//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;
}