[update] 跟随ICA上游代码merge MultiTouchMode fix,并更改了白板右上角文字。

This commit is contained in:
Dubi906w 2024-05-09 14:29:00 +08:00
parent 351bd87791
commit 67fe09c7fd
9 changed files with 281 additions and 514 deletions

View File

@ -34,187 +34,207 @@ namespace Ink_Canvas.Helpers
public static void ShowWithSlideFromBottomAndFade(UIElement element, double duration = 0.15)
{
if (element.Visibility == Visibility.Visible) return;
if (element == null)
throw new ArgumentNullException(nameof(element));
var sb = new Storyboard();
// 渐变动画
var fadeInAnimation = new DoubleAnimation
try
{
From = 0.5,
To = 1,
Duration = TimeSpan.FromSeconds(duration)
};
Storyboard.SetTargetProperty(fadeInAnimation, new PropertyPath(UIElement.OpacityProperty));
if (element.Visibility == Visibility.Visible) return;
// 滑动动画
var slideAnimation = new DoubleAnimation
{
From = element.RenderTransform.Value.OffsetY + 10, // 滑动距离
To = 0,
Duration = TimeSpan.FromSeconds(duration)
};
Storyboard.SetTargetProperty(slideAnimation, new PropertyPath("(UIElement.RenderTransform).(TranslateTransform.Y)"));
if (element == null)
throw new ArgumentNullException(nameof(element));
sb.Children.Add(fadeInAnimation);
sb.Children.Add(slideAnimation);
var sb = new Storyboard();
element.Visibility = Visibility.Visible;
element.RenderTransform = new TranslateTransform();
// 渐变动画
var fadeInAnimation = new DoubleAnimation
{
From = 0.5,
To = 1,
Duration = TimeSpan.FromSeconds(duration)
};
Storyboard.SetTargetProperty(fadeInAnimation, new PropertyPath(UIElement.OpacityProperty));
sb.Begin((FrameworkElement)element);
// 滑动动画
var slideAnimation = new DoubleAnimation
{
From = element.RenderTransform.Value.OffsetY + 10, // 滑动距离
To = 0,
Duration = TimeSpan.FromSeconds(duration)
};
Storyboard.SetTargetProperty(slideAnimation, new PropertyPath("(UIElement.RenderTransform).(TranslateTransform.Y)"));
sb.Children.Add(fadeInAnimation);
sb.Children.Add(slideAnimation);
element.Visibility = Visibility.Visible;
element.RenderTransform = new TranslateTransform();
sb.Begin((FrameworkElement)element);
}
catch { }
}
public static void ShowWithSlideFromLeftAndFade(UIElement element, double duration = 0.25)
{
if (element.Visibility == Visibility.Visible) return;
if (element == null)
throw new ArgumentNullException(nameof(element));
var sb = new Storyboard();
// 渐变动画
var fadeInAnimation = new DoubleAnimation
try
{
From = 0.5,
To = 1,
Duration = TimeSpan.FromSeconds(duration)
};
Storyboard.SetTargetProperty(fadeInAnimation, new PropertyPath(UIElement.OpacityProperty));
if (element.Visibility == Visibility.Visible) return;
// 滑动动画
var slideAnimation = new DoubleAnimation
{
From = element.RenderTransform.Value.OffsetX - 20, // 滑动距离
To = 0,
Duration = TimeSpan.FromSeconds(duration)
};
Storyboard.SetTargetProperty(slideAnimation, new PropertyPath("(UIElement.RenderTransform).(TranslateTransform.X)"));
if (element == null)
throw new ArgumentNullException(nameof(element));
sb.Children.Add(fadeInAnimation);
sb.Children.Add(slideAnimation);
var sb = new Storyboard();
element.Visibility = Visibility.Visible;
element.RenderTransform = new TranslateTransform();
// 渐变动画
var fadeInAnimation = new DoubleAnimation
{
From = 0.5,
To = 1,
Duration = TimeSpan.FromSeconds(duration)
};
Storyboard.SetTargetProperty(fadeInAnimation, new PropertyPath(UIElement.OpacityProperty));
sb.Begin((FrameworkElement)element);
// 滑动动画
var slideAnimation = new DoubleAnimation
{
From = element.RenderTransform.Value.OffsetX - 20, // 滑动距离
To = 0,
Duration = TimeSpan.FromSeconds(duration)
};
Storyboard.SetTargetProperty(slideAnimation, new PropertyPath("(UIElement.RenderTransform).(TranslateTransform.X)"));
sb.Children.Add(fadeInAnimation);
sb.Children.Add(slideAnimation);
element.Visibility = Visibility.Visible;
element.RenderTransform = new TranslateTransform();
sb.Begin((FrameworkElement)element);
}
catch { }
}
public static void ShowWithScaleFromLeft(UIElement element, double duration = 0.5)
{
if (element.Visibility == Visibility.Visible) return;
if (element == null)
throw new ArgumentNullException(nameof(element));
var sb = new Storyboard();
// 水平方向的缩放动画
var scaleXAnimation = new DoubleAnimation
try
{
From = 0,
To = 1,
Duration = TimeSpan.FromSeconds(duration)
};
Storyboard.SetTargetProperty(scaleXAnimation, new PropertyPath("(UIElement.RenderTransform).(ScaleTransform.ScaleX)"));
if (element.Visibility == Visibility.Visible) return;
// 垂直方向的缩放动画
var scaleYAnimation = new DoubleAnimation
{
From = 0,
To = 1,
Duration = TimeSpan.FromSeconds(duration)
};
Storyboard.SetTargetProperty(scaleYAnimation, new PropertyPath("(UIElement.RenderTransform).(ScaleTransform.ScaleY)"));
if (element == null)
throw new ArgumentNullException(nameof(element));
sb.Children.Add(scaleXAnimation);
sb.Children.Add(scaleYAnimation);
var sb = new Storyboard();
element.Visibility = Visibility.Visible;
element.RenderTransformOrigin = new Point(0, 0.5); // 左侧中心点为基准
element.RenderTransform = new ScaleTransform(0, 0);
// 水平方向的缩放动画
var scaleXAnimation = new DoubleAnimation
{
From = 0,
To = 1,
Duration = TimeSpan.FromSeconds(duration)
};
Storyboard.SetTargetProperty(scaleXAnimation, new PropertyPath("(UIElement.RenderTransform).(ScaleTransform.ScaleX)"));
sb.Begin((FrameworkElement)element);
// 垂直方向的缩放动画
var scaleYAnimation = new DoubleAnimation
{
From = 0,
To = 1,
Duration = TimeSpan.FromSeconds(duration)
};
Storyboard.SetTargetProperty(scaleYAnimation, new PropertyPath("(UIElement.RenderTransform).(ScaleTransform.ScaleY)"));
sb.Children.Add(scaleXAnimation);
sb.Children.Add(scaleYAnimation);
element.Visibility = Visibility.Visible;
element.RenderTransformOrigin = new Point(0, 0.5); // 左侧中心点为基准
element.RenderTransform = new ScaleTransform(0, 0);
sb.Begin((FrameworkElement)element);
}
catch { }
}
public static void ShowWithScaleFromRight(UIElement element, double duration = 0.5)
{
if (element.Visibility == Visibility.Visible) return;
if (element == null)
throw new ArgumentNullException(nameof(element));
var sb = new Storyboard();
// 水平方向的缩放动画
var scaleXAnimation = new DoubleAnimation
try
{
From = 0,
To = 1,
Duration = TimeSpan.FromSeconds(duration)
};
Storyboard.SetTargetProperty(scaleXAnimation, new PropertyPath("(UIElement.RenderTransform).(ScaleTransform.ScaleX)"));
if (element.Visibility == Visibility.Visible) return;
// 垂直方向的缩放动画
var scaleYAnimation = new DoubleAnimation
{
From = 0,
To = 1,
Duration = TimeSpan.FromSeconds(duration)
};
Storyboard.SetTargetProperty(scaleYAnimation, new PropertyPath("(UIElement.RenderTransform).(ScaleTransform.ScaleY)"));
if (element == null)
throw new ArgumentNullException(nameof(element));
sb.Children.Add(scaleXAnimation);
sb.Children.Add(scaleYAnimation);
var sb = new Storyboard();
element.Visibility = Visibility.Visible;
element.RenderTransformOrigin = new Point(1, 0.5); // 右侧中心点为基准
element.RenderTransform = new ScaleTransform(0, 0);
// 水平方向的缩放动画
var scaleXAnimation = new DoubleAnimation
{
From = 0,
To = 1,
Duration = TimeSpan.FromSeconds(duration)
};
Storyboard.SetTargetProperty(scaleXAnimation, new PropertyPath("(UIElement.RenderTransform).(ScaleTransform.ScaleX)"));
sb.Begin((FrameworkElement)element);
// 垂直方向的缩放动画
var scaleYAnimation = new DoubleAnimation
{
From = 0,
To = 1,
Duration = TimeSpan.FromSeconds(duration)
};
Storyboard.SetTargetProperty(scaleYAnimation, new PropertyPath("(UIElement.RenderTransform).(ScaleTransform.ScaleY)"));
sb.Children.Add(scaleXAnimation);
sb.Children.Add(scaleYAnimation);
element.Visibility = Visibility.Visible;
element.RenderTransformOrigin = new Point(1, 0.5); // 右侧中心点为基准
element.RenderTransform = new ScaleTransform(0, 0);
sb.Begin((FrameworkElement)element);
}
catch { }
}
public static void HideWithSlideAndFade(UIElement element, double duration = 0.15)
{
if (element.Visibility == Visibility.Collapsed) return;
if (element == null)
throw new ArgumentNullException(nameof(element));
var sb = new Storyboard();
// 渐变动画
var fadeOutAnimation = new DoubleAnimation
try
{
From = 1,
To = 0,
Duration = TimeSpan.FromSeconds(duration)
};
Storyboard.SetTargetProperty(fadeOutAnimation, new PropertyPath(UIElement.OpacityProperty));
if (element.Visibility == Visibility.Collapsed) return;
// 滑动动画
var slideAnimation = new DoubleAnimation
{
From = 0,
To = element.RenderTransform.Value.OffsetY + 10, // 滑动距离
Duration = TimeSpan.FromSeconds(duration)
};
Storyboard.SetTargetProperty(slideAnimation, new PropertyPath("(UIElement.RenderTransform).(TranslateTransform.Y)"));
if (element == null)
throw new ArgumentNullException(nameof(element));
sb.Children.Add(fadeOutAnimation);
sb.Children.Add(slideAnimation);
var sb = new Storyboard();
sb.Completed += (s, e) =>
{
element.Visibility = Visibility.Collapsed;
};
// 渐变动画
var fadeOutAnimation = new DoubleAnimation
{
From = 1,
To = 0,
Duration = TimeSpan.FromSeconds(duration)
};
Storyboard.SetTargetProperty(fadeOutAnimation, new PropertyPath(UIElement.OpacityProperty));
element.RenderTransform = new TranslateTransform();
sb.Begin((FrameworkElement)element);
// 滑动动画
var slideAnimation = new DoubleAnimation
{
From = 0,
To = element.RenderTransform.Value.OffsetY + 10, // 滑动距离
Duration = TimeSpan.FromSeconds(duration)
};
Storyboard.SetTargetProperty(slideAnimation, new PropertyPath("(UIElement.RenderTransform).(TranslateTransform.Y)"));
sb.Children.Add(fadeOutAnimation);
sb.Children.Add(slideAnimation);
sb.Completed += (s, e) =>
{
element.Visibility = Visibility.Collapsed;
};
element.RenderTransform = new TranslateTransform();
sb.Begin((FrameworkElement)element);
}
catch { }
}
public static void HideWithFadeOut(UIElement element, double duration = 0.15)

