From fda23c5c96321843a4bd75efb2518389fa69c57f Mon Sep 17 00:00:00 2001 From: kriastans Date: Sat, 11 May 2024 20:57:09 +0800 Subject: [PATCH] =?UTF-8?q?[feature]=20UI=E4=BC=98=E5=8C=96=EF=BC=8C?= =?UTF-8?q?=E6=9D=A1=E4=BB=B6=E6=80=A7=E7=9A=84=E5=A2=A8=E8=BF=B9=E8=AF=86?= =?UTF-8?q?=E5=88=AB=EF=BC=8C=E5=8F=AF=E4=BB=A5=E5=85=B3=E9=97=AD=E9=83=A8?= =?UTF-8?q?=E5=88=86=E4=B8=8D=E9=9C=80=E8=A6=81=E7=9A=84=E5=BD=A2=E7=8A=B6?= =?UTF-8?q?=E8=AF=86=E5=88=AB=E3=80=82=E5=8F=AF=E4=BB=A5=E4=BF=AE=E6=94=B9?= =?UTF-8?q?=E6=98=AF=E5=90=A6=E4=B8=BA=E5=A2=A8=E8=BF=B9=E8=AF=86=E5=88=AB?= =?UTF-8?q?=E7=9A=84=E4=B8=89=E8=A7=92=E5=BD=A2=E6=88=96=E7=9F=A9=E5=BD=A2?= =?UTF-8?q?=E5=BA=94=E7=94=A8=E6=A8=A1=E6=8B=9F=E5=8E=8B=E6=84=9F=E5=80=BC?= =?UTF-8?q?=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Ink Canvas.sln | 6 +- Ink Canvas/Ink Canvas.csproj | 45 +++++++- Ink Canvas/MainWindow.xaml | 72 ++++++++---- Ink Canvas/MainWindow_cs/MW_AutoFold.cs | 1 + .../MainWindow_cs/MW_FloatingBarIcons.cs | 3 + Ink Canvas/MainWindow_cs/MW_Settings.cs | 41 +++++++ Ink Canvas/MainWindow_cs/MW_SettingsToLoad.cs | 39 +++++++ .../MW_SimulatePressure&InkToShape.cs | 105 +++++++++++------- Ink Canvas/Resources/Settings.cs | 10 ++ .../Resources/new-icons/end-slides-show.png | Bin 0 -> 1396 bytes Ink Canvas/Resources/new-icons/hand-move.png | Bin 0 -> 2321 bytes .../Resources/new-icons/multi-touch.png | Bin 0 -> 1877 bytes Ink Canvas/Resources/new-icons/rotate.png | Bin 0 -> 1976 bytes Ink Canvas/Resources/new-icons/zoom.png | Bin 0 -> 2116 bytes 14 files changed, 259 insertions(+), 63 deletions(-) create mode 100644 Ink Canvas/Resources/new-icons/end-slides-show.png create mode 100644 Ink Canvas/Resources/new-icons/hand-move.png create mode 100644 Ink Canvas/Resources/new-icons/multi-touch.png create mode 100644 Ink Canvas/Resources/new-icons/rotate.png create mode 100644 Ink Canvas/Resources/new-icons/zoom.png 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 0000000000000000000000000000000000000000..74d960790d50f360821eb59639c88ff8d467d4af GIT binary patch literal 1396 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 literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..ced539a929e934a28bda0dcf0c074113830f023f GIT binary patch literal 1877 zcmV-b2demqP)@~0drDELIAGL9O(c600d`2O+f$vv5yP6X&>>8e+i{0!dJVC<~08c>r2}rL-vmz{K1v~-86Ey5**BNn@ z*klMqQ3x>q2`(u~$CXRD$}ZwhikwQBbhUr`_}D&nh%6S1#bU8oEEbE!Vi_ccDCR6J zEv+C~85$azd3}BT4{71@^3tW45L*FI@Y^WtT@-q%&Fup29YBaI8BXj3NQ0-Rr+vJ2 zy2xG_85vnC05X(V34pRsq42-++aCVRXc3ZR7+lD;T5TJq*^Yilt(!4AWT7W|aqTK`uujU8!PZ5Q`dV70Y;0v@Q?xa`RWxTq&GS2DH-U3kg zyA%M_`l46(f+EET6HJifbB_ztrFV>00odgviCf98Cz}?SjWzaQ=$)cffJ&tzbvIGy zu4h`2fM%=!ny~_C#tNVrD}ZLK0GhD^XvPYl87qKh zj9U{96D<5}VM?Pu|AfiD^Rcn9Gu?~z10?_oJ%>rX`g=}!ksk{1jly~k*$Q#Ob|LX2X^%jyc~L~S-hgfA%;irI!<+X9UMP| zB#USG1+Tq6Bk=fd4pXVrY7tOClnWpVexKty`Py^)1YC16!u`v02s!dmRA3CS-Vi_Z z3CT9~M|ymGd<*6Ol>(yF1hFfJ0zIMb0%$kzI;03`j3457A_@R1Pru?dp-cc#_&o(# zg%O0S3Ow5p`Nt%s=H})C_XSD>V9%h}!q*LIuvC1Qs_pCR>vfJv!evgDZ*+9@69q(x z03!ZAZb$_Xowdg~g-BolgkS7X%;3m7GJwDW)M~Y~?4AfObT}#*=|@~=Nj*)SX}1w{ ziA2JPK(D|8c(a&Cq%iq`d0a{zW_50bTqhoE#CtT8o0t>*K=X~yMx0^fZ zM+6LQlI6X+r5Z;Ns%K zcLtH&QrileQ9ckuA^R;-q$VaNVl`_THp&Iy9gTiR27qmuTRMn@G8MtY{(jxkK_e6a zcy#GEI0KGt1#g5l8P~<&Y(EYiGM@8SpL>A^i=hd?ZYdrx_HJp1rAu=KV8jU5mEDht zTk6PeR4SFg%ax%=#>Lq!6;tW5$cLhe`Kr(b5C?4>`D8KHEo}_aZ3X7lB?Uwh8;bRU zotV0%(mtv~rRthU1n9;sU07I95^1Ii(JG~ZS6D$)vTht%babcL(nKP$Yf^{IZnDq4 zqjpQ2{ScV|UCfrI;FcN@;3c*zrDgX!wC0|O^xV+<`}=>Ur>7l~{O4d-f18<^8A3jn zGyzkX!E^j6yU(ro=H_OH6cPCb4cN}jP93thS1W4Zb*`Y5`nEzi6d6)T2jk6?=QE(VF& zC^u&?M*oTug!l|0HXy_Xg@=}c_b^%j4{i~dB5)u?>*%&xEEbE!VzF2(7K_DV35)*${I`rDG|V$L P00000NkvXXu0mjf4T5QM literal 0 HcmV?d00001 diff --git a/Ink Canvas/Resources/new-icons/rotate.png b/Ink Canvas/Resources/new-icons/rotate.png new file mode 100644 index 0000000000000000000000000000000000000000..2a4d36ad869ff2b22a6a31c9716c9635750f586f GIT binary patch literal 1976 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