diff --git a/Ink Canvas.sln b/Ink Canvas.sln index 4c84bc7..0bd8bf2 100644 --- a/Ink Canvas.sln +++ b/Ink Canvas.sln @@ -3,7 +3,7 @@ Microsoft Visual Studio Solution File, Format Version 12.00 # Visual Studio Version 17 VisualStudioVersion = 17.5.33530.505 MinimumVisualStudioVersion = 10.0.40219.1 -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Ink Canvas", "Ink Canvas\Ink Canvas.csproj", "{8D0EDFC7-F974-4571-BC49-6F3A6653FE81}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Ink Canvas", "Ink Canvas\Ink Canvas.csproj", "{8D0EDFC7-F974-4571-BC49-6F3A6653FE81}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution @@ -27,8 +27,8 @@ Global {8D0EDFC7-F974-4571-BC49-6F3A6653FE81}.Debug|ARM64.Build.0 = Debug|ARM64 {8D0EDFC7-F974-4571-BC49-6F3A6653FE81}.Debug|x64.ActiveCfg = Debug|x64 {8D0EDFC7-F974-4571-BC49-6F3A6653FE81}.Debug|x64.Build.0 = Debug|x64 - {8D0EDFC7-F974-4571-BC49-6F3A6653FE81}.Debug|x86.ActiveCfg = Debug|x86 - {8D0EDFC7-F974-4571-BC49-6F3A6653FE81}.Debug|x86.Build.0 = Debug|x86 + {8D0EDFC7-F974-4571-BC49-6F3A6653FE81}.Debug|x86.ActiveCfg = Debug|Any CPU + {8D0EDFC7-F974-4571-BC49-6F3A6653FE81}.Debug|x86.Build.0 = Debug|Any CPU {8D0EDFC7-F974-4571-BC49-6F3A6653FE81}.Release|Any CPU.ActiveCfg = Release|Any CPU {8D0EDFC7-F974-4571-BC49-6F3A6653FE81}.Release|Any CPU.Build.0 = Release|Any CPU {8D0EDFC7-F974-4571-BC49-6F3A6653FE81}.Release|ARM.ActiveCfg = Release|Any CPU diff --git a/Ink Canvas/Ink Canvas.csproj b/Ink Canvas/Ink Canvas.csproj index c0a0c2e..3194d64 100644 --- a/Ink Canvas/Ink Canvas.csproj +++ b/Ink Canvas/Ink Canvas.csproj @@ -24,14 +24,22 @@ false false true + Debug;Release;x86 Debug - full + none bin\$(Configuration)\ + True + + + none + bin\$(Configuration)\ + True - pdbonly + none bin\$(Configuration)\ + True icc.ico @@ -42,6 +50,12 @@ 7.3 true + + bin\$(Platform)\$(Configuration)\ + full + 7.3 + true + bin\$(Platform)\$(Configuration)\ pdbonly @@ -58,6 +72,7 @@ https://icc.bliemhax.com bundled False + AnyCPU bin\$(Platform)\$(Configuration)\ @@ -65,6 +80,12 @@ 7.3 true + + bin\$(Platform)\$(Configuration)\ + full + 7.3 + true + bin\$(Platform)\$(Configuration)\ pdbonly @@ -77,6 +98,12 @@ 7.3 true + + bin\$(Platform)\$(Configuration)\ + full + 7.3 + true + bin\$(Platform)\$(Configuration)\ pdbonly @@ -273,6 +300,11 @@ + + + + + @@ -293,6 +325,7 @@ + @@ -404,10 +437,18 @@ + + + + + + + + True diff --git a/Ink Canvas/MainWindow.xaml b/Ink Canvas/MainWindow.xaml index 8cecc89..947a721 100644 --- a/Ink Canvas/MainWindow.xaml +++ b/Ink Canvas/MainWindow.xaml @@ -910,9 +910,42 @@ - + + + + + - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -1002,12 +1035,12 @@ - + - + @@ -1574,14 +1607,14 @@ - - + - + - + - + @@ -1981,8 +2014,8 @@ - - + + @@ -1994,7 +2027,7 @@ - + - + - + - + - + - - - + + + + diff --git a/Ink Canvas/MainWindow_cs/MW_AutoFold.cs b/Ink Canvas/MainWindow_cs/MW_AutoFold.cs index 744d118..2317f87 100644 --- a/Ink Canvas/MainWindow_cs/MW_AutoFold.cs +++ b/Ink Canvas/MainWindow_cs/MW_AutoFold.cs @@ -10,6 +10,7 @@ namespace Ink_Canvas { bool isFloatingBarFolded = false, isFloatingBarChangingHideMode = false; private async void FoldFloatingBar_MouseUp(object sender, MouseButtonEventArgs e) { + FloatingBarIcons_MouseUp_New(sender); if (sender == null) { foldFloatingBarByUser = false; } else { diff --git a/Ink Canvas/MainWindow_cs/MW_FloatingBarIcons.cs b/Ink Canvas/MainWindow_cs/MW_FloatingBarIcons.cs index 0fcdccd..e351b8d 100644 --- a/Ink Canvas/MainWindow_cs/MW_FloatingBarIcons.cs +++ b/Ink Canvas/MainWindow_cs/MW_FloatingBarIcons.cs @@ -27,6 +27,7 @@ namespace Ink_Canvas { #region TwoFingZoomBtn private void TwoFingerGestureBorder_MouseUp(object sender, RoutedEventArgs e) { + FloatingBarIcons_MouseUp_New(sender); if (TwoFingerGestureBorder.Visibility == Visibility.Visible) { AnimationsHelper.HideWithSlideAndFade(TwoFingerGestureBorder); AnimationsHelper.HideWithSlideAndFade(BoardTwoFingerGestureBorder); @@ -374,6 +375,7 @@ namespace Ink_Canvas { bool Not_Enter_Blackboard_fir_Mouse_Click = true; bool isDisplayingOrHidingBlackboard = false; private void ImageBlackboard_MouseUp(object sender, MouseButtonEventArgs e) { + FloatingBarIcons_MouseUp_New(sender); if (isDisplayingOrHidingBlackboard) return; isDisplayingOrHidingBlackboard = true; @@ -593,6 +595,7 @@ namespace Ink_Canvas { } private void SymbolIconTools_MouseUp(object sender, MouseButtonEventArgs e) { + FloatingBarIcons_MouseUp_New(sender); if (BorderTools.Visibility == Visibility.Visible) { AnimationsHelper.HideWithSlideAndFade(BorderTools); AnimationsHelper.HideWithSlideAndFade(BoardBorderTools); diff --git a/Ink Canvas/MainWindow_cs/MW_Settings.cs b/Ink Canvas/MainWindow_cs/MW_Settings.cs index 9b63246..ed0b830 100644 --- a/Ink Canvas/MainWindow_cs/MW_Settings.cs +++ b/Ink Canvas/MainWindow_cs/MW_Settings.cs @@ -656,6 +656,12 @@ namespace Ink_Canvas { Settings.Gesture.IsEnableTwoFingerRotationOnSelection = false; Settings.InkToShape.IsInkToShapeEnabled = true; + Settings.InkToShape.IsInkToShapeNoFakePressureRectangle = false; + Settings.InkToShape.IsInkToShapeNoFakePressureTriangle = false; + Settings.InkToShape.IsInkToShapeTriangle = true; + Settings.InkToShape.IsInkToShapeRectangle = true; + Settings.InkToShape.IsInkToShapeRounded = true; + Settings.Startup.IsEnableNibMode = false; Settings.Startup.IsAutoUpdate = true; @@ -702,6 +708,41 @@ namespace Ink_Canvas { SaveSettingsToFile(); } + private void ToggleSwitchEnableInkToShapeNoFakePressureTriangle_Toggled(object sender, RoutedEventArgs e) + { + if (!isLoaded) return; + Settings.InkToShape.IsInkToShapeNoFakePressureTriangle = ToggleSwitchEnableInkToShapeNoFakePressureTriangle.IsOn; + SaveSettingsToFile(); + } + + private void ToggleSwitchEnableInkToShapeNoFakePressureRectangle_Toggled(object sender, RoutedEventArgs e) + { + if (!isLoaded) return; + Settings.InkToShape.IsInkToShapeNoFakePressureRectangle = ToggleSwitchEnableInkToShapeNoFakePressureRectangle.IsOn; + SaveSettingsToFile(); + } + + private void ToggleCheckboxEnableInkToShapeTriangle_CheckedChanged(object sender, RoutedEventArgs e) + { + if (!isLoaded) return; + Settings.InkToShape.IsInkToShapeTriangle = (bool)ToggleCheckboxEnableInkToShapeTriangle.IsChecked; + SaveSettingsToFile(); + } + + private void ToggleCheckboxEnableInkToShapeRectangle_CheckedChanged(object sender, RoutedEventArgs e) + { + if (!isLoaded) return; + Settings.InkToShape.IsInkToShapeRectangle = (bool)ToggleCheckboxEnableInkToShapeRectangle.IsChecked; + SaveSettingsToFile(); + } + + private void ToggleCheckboxEnableInkToShapeRounded_CheckedChanged(object sender, RoutedEventArgs e) + { + if (!isLoaded) return; + Settings.InkToShape.IsInkToShapeRounded = (bool)ToggleCheckboxEnableInkToShapeRounded.IsChecked; + SaveSettingsToFile(); + } + #endregion #region Advanced diff --git a/Ink Canvas/MainWindow_cs/MW_SettingsToLoad.cs b/Ink Canvas/MainWindow_cs/MW_SettingsToLoad.cs index 195b6fe..2d5e04d 100644 --- a/Ink Canvas/MainWindow_cs/MW_SettingsToLoad.cs +++ b/Ink Canvas/MainWindow_cs/MW_SettingsToLoad.cs @@ -370,6 +370,45 @@ namespace Ink_Canvas { } else { ToggleSwitchEnableInkToShape.IsOn = false; } + if (Settings.InkToShape.IsInkToShapeNoFakePressureRectangle) + { + ToggleSwitchEnableInkToShapeNoFakePressureRectangle.IsOn = true; + } + else + { + ToggleSwitchEnableInkToShapeNoFakePressureRectangle.IsOn = false; + } + if (Settings.InkToShape.IsInkToShapeNoFakePressureTriangle) + { + ToggleSwitchEnableInkToShapeNoFakePressureTriangle.IsOn = true; + } + else + { + ToggleSwitchEnableInkToShapeNoFakePressureTriangle.IsOn = false; + } + if (Settings.InkToShape.IsInkToShapeTriangle) + { + ToggleCheckboxEnableInkToShapeTriangle.IsChecked = true; + } else + { + ToggleCheckboxEnableInkToShapeTriangle.IsChecked= false; + } + if (Settings.InkToShape.IsInkToShapeRectangle) + { + ToggleCheckboxEnableInkToShapeRectangle.IsChecked = true; + } + else + { + ToggleCheckboxEnableInkToShapeRectangle.IsChecked = false; + } + if (Settings.InkToShape.IsInkToShapeRounded) + { + ToggleCheckboxEnableInkToShapeRounded.IsChecked = true; + } + else + { + ToggleCheckboxEnableInkToShapeRounded.IsChecked = false; + } } else { Settings.InkToShape = new InkToShape(); } diff --git a/Ink Canvas/MainWindow_cs/MW_SimulatePressure&InkToShape.cs b/Ink Canvas/MainWindow_cs/MW_SimulatePressure&InkToShape.cs index 8dfcb8e..a5bd82f 100644 --- a/Ink Canvas/MainWindow_cs/MW_SimulatePressure&InkToShape.cs +++ b/Ink Canvas/MainWindow_cs/MW_SimulatePressure&InkToShape.cs @@ -45,7 +45,7 @@ namespace Ink_Canvas { //Label.Visibility = Visibility.Visible; //Label.Content = circles.Count.ToString() + "\n" + newResult.InkDrawingNode.GetShapeName(); } - if (result.InkDrawingNode.GetShapeName() == "Circle") { + if (result.InkDrawingNode.GetShapeName() == "Circle" && Settings.InkToShape.IsInkToShapeRounded == true) { var shape = result.InkDrawingNode.GetShape(); if (shape.Width > 75) { foreach (Circle circle in circles) { @@ -94,7 +94,7 @@ namespace Ink_Canvas { _currentCommitType = CommitReason.UserInput; newStrokes = new StrokeCollection(); } - } else if (result.InkDrawingNode.GetShapeName().Contains("Ellipse")) { + } else if (result.InkDrawingNode.GetShapeName().Contains("Ellipse") && Settings.InkToShape.IsInkToShapeRounded == true) { var shape = result.InkDrawingNode.GetShape(); //var shape1 = result.InkDrawingNode.GetShape(); //shape1.Fill = Brushes.Gray; @@ -215,11 +215,12 @@ namespace Ink_Canvas { GridInkCanvasSelectionCover.Visibility = Visibility.Collapsed; newStrokes = new StrokeCollection(); } - } else if (result.InkDrawingNode.GetShapeName().Contains("Triangle")) { + } else if (result.InkDrawingNode.GetShapeName().Contains("Triangle") && Settings.InkToShape.IsInkToShapeTriangle==true) { var shape = result.InkDrawingNode.GetShape(); var p = result.InkDrawingNode.HotPoints; if ((Math.Max(Math.Max(p[0].X, p[1].X), p[2].X) - Math.Min(Math.Min(p[0].X, p[1].X), p[2].X) >= 100 || - Math.Max(Math.Max(p[0].Y, p[1].Y), p[2].Y) - Math.Min(Math.Min(p[0].Y, p[1].Y), p[2].Y) >= 100) && result.InkDrawingNode.HotPoints.Count == 3) { + Math.Max(Math.Max(p[0].Y, p[1].Y), p[2].Y) - Math.Min(Math.Min(p[0].Y, p[1].Y), p[2].Y) >= 100) && result.InkDrawingNode.HotPoints.Count == 3) + { //纠正垂直与水平关系 var newPoints = FixPointsDirection(p[0], p[1]); p[0] = newPoints[0]; @@ -234,7 +235,8 @@ namespace Ink_Canvas { var pointList = p.ToList(); //pointList.Add(p[0]); var point = new StylusPointCollection(pointList); - var stroke = new Stroke(GenerateFakePressureTriangle(point)) { + var stroke = new Stroke(GenerateFakePressureTriangle(point)) + { DrawingAttributes = inkCanvas.DefaultDrawingAttributes.Clone() }; SetNewBackupOfStroke(); @@ -245,10 +247,10 @@ namespace Ink_Canvas { GridInkCanvasSelectionCover.Visibility = Visibility.Collapsed; newStrokes = new StrokeCollection(); } - } else if (result.InkDrawingNode.GetShapeName().Contains("Rectangle") || + } else if ((result.InkDrawingNode.GetShapeName().Contains("Rectangle") || result.InkDrawingNode.GetShapeName().Contains("Diamond") || result.InkDrawingNode.GetShapeName().Contains("Parallelogram") || - result.InkDrawingNode.GetShapeName().Contains("Square")) { + result.InkDrawingNode.GetShapeName().Contains("Square")) && Settings.InkToShape.IsInkToShapeRectangle == true) { var shape = result.InkDrawingNode.GetShape(); var p = result.InkDrawingNode.HotPoints; if ((Math.Max(Math.Max(Math.Max(p[0].X, p[1].X), p[2].X), p[3].X) - Math.Min(Math.Min(Math.Min(p[0].X, p[1].X), p[2].X), p[3].X) >= 100 || @@ -470,41 +472,66 @@ namespace Ink_Canvas { } public StylusPointCollection GenerateFakePressureTriangle(StylusPointCollection points) { - var newPoint = new StylusPointCollection(); - newPoint.Add(new StylusPoint(points[0].X, points[0].Y, (float)0.4)); - var cPoint = GetCenterPoint(points[0], points[1]); - newPoint.Add(new StylusPoint(cPoint.X, cPoint.Y, (float)0.8)); - newPoint.Add(new StylusPoint(points[1].X, points[1].Y, (float)0.4)); - newPoint.Add(new StylusPoint(points[1].X, points[1].Y, (float)0.4)); - cPoint = GetCenterPoint(points[1], points[2]); - newPoint.Add(new StylusPoint(cPoint.X, cPoint.Y, (float)0.8)); - newPoint.Add(new StylusPoint(points[2].X, points[2].Y, (float)0.4)); - newPoint.Add(new StylusPoint(points[2].X, points[2].Y, (float)0.4)); - cPoint = GetCenterPoint(points[2], points[0]); - newPoint.Add(new StylusPoint(cPoint.X, cPoint.Y, (float)0.8)); - newPoint.Add(new StylusPoint(points[0].X, points[0].Y, (float)0.4)); - return newPoint; + if (Settings.InkToShape.IsInkToShapeNoFakePressureTriangle == true) + { + var newPoint = new StylusPointCollection(); + newPoint.Add(new StylusPoint(points[0].X, points[0].Y)); + var cPoint = GetCenterPoint(points[0], points[1]); + newPoint.Add(new StylusPoint(cPoint.X, cPoint.Y)); + newPoint.Add(new StylusPoint(points[1].X, points[1].Y)); + newPoint.Add(new StylusPoint(points[1].X, points[1].Y)); + cPoint = GetCenterPoint(points[1], points[2]); + newPoint.Add(new StylusPoint(cPoint.X, cPoint.Y)); + newPoint.Add(new StylusPoint(points[2].X, points[2].Y)); + newPoint.Add(new StylusPoint(points[2].X, points[2].Y)); + cPoint = GetCenterPoint(points[2], points[0]); + newPoint.Add(new StylusPoint(cPoint.X, cPoint.Y)); + newPoint.Add(new StylusPoint(points[0].X, points[0].Y)); + return newPoint; + } else + { + var newPoint = new StylusPointCollection(); + newPoint.Add(new StylusPoint(points[0].X, points[0].Y, (float)0.4)); + var cPoint = GetCenterPoint(points[0], points[1]); + newPoint.Add(new StylusPoint(cPoint.X, cPoint.Y, (float)0.8)); + newPoint.Add(new StylusPoint(points[1].X, points[1].Y, (float)0.4)); + newPoint.Add(new StylusPoint(points[1].X, points[1].Y, (float)0.4)); + cPoint = GetCenterPoint(points[1], points[2]); + newPoint.Add(new StylusPoint(cPoint.X, cPoint.Y, (float)0.8)); + newPoint.Add(new StylusPoint(points[2].X, points[2].Y, (float)0.4)); + newPoint.Add(new StylusPoint(points[2].X, points[2].Y, (float)0.4)); + cPoint = GetCenterPoint(points[2], points[0]); + newPoint.Add(new StylusPoint(cPoint.X, cPoint.Y, (float)0.8)); + newPoint.Add(new StylusPoint(points[0].X, points[0].Y, (float)0.4)); + return newPoint; + } } public StylusPointCollection GenerateFakePressureRectangle(StylusPointCollection points) { - var newPoint = new StylusPointCollection(); - newPoint.Add(new StylusPoint(points[0].X, points[0].Y, (float)0.4)); - var cPoint = GetCenterPoint(points[0], points[1]); - newPoint.Add(new StylusPoint(cPoint.X, cPoint.Y, (float)0.8)); - newPoint.Add(new StylusPoint(points[1].X, points[1].Y, (float)0.4)); - newPoint.Add(new StylusPoint(points[1].X, points[1].Y, (float)0.4)); - cPoint = GetCenterPoint(points[1], points[2]); - newPoint.Add(new StylusPoint(cPoint.X, cPoint.Y, (float)0.8)); - newPoint.Add(new StylusPoint(points[2].X, points[2].Y, (float)0.4)); - newPoint.Add(new StylusPoint(points[2].X, points[2].Y, (float)0.4)); - cPoint = GetCenterPoint(points[2], points[3]); - newPoint.Add(new StylusPoint(cPoint.X, cPoint.Y, (float)0.8)); - newPoint.Add(new StylusPoint(points[3].X, points[3].Y, (float)0.4)); - newPoint.Add(new StylusPoint(points[3].X, points[3].Y, (float)0.4)); - cPoint = GetCenterPoint(points[3], points[0]); - newPoint.Add(new StylusPoint(cPoint.X, cPoint.Y, (float)0.8)); - newPoint.Add(new StylusPoint(points[0].X, points[0].Y, (float)0.4)); - return newPoint; + if (Settings.InkToShape.IsInkToShapeNoFakePressureRectangle == true) { + return points; + } else + { + var newPoint = new StylusPointCollection(); + newPoint.Add(new StylusPoint(points[0].X, points[0].Y, (float)0.4)); + var cPoint = GetCenterPoint(points[0], points[1]); + newPoint.Add(new StylusPoint(cPoint.X, cPoint.Y, (float)0.8)); + newPoint.Add(new StylusPoint(points[1].X, points[1].Y, (float)0.4)); + newPoint.Add(new StylusPoint(points[1].X, points[1].Y, (float)0.4)); + cPoint = GetCenterPoint(points[1], points[2]); + newPoint.Add(new StylusPoint(cPoint.X, cPoint.Y, (float)0.8)); + newPoint.Add(new StylusPoint(points[2].X, points[2].Y, (float)0.4)); + newPoint.Add(new StylusPoint(points[2].X, points[2].Y, (float)0.4)); + cPoint = GetCenterPoint(points[2], points[3]); + newPoint.Add(new StylusPoint(cPoint.X, cPoint.Y, (float)0.8)); + newPoint.Add(new StylusPoint(points[3].X, points[3].Y, (float)0.4)); + newPoint.Add(new StylusPoint(points[3].X, points[3].Y, (float)0.4)); + cPoint = GetCenterPoint(points[3], points[0]); + newPoint.Add(new StylusPoint(cPoint.X, cPoint.Y, (float)0.8)); + newPoint.Add(new StylusPoint(points[0].X, points[0].Y, (float)0.4)); + return newPoint; + } + } public Point GetCenterPoint(Point point1, Point point2) { diff --git a/Ink Canvas/Resources/Settings.cs b/Ink Canvas/Resources/Settings.cs index b21d8f9..e6f4efc 100644 --- a/Ink Canvas/Resources/Settings.cs +++ b/Ink Canvas/Resources/Settings.cs @@ -278,6 +278,16 @@ namespace Ink_Canvas { [JsonProperty("isInkToShapeEnabled")] public bool IsInkToShapeEnabled { get; set; } = true; + [JsonProperty("isInkToShapeNoFakePressureRectangle")] + public bool IsInkToShapeNoFakePressureRectangle { get; set; } = false; + [JsonProperty("isInkToShapeNoFakePressureTriangle")] + public bool IsInkToShapeNoFakePressureTriangle { get; set; } = false; + [JsonProperty("isInkToShapeTriangle")] + public bool IsInkToShapeTriangle { get; set; } = true; + [JsonProperty("isInkToShapeRectangle")] + public bool IsInkToShapeRectangle { get; set; } = true; + [JsonProperty("isInkToShapeRounded")] + public bool IsInkToShapeRounded { get; set; } = true; } public class RandSettings { diff --git a/Ink Canvas/Resources/new-icons/end-slides-show.png b/Ink Canvas/Resources/new-icons/end-slides-show.png new file mode 100644 index 0000000..74d9607 Binary files /dev/null and b/Ink Canvas/Resources/new-icons/end-slides-show.png differ diff --git a/Ink Canvas/Resources/new-icons/hand-move.png b/Ink Canvas/Resources/new-icons/hand-move.png new file mode 100644 index 0000000..e698581 Binary files /dev/null and b/Ink Canvas/Resources/new-icons/hand-move.png differ diff --git a/Ink Canvas/Resources/new-icons/multi-touch.png b/Ink Canvas/Resources/new-icons/multi-touch.png new file mode 100644 index 0000000..ced539a Binary files /dev/null and b/Ink Canvas/Resources/new-icons/multi-touch.png differ diff --git a/Ink Canvas/Resources/new-icons/rotate.png b/Ink Canvas/Resources/new-icons/rotate.png new file mode 100644 index 0000000..2a4d36a Binary files /dev/null and b/Ink Canvas/Resources/new-icons/rotate.png differ diff --git a/Ink Canvas/Resources/new-icons/zoom.png b/Ink Canvas/Resources/new-icons/zoom.png new file mode 100644 index 0000000..9986052 Binary files /dev/null and b/Ink Canvas/Resources/new-icons/zoom.png differ