View File

@ -1,4 +1,5 @@
using System.Windows;
using System;
using System.Windows;
using System.Windows.Ink;
using System.Windows.Input;
using System.Windows.Media;
@ -88,5 +89,10 @@ namespace Ink_Canvas.Helpers
}
private readonly DrawingAttributes _drawingAttributes;
public static implicit operator Stroke(StrokeVisual v)
{
throw new NotImplementedException();
}
}
}

View File

@ -94,7 +94,7 @@
<TextBlock Text="{Binding nowTime}" Name="WaterMarkTime" Visibility="Collapsed" FontSize="30" FontWeight="Bold" Foreground="White" Opacity="0.6"/>
<TextBlock Text="{Binding nowDate}" Name="WaterMarkDate" Visibility="Collapsed" Margin="2,0,0,0" FontSize="16" Foreground="White" Opacity="0.45"/>
</ui:SimpleStackPanel>
<TextBlock Canvas.Right="25" Canvas.Top="15" Text="InkCanvasForClass测试版" Name="BlackBoardWaterMark" Visibility="Collapsed" FontSize="30" FontWeight="Bold" Foreground="White" Opacity="0.5"/>
<TextBlock Canvas.Right="25" Canvas.Top="15" Text="多一份理解,少一份抱怨" Name="BlackBoardWaterMark" Visibility="Collapsed" FontSize="30" FontWeight="Bold" Foreground="White" Opacity="0.5"/>
</Canvas>
<Canvas Name="Canvas"/>
<Label Name="Label" Visibility="Collapsed" Foreground="Gray" Content="0"/>

View File

@ -1190,7 +1190,7 @@ namespace Ink_Canvas {
}
bool lastIsInMultiTouchMode = false;
private void CancelSingleFingerDragMode(bool isDrawingShapes = false)
private void CancelSingleFingerDragMode()
{
if (ToggleSwitchDrawShapeBorderAutoHide.IsOn) {
CollapseBorderDrawShape();
@ -1202,12 +1202,6 @@ namespace Ink_Canvas {
BtnFingerDragMode_Click(BtnFingerDragMode, null);
}
isLongPressSelected = false;
if (isDrawingShapes && isInMultiTouchMode)
{
ToggleSwitchEnableMultiTouchMode.IsOn = false;
lastIsInMultiTouchMode = true;
}
}
private void BtnHideControl_Click(object sender, RoutedEventArgs e) {

View File

@ -14,19 +14,24 @@ namespace Ink_Canvas {
}
public void ShowNotification(string notice, bool isShowImmediately = true) {
lastNotificationShowTime = Environment.TickCount;
try
{
lastNotificationShowTime = Environment.TickCount;
TextBlockNotice.Text = notice;
AnimationsHelper.ShowWithFadeIn(GridNotifications);
TextBlockNotice.Text = notice;
AnimationsHelper.ShowWithSlideFromBottomAndFade(GridNotifications);
new Thread(new ThreadStart(() => {
Thread.Sleep(notificationShowTime + 300);
if (Environment.TickCount - lastNotificationShowTime >= notificationShowTime) {
Application.Current.Dispatcher.Invoke(() => {
AnimationsHelper.HideWithFadeOut(GridNotifications);
});
}
})).Start();
new Thread(new ThreadStart(() => {
Thread.Sleep(notificationShowTime + 300);
if (Environment.TickCount - lastNotificationShowTime >= notificationShowTime)
{
Application.Current.Dispatcher.Invoke(() => {
AnimationsHelper.HideWithSlideAndFade(GridNotifications);
});
}
})).Start();
}
catch { }
}
}
}

View File

@ -89,20 +89,25 @@ namespace Ink_Canvas {
isLongPressSelected = false;
}
private void BtnDrawLine_Click(object sender, MouseButtonEventArgs e) {
private Task<bool> CheckIsDrawingShapesInMultiTouchMode()
{
if (isInMultiTouchMode)
{
ToggleSwitchEnableMultiTouchMode.IsOn = false;
lastIsInMultiTouchMode = true;
}
return Task.FromResult(true);
}
private async void BtnDrawLine_Click(object sender, MouseButtonEventArgs e)
{
await CheckIsDrawingShapesInMultiTouchMode();
if (lastMouseDownSender == sender) {
forceEraser = true;
drawingShapeMode = 1;
inkCanvas.EditingMode = InkCanvasEditingMode.None;
inkCanvas.IsManipulationEnabled = true;
if (e == null || e.StylusDevice == null)
{ // e == null: 快捷键 alt + L
CancelSingleFingerDragMode();
}
else
{
CancelSingleFingerDragMode(true);
}
CancelSingleFingerDragMode();
}
lastMouseDownSender = null;
if (isLongPressSelected) {
@ -115,20 +120,15 @@ namespace Ink_Canvas {
DrawShapePromptToPen();
}
private void BtnDrawDashedLine_Click(object sender, MouseButtonEventArgs e) {
private async void BtnDrawDashedLine_Click(object sender, MouseButtonEventArgs e)
{
await CheckIsDrawingShapesInMultiTouchMode();
if (lastMouseDownSender == sender) {
forceEraser = true;
drawingShapeMode = 8;
inkCanvas.EditingMode = InkCanvasEditingMode.None;
inkCanvas.IsManipulationEnabled = true;
if (e.StylusDevice == null)
{
CancelSingleFingerDragMode();
}
else
{
CancelSingleFingerDragMode(true);
}
CancelSingleFingerDragMode();
}
lastMouseDownSender = null;
if (isLongPressSelected) {
@ -141,20 +141,14 @@ namespace Ink_Canvas {
DrawShapePromptToPen();
}
private void BtnDrawDotLine_Click(object sender, MouseButtonEventArgs e) {
private async void BtnDrawDotLine_Click(object sender, MouseButtonEventArgs e) {
await CheckIsDrawingShapesInMultiTouchMode();
if (lastMouseDownSender == sender) {
forceEraser = true;
drawingShapeMode = 18;
inkCanvas.EditingMode = InkCanvasEditingMode.None;
inkCanvas.IsManipulationEnabled = true;
if (e.StylusDevice == null)
{
CancelSingleFingerDragMode();
}
else
{
CancelSingleFingerDragMode(true);
}
CancelSingleFingerDragMode();
}
lastMouseDownSender = null;
if (isLongPressSelected) {
@ -167,20 +161,14 @@ namespace Ink_Canvas {
DrawShapePromptToPen();
}
private void BtnDrawArrow_Click(object sender, MouseButtonEventArgs e) {
private async void BtnDrawArrow_Click(object sender, MouseButtonEventArgs e) {
await CheckIsDrawingShapesInMultiTouchMode();
if (lastMouseDownSender == sender) {
forceEraser = true;
drawingShapeMode = 2;
inkCanvas.EditingMode = InkCanvasEditingMode.None;
inkCanvas.IsManipulationEnabled = true;
if (e.StylusDevice == null)
{
CancelSingleFingerDragMode();
}
else
{
CancelSingleFingerDragMode(true);
}
CancelSingleFingerDragMode();
}
lastMouseDownSender = null;
if (isLongPressSelected) {
@ -193,20 +181,14 @@ namespace Ink_Canvas {
DrawShapePromptToPen();
}
private void BtnDrawParallelLine_Click(object sender, MouseButtonEventArgs e) {
private async void BtnDrawParallelLine_Click(object sender, MouseButtonEventArgs e) {
await CheckIsDrawingShapesInMultiTouchMode();
if (lastMouseDownSender == sender) {
forceEraser = true;
drawingShapeMode = 15;
inkCanvas.EditingMode = InkCanvasEditingMode.None;
inkCanvas.IsManipulationEnabled = true;
if (e.StylusDevice == null)
{
CancelSingleFingerDragMode();
}
else
{
CancelSingleFingerDragMode(true);
}
CancelSingleFingerDragMode();
}
lastMouseDownSender = null;
if (isLongPressSelected) {
@ -219,313 +201,200 @@ namespace Ink_Canvas {
DrawShapePromptToPen();
}
private void BtnDrawCoordinate1_Click(object sender, MouseButtonEventArgs e) {
private async void BtnDrawCoordinate1_Click(object sender, MouseButtonEventArgs e) {
await CheckIsDrawingShapesInMultiTouchMode();
forceEraser = true;
drawingShapeMode = 11;
inkCanvas.EditingMode = InkCanvasEditingMode.None;
inkCanvas.IsManipulationEnabled = true;
if (e.StylusDevice == null)
{
CancelSingleFingerDragMode();
}
else
{
CancelSingleFingerDragMode(true);
}
CancelSingleFingerDragMode();
DrawShapePromptToPen();
}
private void BtnDrawCoordinate2_Click(object sender, MouseButtonEventArgs e) {
private async void BtnDrawCoordinate2_Click(object sender, MouseButtonEventArgs e) {
await CheckIsDrawingShapesInMultiTouchMode();
forceEraser = true;
drawingShapeMode = 12;
inkCanvas.EditingMode = InkCanvasEditingMode.None;
inkCanvas.IsManipulationEnabled = true;
if (e.StylusDevice == null)
{
CancelSingleFingerDragMode();
}
else
{
CancelSingleFingerDragMode(true);
}
CancelSingleFingerDragMode();
DrawShapePromptToPen();
}
private void BtnDrawCoordinate3_Click(object sender, MouseButtonEventArgs e) {
private async void BtnDrawCoordinate3_Click(object sender, MouseButtonEventArgs e) {
await CheckIsDrawingShapesInMultiTouchMode();
forceEraser = true;
drawingShapeMode = 13;
inkCanvas.EditingMode = InkCanvasEditingMode.None;
inkCanvas.IsManipulationEnabled = true;
if (e.StylusDevice == null)
{
CancelSingleFingerDragMode();
}
else
{
CancelSingleFingerDragMode(true);
}
CancelSingleFingerDragMode();
DrawShapePromptToPen();
}
private void BtnDrawCoordinate4_Click(object sender, MouseButtonEventArgs e) {
private async void BtnDrawCoordinate4_Click(object sender, MouseButtonEventArgs e) {
await CheckIsDrawingShapesInMultiTouchMode();
forceEraser = true;
drawingShapeMode = 14;
inkCanvas.EditingMode = InkCanvasEditingMode.None;
inkCanvas.IsManipulationEnabled = true;
if (e.StylusDevice == null)
{
CancelSingleFingerDragMode();
}
else
{
CancelSingleFingerDragMode(true);
}
CancelSingleFingerDragMode();
DrawShapePromptToPen();
}
private void BtnDrawCoordinate5_Click(object sender, MouseButtonEventArgs e) {
private async void BtnDrawCoordinate5_Click(object sender, MouseButtonEventArgs e) {
await CheckIsDrawingShapesInMultiTouchMode();
forceEraser = true;
drawingShapeMode = 17;
inkCanvas.EditingMode = InkCanvasEditingMode.None;
inkCanvas.IsManipulationEnabled = true;
if (e.StylusDevice == null)
{
CancelSingleFingerDragMode();
}
else
{
CancelSingleFingerDragMode(true);
}
CancelSingleFingerDragMode();
DrawShapePromptToPen();
}
private void BtnDrawRectangle_Click(object sender, MouseButtonEventArgs e) {
private async void BtnDrawRectangle_Click(object sender, MouseButtonEventArgs e) {
await CheckIsDrawingShapesInMultiTouchMode();
forceEraser = true;
drawingShapeMode = 3;
inkCanvas.EditingMode = InkCanvasEditingMode.None;
inkCanvas.IsManipulationEnabled = true;
if (e.StylusDevice == null)
{
CancelSingleFingerDragMode();
}
else
{
CancelSingleFingerDragMode(true);
}
CancelSingleFingerDragMode();
DrawShapePromptToPen();
}
private void BtnDrawRectangleCenter_Click(object sender, MouseButtonEventArgs e) {
private async void BtnDrawRectangleCenter_Click(object sender, MouseButtonEventArgs e) {
await CheckIsDrawingShapesInMultiTouchMode();
forceEraser = true;
drawingShapeMode = 19;
inkCanvas.EditingMode = InkCanvasEditingMode.None;
inkCanvas.IsManipulationEnabled = true;
if (e.StylusDevice == null)
{
CancelSingleFingerDragMode();
}
else
{
CancelSingleFingerDragMode(true);
}
CancelSingleFingerDragMode();
DrawShapePromptToPen();
}
private void BtnDrawEllipse_Click(object sender, MouseButtonEventArgs e) {
private async void BtnDrawEllipse_Click(object sender, MouseButtonEventArgs e) {
await CheckIsDrawingShapesInMultiTouchMode();
forceEraser = true;
drawingShapeMode = 4;
inkCanvas.EditingMode = InkCanvasEditingMode.None;
inkCanvas.IsManipulationEnabled = true;
if (e.StylusDevice == null)
{
CancelSingleFingerDragMode();
}
else
{
CancelSingleFingerDragMode(true);
}
CancelSingleFingerDragMode();
DrawShapePromptToPen();
}
private void BtnDrawCircle_Click(object sender, MouseButtonEventArgs e) {
private async void BtnDrawCircle_Click(object sender, MouseButtonEventArgs e) {
await CheckIsDrawingShapesInMultiTouchMode();
forceEraser = true;
drawingShapeMode = 5;
inkCanvas.EditingMode = InkCanvasEditingMode.None;
inkCanvas.IsManipulationEnabled = true;
if (e.StylusDevice == null)
{
CancelSingleFingerDragMode();
}
else
{
CancelSingleFingerDragMode(true);
}
CancelSingleFingerDragMode();
DrawShapePromptToPen();
}
private void BtnDrawCenterEllipse_Click(object sender, MouseButtonEventArgs e) {
private async void BtnDrawCenterEllipse_Click(object sender, MouseButtonEventArgs e) {
await CheckIsDrawingShapesInMultiTouchMode();
forceEraser = true;
drawingShapeMode = 16;
inkCanvas.EditingMode = InkCanvasEditingMode.None;
inkCanvas.IsManipulationEnabled = true;
if (e.StylusDevice == null)
{
CancelSingleFingerDragMode();
}
else
{
CancelSingleFingerDragMode(true);
}
CancelSingleFingerDragMode();
DrawShapePromptToPen();
}
private void BtnDrawCenterEllipseWithFocalPoint_Click(object sender, MouseButtonEventArgs e) {
private async void BtnDrawCenterEllipseWithFocalPoint_Click(object sender, MouseButtonEventArgs e) {
await CheckIsDrawingShapesInMultiTouchMode();
forceEraser = true;
drawingShapeMode = 23;
inkCanvas.EditingMode = InkCanvasEditingMode.None;
inkCanvas.IsManipulationEnabled = true;
if (e.StylusDevice == null)
{
CancelSingleFingerDragMode();
}
else
{
CancelSingleFingerDragMode(true);
}
CancelSingleFingerDragMode();
DrawShapePromptToPen();
}
private void BtnDrawDashedCircle_Click(object sender, MouseButtonEventArgs e) {
private async void BtnDrawDashedCircle_Click(object sender, MouseButtonEventArgs e) {
await CheckIsDrawingShapesInMultiTouchMode();
forceEraser = true;
drawingShapeMode = 10;
inkCanvas.EditingMode = InkCanvasEditingMode.None;
inkCanvas.IsManipulationEnabled = true;
if (e.StylusDevice == null)
{
CancelSingleFingerDragMode();
}
else
{
CancelSingleFingerDragMode(true);
}
CancelSingleFingerDragMode();
DrawShapePromptToPen();
}
private void BtnDrawHyperbola_Click(object sender, MouseButtonEventArgs e) {
private async void BtnDrawHyperbola_Click(object sender, MouseButtonEventArgs e) {
await CheckIsDrawingShapesInMultiTouchMode();
forceEraser = true;
drawingShapeMode = 24;
drawMultiStepShapeCurrentStep = 0;
inkCanvas.EditingMode = InkCanvasEditingMode.None;
inkCanvas.IsManipulationEnabled = true;
if (e.StylusDevice == null)
{
CancelSingleFingerDragMode();
}
else
{
CancelSingleFingerDragMode(true);
}
CancelSingleFingerDragMode();
DrawShapePromptToPen();
}
private void BtnDrawHyperbolaWithFocalPoint_Click(object sender, MouseButtonEventArgs e) {
private async void BtnDrawHyperbolaWithFocalPoint_Click(object sender, MouseButtonEventArgs e) {
await CheckIsDrawingShapesInMultiTouchMode();
forceEraser = true;
drawingShapeMode = 25;
drawMultiStepShapeCurrentStep = 0;
inkCanvas.EditingMode = InkCanvasEditingMode.None;
inkCanvas.IsManipulationEnabled = true;
if (e.StylusDevice == null)
{
CancelSingleFingerDragMode();
}
else
{
CancelSingleFingerDragMode(true);
}
CancelSingleFingerDragMode();
DrawShapePromptToPen();
}
private void BtnDrawParabola1_Click(object sender, MouseButtonEventArgs e) {
private async void BtnDrawParabola1_Click(object sender, MouseButtonEventArgs e) {
await CheckIsDrawingShapesInMultiTouchMode();
forceEraser = true;
drawingShapeMode = 20;
inkCanvas.EditingMode = InkCanvasEditingMode.None;
inkCanvas.IsManipulationEnabled = true;
if (e.StylusDevice == null)
{
CancelSingleFingerDragMode();
}
else
{
CancelSingleFingerDragMode(true);
}
CancelSingleFingerDragMode();
DrawShapePromptToPen();
}
private void BtnDrawParabolaWithFocalPoint_Click(object sender, MouseButtonEventArgs e) {
private async void BtnDrawParabolaWithFocalPoint_Click(object sender, MouseButtonEventArgs e) {
await CheckIsDrawingShapesInMultiTouchMode();
forceEraser = true;
drawingShapeMode = 22;
inkCanvas.EditingMode = InkCanvasEditingMode.None;
inkCanvas.IsManipulationEnabled = true;
if (e.StylusDevice == null)
{
CancelSingleFingerDragMode();
}
else
{
CancelSingleFingerDragMode(true);
}
CancelSingleFingerDragMode();
DrawShapePromptToPen();
}
private void BtnDrawParabola2_Click(object sender, MouseButtonEventArgs e) {
private async void BtnDrawParabola2_Click(object sender, MouseButtonEventArgs e) {
await CheckIsDrawingShapesInMultiTouchMode();
forceEraser = true;
drawingShapeMode = 21;
inkCanvas.EditingMode = InkCanvasEditingMode.None;
inkCanvas.IsManipulationEnabled = true;
if (e.StylusDevice == null)
{
CancelSingleFingerDragMode();
}
else
{
CancelSingleFingerDragMode(true);
}
CancelSingleFingerDragMode();
DrawShapePromptToPen();
}
private void BtnDrawCylinder_Click(object sender, MouseButtonEventArgs e) {
private async void BtnDrawCylinder_Click(object sender, MouseButtonEventArgs e) {
await CheckIsDrawingShapesInMultiTouchMode();
forceEraser = true;
drawingShapeMode = 6;
inkCanvas.EditingMode = InkCanvasEditingMode.None;
inkCanvas.IsManipulationEnabled = true;
if (e.StylusDevice == null)
{
CancelSingleFingerDragMode();
}
else
{
CancelSingleFingerDragMode(true);
}
CancelSingleFingerDragMode();
DrawShapePromptToPen();
}
private void BtnDrawCone_Click(object sender, MouseButtonEventArgs e) {
private async void BtnDrawCone_Click(object sender, MouseButtonEventArgs e) {
await CheckIsDrawingShapesInMultiTouchMode();
forceEraser = true;
drawingShapeMode = 7;
inkCanvas.EditingMode = InkCanvasEditingMode.None;
inkCanvas.IsManipulationEnabled = true;
if (e.StylusDevice == null)
{
CancelSingleFingerDragMode();
}
else
{
CancelSingleFingerDragMode(true);
}
CancelSingleFingerDragMode();
DrawShapePromptToPen();
}
private void BtnDrawCuboid_Click(object sender, MouseButtonEventArgs e) {
private async void BtnDrawCuboid_Click(object sender, MouseButtonEventArgs e) {
await CheckIsDrawingShapesInMultiTouchMode();
forceEraser = true;
drawingShapeMode = 9;
isFirstTouchCuboid = true;
@ -533,14 +402,7 @@ namespace Ink_Canvas {
CuboidFrontRectEndP = new Point();
inkCanvas.EditingMode = InkCanvasEditingMode.None;
inkCanvas.IsManipulationEnabled = true;
if (e.StylusDevice == null)
{
CancelSingleFingerDragMode();
}
else
{
CancelSingleFingerDragMode(true);
}
CancelSingleFingerDragMode();
DrawShapePromptToPen();
}
@ -613,11 +475,6 @@ namespace Ink_Canvas {
} catch { }
lastTempStroke = stroke;
inkCanvas.Strokes.Add(stroke);
if (lastIsInMultiTouchMode)
{
ToggleSwitchEnableMultiTouchMode.IsOn = true;
lastIsInMultiTouchMode = false;
}
break;
case 8:
_currentCommitType = CommitReason.ShapeDrawing;
@ -629,11 +486,6 @@ namespace Ink_Canvas {
}
lastTempStrokeCollection = strokes;
inkCanvas.Strokes.Add(strokes);
if (lastIsInMultiTouchMode)
{
ToggleSwitchEnableMultiTouchMode.IsOn = true;
lastIsInMultiTouchMode = false;
}
break;
case 18:
_currentCommitType = CommitReason.ShapeDrawing;
@ -645,11 +497,6 @@ namespace Ink_Canvas {
}
lastTempStrokeCollection = strokes;
inkCanvas.Strokes.Add(strokes);
if (lastIsInMultiTouchMode)
{
ToggleSwitchEnableMultiTouchMode.IsOn = true;
lastIsInMultiTouchMode = false;
}
break;
case 2:
_currentCommitType = CommitReason.ShapeDrawing;
@ -675,11 +522,6 @@ namespace Ink_Canvas {
} catch { }
lastTempStroke = stroke;
inkCanvas.Strokes.Add(stroke);
if (lastIsInMultiTouchMode)
{
ToggleSwitchEnableMultiTouchMode.IsOn = true;
lastIsInMultiTouchMode = false;
}
break;
case 15:
_currentCommitType = CommitReason.ShapeDrawing;
@ -731,11 +573,6 @@ namespace Ink_Canvas {
}
lastTempStrokeCollection = strokes;
inkCanvas.Strokes.Add(strokes);
if (lastIsInMultiTouchMode)
{
ToggleSwitchEnableMultiTouchMode.IsOn = true;
lastIsInMultiTouchMode = false;
}
break;
case 11:
_currentCommitType = CommitReason.ShapeDrawing;
@ -748,11 +585,6 @@ namespace Ink_Canvas {
}
lastTempStrokeCollection = strokes;
inkCanvas.Strokes.Add(strokes);
if (lastIsInMultiTouchMode)
{
ToggleSwitchEnableMultiTouchMode.IsOn = true;
lastIsInMultiTouchMode = false;
}
break;
case 12:
_currentCommitType = CommitReason.ShapeDrawing;
@ -766,11 +598,6 @@ namespace Ink_Canvas {
}
lastTempStrokeCollection = strokes;
inkCanvas.Strokes.Add(strokes);
if (lastIsInMultiTouchMode)
{
ToggleSwitchEnableMultiTouchMode.IsOn = true;
lastIsInMultiTouchMode = false;
}
break;
case 13:
_currentCommitType = CommitReason.ShapeDrawing;
@ -784,11 +611,6 @@ namespace Ink_Canvas {
}
lastTempStrokeCollection = strokes;
inkCanvas.Strokes.Add(strokes);
if (lastIsInMultiTouchMode)
{
ToggleSwitchEnableMultiTouchMode.IsOn = true;
lastIsInMultiTouchMode = false;
}
break;
case 14:
_currentCommitType = CommitReason.ShapeDrawing;
@ -802,11 +624,6 @@ namespace Ink_Canvas {
}
lastTempStrokeCollection = strokes;
inkCanvas.Strokes.Add(strokes);
if (lastIsInMultiTouchMode)
{
ToggleSwitchEnableMultiTouchMode.IsOn = true;
lastIsInMultiTouchMode = false;
}
break;
case 17:
_currentCommitType = CommitReason.ShapeDrawing;
@ -821,11 +638,6 @@ namespace Ink_Canvas {
}
lastTempStrokeCollection = strokes;
inkCanvas.Strokes.Add(strokes);
if (lastIsInMultiTouchMode)
{
ToggleSwitchEnableMultiTouchMode.IsOn = true;
lastIsInMultiTouchMode = false;
}
break;
case 3:
_currentCommitType = CommitReason.ShapeDrawing;
@ -845,11 +657,6 @@ namespace Ink_Canvas {
} catch { }
lastTempStroke = stroke;
inkCanvas.Strokes.Add(stroke);
if (lastIsInMultiTouchMode)
{
ToggleSwitchEnableMultiTouchMode.IsOn = true;
lastIsInMultiTouchMode = false;
}
break;
case 19:
_currentCommitType = CommitReason.ShapeDrawing;
@ -871,11 +678,6 @@ namespace Ink_Canvas {
} catch { }
lastTempStroke = stroke;
inkCanvas.Strokes.Add(stroke);
if (lastIsInMultiTouchMode)
{
ToggleSwitchEnableMultiTouchMode.IsOn = true;
lastIsInMultiTouchMode = false;
}
break;
case 4:
_currentCommitType = CommitReason.ShapeDrawing;
@ -889,11 +691,6 @@ namespace Ink_Canvas {
} catch { }
lastTempStroke = stroke;
inkCanvas.Strokes.Add(stroke);
if (lastIsInMultiTouchMode)
{
ToggleSwitchEnableMultiTouchMode.IsOn = true;
lastIsInMultiTouchMode = false;
}
break;
case 5:
_currentCommitType = CommitReason.ShapeDrawing;
@ -908,11 +705,6 @@ namespace Ink_Canvas {
} catch { }
lastTempStroke = stroke;
inkCanvas.Strokes.Add(stroke);
if (lastIsInMultiTouchMode)
{
ToggleSwitchEnableMultiTouchMode.IsOn = true;
lastIsInMultiTouchMode = false;
}
break;
case 16:
_currentCommitType = CommitReason.ShapeDrawing;
@ -928,11 +720,6 @@ namespace Ink_Canvas {
} catch { }
lastTempStroke = stroke;
inkCanvas.Strokes.Add(stroke);
if (lastIsInMultiTouchMode)
{
ToggleSwitchEnableMultiTouchMode.IsOn = true;
lastIsInMultiTouchMode = false;
}
break;
case 23:
_currentCommitType = CommitReason.ShapeDrawing;
@ -982,11 +769,6 @@ namespace Ink_Canvas {
} catch { }
lastTempStrokeCollection = strokes;
inkCanvas.Strokes.Add(strokes);
if (lastIsInMultiTouchMode)
{
ToggleSwitchEnableMultiTouchMode.IsOn = true;
lastIsInMultiTouchMode = false;
}
break;
case 10:
_currentCommitType = CommitReason.ShapeDrawing;
@ -999,11 +781,6 @@ namespace Ink_Canvas {
}
lastTempStrokeCollection = strokes;
inkCanvas.Strokes.Add(strokes);
if (lastIsInMultiTouchMode)
{
ToggleSwitchEnableMultiTouchMode.IsOn = true;
lastIsInMultiTouchMode = false;
}
break;
case 24:
case 25:
@ -1085,11 +862,6 @@ namespace Ink_Canvas {
}
lastTempStrokeCollection = strokes;
inkCanvas.Strokes.Add(strokes);
if (lastIsInMultiTouchMode)
{
ToggleSwitchEnableMultiTouchMode.IsOn = true;
lastIsInMultiTouchMode = false;
}
break;
case 20:
_currentCommitType = CommitReason.ShapeDrawing;
@ -1119,11 +891,6 @@ namespace Ink_Canvas {
}
lastTempStrokeCollection = strokes;
inkCanvas.Strokes.Add(strokes);
if (lastIsInMultiTouchMode)
{
ToggleSwitchEnableMultiTouchMode.IsOn = true;
lastIsInMultiTouchMode = false;
}
break;
case 21:
_currentCommitType = CommitReason.ShapeDrawing;
@ -1153,11 +920,6 @@ namespace Ink_Canvas {
}
lastTempStrokeCollection = strokes;
inkCanvas.Strokes.Add(strokes);
if (lastIsInMultiTouchMode)
{
ToggleSwitchEnableMultiTouchMode.IsOn = true;
lastIsInMultiTouchMode = false;
}
break;
case 22:
_currentCommitType = CommitReason.ShapeDrawing;
@ -1195,11 +957,6 @@ namespace Ink_Canvas {
}
lastTempStrokeCollection = strokes;
inkCanvas.Strokes.Add(strokes);
if (lastIsInMultiTouchMode)
{
ToggleSwitchEnableMultiTouchMode.IsOn = true;
lastIsInMultiTouchMode = false;
}
break;
case 6:
_currentCommitType = CommitReason.ShapeDrawing;
@ -1252,11 +1009,6 @@ namespace Ink_Canvas {
}
lastTempStrokeCollection = strokes;
inkCanvas.Strokes.Add(strokes);
if (lastIsInMultiTouchMode)
{
ToggleSwitchEnableMultiTouchMode.IsOn = true;
lastIsInMultiTouchMode = false;
}
break;
case 7:
_currentCommitType = CommitReason.ShapeDrawing;
@ -1301,11 +1053,6 @@ namespace Ink_Canvas {
}
lastTempStrokeCollection = strokes;
inkCanvas.Strokes.Add(strokes);
if (lastIsInMultiTouchMode)
{
ToggleSwitchEnableMultiTouchMode.IsOn = true;
lastIsInMultiTouchMode = false;
}
break;
case 9:
// 画长方体
@ -1387,11 +1134,6 @@ namespace Ink_Canvas {
lastTempStrokeCollection = strokes;
inkCanvas.Strokes.Add(strokes);
}
if (lastIsInMultiTouchMode)
{
ToggleSwitchEnableMultiTouchMode.IsOn = true;
lastIsInMultiTouchMode = false;
}
break;
}
}

View File

@ -31,7 +31,7 @@ namespace Ink_Canvas {
inkCanvas.StylusUp += MainWindow_StylusUp;
inkCanvas.TouchDown += MainWindow_TouchDown;
inkCanvas.TouchDown -= Main_Grid_TouchDown;
inkCanvas.EditingMode = InkCanvasEditingMode.Ink;
inkCanvas.EditingMode = InkCanvasEditingMode.None;
inkCanvas.Children.Clear();
isInMultiTouchMode = true;
//SymbolIconMultiTouchMode.Symbol = iNKORE.UI.WPF.Modern.Controls.Symbol.Contact;
@ -54,8 +54,8 @@ namespace Ink_Canvas {
TouchDownPointsList[e.TouchDevice.Id] = InkCanvasEditingMode.EraseByPoint;
inkCanvas.EditingMode = InkCanvasEditingMode.EraseByPoint;
} else {
TouchDownPointsList[e.TouchDevice.Id] = InkCanvasEditingMode.Ink;
inkCanvas.EditingMode = InkCanvasEditingMode.Ink;
TouchDownPointsList[e.TouchDevice.Id] = InkCanvasEditingMode.None;
inkCanvas.EditingMode = InkCanvasEditingMode.None;
}
}
@ -63,7 +63,7 @@ namespace Ink_Canvas {
if (inkCanvas.EditingMode == InkCanvasEditingMode.EraseByPoint
|| inkCanvas.EditingMode == InkCanvasEditingMode.EraseByStroke
|| inkCanvas.EditingMode == InkCanvasEditingMode.Select) return;
TouchDownPointsList[e.StylusDevice.Id] = InkCanvasEditingMode.Ink;
TouchDownPointsList[e.StylusDevice.Id] = InkCanvasEditingMode.None;
}
private void MainWindow_StylusUp(object sender, StylusEventArgs e) {
@ -90,7 +90,7 @@ namespace Ink_Canvas {
private void MainWindow_StylusMove(object sender, StylusEventArgs e) {
try {
if (GetTouchDownPointsList(e.StylusDevice.Id) != InkCanvasEditingMode.Ink) return;
if (GetTouchDownPointsList(e.StylusDevice.Id) != InkCanvasEditingMode.None) return;
try {
if (e.StylusDevice.StylusButtons[1].StylusButtonState == StylusButtonState.Down) return;
} catch { }

View File

@ -49,5 +49,5 @@ using System.Windows;
// You can specify all the values or you can default the Build and Revision Numbers
// by using the '*' as shown below:
// [assembly: AssemblyVersion("1.0.*")]
[assembly: AssemblyVersion("5.0.1.0")]
[assembly: AssemblyFileVersion("5.0.1.0")]
[assembly: AssemblyVersion("5.0.2.0")]
[assembly: AssemblyFileVersion("5.0.2.0")]

View File

@ -60,8 +60,8 @@ namespace Ink_Canvas {
}
}
public int RandWaitingTimes = 20;
public int RandWaitingThreadSleepTime = 50;
public int RandWaitingTimes = 100;
public int RandWaitingThreadSleepTime = 5;
public int RandMaxPeopleOneTime = 10;
public int RandDoneAutoCloseWaitTime = 2500;