Add Multi-Touch Ink Canvas support and bug fix

This commit is contained in:
XY Wang 2021-11-21 12:38:54 +08:00
parent 6291a5d933
commit cc55ce0377
6 changed files with 760 additions and 375 deletions

3
.gitignore vendored
View File

@ -3,6 +3,9 @@
##
## Get latest from https://github.com/github/gitignore/blob/master/VisualStudio.gitignore
# Other Projects
Other Projects/
# History Versions
History Versions/

View File

@ -0,0 +1,93 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Ink;
using System.Windows.Input;
using System.Windows.Media;
namespace Ink_Canvas.Helpers
{
public class VisualCanvas : FrameworkElement
{
protected override Visual GetVisualChild(int index)
{
return Visual;
}
protected override int VisualChildrenCount => 1;
public VisualCanvas(DrawingVisual visual)
{
Visual = visual;
AddVisualChild(visual);
}
public DrawingVisual Visual { get; }
}
/// <summary>
/// 用于显示笔迹的类
/// </summary>
public class StrokeVisual : DrawingVisual
{
/// <summary>
/// 创建显示笔迹的类
/// </summary>
public StrokeVisual() : this(new DrawingAttributes()
{
Color = Colors.Red,
//FitToCurve = true,
Width = 3,
Height = 3
})
{
}
/// <summary>
/// 创建显示笔迹的类
/// </summary>
/// <param name="drawingAttributes"></param>
public StrokeVisual(DrawingAttributes drawingAttributes)
{
_drawingAttributes = drawingAttributes;
}
/// <summary>
/// 设置或获取显示的笔迹
/// </summary>
public Stroke Stroke { set; get; }
/// <summary>
/// 在笔迹中添加点
/// </summary>
/// <param name="point"></param>
public void Add(StylusPoint point)
{
if (Stroke == null)
{
var collection = new StylusPointCollection { point };
Stroke = new Stroke(collection) { DrawingAttributes = _drawingAttributes };
}
else
{
Stroke.StylusPoints.Add(point);
}
}
/// <summary>
/// 重新画出笔迹
/// </summary>
public void Redraw()
{
using (var dc = RenderOpen())
{
Stroke.Draw(dc);
}
}
private readonly DrawingAttributes _drawingAttributes;
}
}

View File

@ -128,6 +128,7 @@
</Compile>
<Compile Include="Helpers\InkRecognizeHelper.cs" />
<Compile Include="Helpers\LogHelper.cs" />
<Compile Include="Helpers\MultiTouchInput.cs" />
<Compile Include="NamesInputWindow.xaml.cs">
<DependentUpon>NamesInputWindow.xaml</DependentUpon>
</Compile>

View File

@ -29,7 +29,7 @@
</Window.CommandBindings>
<Grid x:Name="Main_Grid" Background="#01FFFFFF" PreviewKeyDown="Main_Grid_PreviewKeyDown">
<Grid Name="GridBackgroundCoverHolder">
<Grid Name="GridBackgroundCover" Visibility="Hidden" Background="#1F1F1F"/>
<Grid Name="GridBackgroundCover" Visibility="Visible" Background="#1F1F1F"/>
</Grid>
<Canvas Name="Canvas"/>
<Label Name="Label" Visibility="Collapsed" Content="0"/>
@ -86,11 +86,47 @@
</Grid>
</Grid>
<Grid Visibility="{Binding ElementName=GridBackgroundCoverHolder, Path=Visibility}">
<Viewbox Visibility="{Binding ElementName=GridBackgroundCover, Path=Visibility}" Opacity="0.7" Margin="10" Height="50" HorizontalAlignment="Right" VerticalAlignment="Bottom">
<ui:SimpleStackPanel Orientation="Horizontal" Spacing="5">
<Border Width="36" Height="36" MouseUp="BtnWhiteBoardAdd_Click" CornerRadius="5" Background="#9FFFFFFF" BorderThickness="1" BorderBrush="#BF666666">
<Viewbox Margin="8">
<ui:SymbolIcon Symbol="Add" Foreground="#FF666666" />
</Viewbox>
</Border>
<Border Width="36" MouseUp="BtnWhiteBoardSwitchPrevious_Click" Height="36" CornerRadius="5" Background="#9FFFFFFF" BorderThickness="1" BorderBrush="#BF666666">
<Grid Margin="6">
<Image Visibility="Collapsed" Source="{DynamicResource ResourceKey=SeewoImageSource.HorizontalPreviousSlideSelected}"/>
<Image Source="{DynamicResource ResourceKey=SeewoImageSource.HorizontalPreviousSlideNormal}"/>
</Grid>
</Border>
<Border Height="36" CornerRadius="2" Margin="0,0">
<TextBlock Text="{Binding ElementName=TextBlockWhiteBoardIndexInfo, Path=Text}"
Foreground="White"
VerticalAlignment="Center" HorizontalAlignment="Center"
FontFamily="Microsoft YaHei UI" FontSize="12"/>
</Border>
<Border Width="36" MouseUp="BtnWhiteBoardSwitchNext_Click" Height="36" CornerRadius="5" Background="#9FFFFFFF" BorderThickness="1" BorderBrush="#BF666666">
<Grid Margin="6">
<Image Visibility="Collapsed" Source="{DynamicResource ResourceKey=SeewoImageSource.HorizontalNextSlideSelected}"/>
<Image Source="{DynamicResource ResourceKey=SeewoImageSource.HorizontalNextSlideNormal}"/>
</Grid>
</Border>
</ui:SimpleStackPanel>
</Viewbox>
<Viewbox Visibility="{Binding ElementName=GridBackgroundCover, Path=Visibility}" Opacity="0.7" Margin="10" Height="50" HorizontalAlignment="Left" VerticalAlignment="Bottom">
<ui:SimpleStackPanel Orientation="Horizontal" Spacing="5">
<Border Width="36" Height="36" MouseUp="BorderMultiTouchMode_MouseUp" CornerRadius="5" Background="#9FFFFFFF" BorderThickness="1" BorderBrush="#BF666666">
<Viewbox Margin="8">
<ui:SymbolIcon Name="SymbolIconMultiTouchMode" Symbol="People" Foreground="#FF666666" />
</Viewbox>
</Border>
</ui:SimpleStackPanel>
</Viewbox>
<ui:SimpleStackPanel Spacing="10" Orientation="Horizontal"
VerticalAlignment="Bottom"
HorizontalAlignment="Right"
Height="50" Margin="10"
Visibility="{Binding ElementName=GridBackgroundCover, Path=Visibility}">
Visibility="Collapsed">
<Button Name="BtnWhiteBoardAdd" FontFamily="Microsoft YaHei UI"
Width="50" Height="48" FontSize="26" Click="BtnWhiteBoardAdd_Click"
Foreground="{Binding ElementName=BtnExit, Path=Foreground}"
@ -224,6 +260,7 @@
<ComboBoxItem Content="模拟笔锋(根据速度计算)" FontFamily="Microsoft YaHei UI"/>
<ComboBoxItem Content="无笔锋" FontFamily="Microsoft YaHei UI"/>
</ComboBox>
<ui:ToggleSwitch Header="手指模式" IsOn="{Binding ElementName=ToggleSwitchModeFinger, Path=IsOn}" FontFamily="Microsoft YaHei UI" OnContent="开" OffContent="关"/>
</ui:SimpleStackPanel>
</GroupBox>
<GroupBox Header="手势">
@ -262,6 +299,11 @@
</StackPanel>
</ui:SimpleStackPanel>
</GroupBox>
<GroupBox Name="GroupBoxAppearanceNewUI" Header="外观">
<ui:SimpleStackPanel Spacing="12">
<ui:ToggleSwitch Header="显示“橡皮”按钮" IsOn="{Binding ElementName=ToggleSwitchShowButtonEraser, Path=IsOn}" FontFamily="Microsoft YaHei UI" OnContent="开" OffContent="关"/>
</ui:SimpleStackPanel>
</GroupBox>
<GroupBox Header="高级">
<ui:SimpleStackPanel Spacing="12">
<TextBlock Text="可在手指触摸画板时显示圆形橡皮或手掌触摸画板时显示的橡皮比&#x000A;手掌大很多时开启" Foreground="#666666"/>
@ -615,14 +657,14 @@
<Grid Visibility="{Binding ElementName=StackPanelPPTControls, Path=Visibility}">
<Viewbox Name="ViewboxPPTSidesControl" Visibility="{Binding ElementName=StackPanelPPTButtons, Path=Visibility}" Opacity="0.7" Margin="10" Height="50" HorizontalAlignment="Left" VerticalAlignment="Bottom">
<ui:SimpleStackPanel Orientation="Horizontal" Spacing="5">
<Border Width="36" Height="36" CornerRadius="5" Background="#9FFFFFFF" BorderThickness="1" BorderBrush="#BF666666">
<Grid Margin="6" MouseUp="GridPPTControlPrevious_MouseUp">
<Border Width="36" MouseUp="GridPPTControlPrevious_MouseUp" Height="36" CornerRadius="5" Background="#9FFFFFFF" BorderThickness="1" BorderBrush="#BF666666">
<Grid Margin="6">
<Image Name="ImagePPTControlPreviousPressed" Visibility="Collapsed" Source="{DynamicResource ResourceKey=SeewoImageSource.HorizontalPreviousSlideSelected}"/>
<Image Source="{DynamicResource ResourceKey=SeewoImageSource.HorizontalPreviousSlideNormal}"/>
</Grid>
</Border>
<Border Width="36" Height="36" CornerRadius="5" Background="#9FFFFFFF" BorderThickness="1" BorderBrush="#BF666666">
<Grid Margin="6" MouseUp="GridPPTControlNext_MouseUp">
<Border Width="36" MouseUp="GridPPTControlNext_MouseUp" Height="36" CornerRadius="5" Background="#9FFFFFFF" BorderThickness="1" BorderBrush="#BF666666">
<Grid Margin="6">
<Image Name="ImagePPTControlNextPressed" Visibility="Collapsed" Source="{DynamicResource ResourceKey=SeewoImageSource.HorizontalNextSlideSelected}"/>
<Image Source="{DynamicResource ResourceKey=SeewoImageSource.HorizontalNextSlideNormal}"/>
</Grid>
@ -631,13 +673,13 @@
</Viewbox>
<Viewbox Visibility="{Binding ElementName=StackPanelPPTButtons, Path=Visibility}" Opacity="{Binding ElementName=ViewboxPPTSidesControl, Path=Opacity}" Margin="10" Height="50" HorizontalAlignment="Right" VerticalAlignment="Bottom">
<ui:SimpleStackPanel Orientation="Horizontal" Spacing="5">
<Border Width="36" Height="36" CornerRadius="5" Background="#9FFFFFFF" BorderThickness="1" BorderBrush="#BF666666">
<Grid Margin="6" MouseUp="GridPPTControlPrevious_MouseUp">
<Border Width="36" MouseUp="GridPPTControlPrevious_MouseUp" Height="36" CornerRadius="5" Background="#9FFFFFFF" BorderThickness="1" BorderBrush="#BF666666">
<Grid Margin="6">
<Image Source="{DynamicResource ResourceKey=SeewoImageSource.HorizontalPreviousSlideNormal}"/>
</Grid>
</Border>
<Border Width="36" Height="36" CornerRadius="5" Background="#9FFFFFFF" BorderThickness="1" BorderBrush="#BF666666">
<Grid Margin="6" MouseUp="GridPPTControlNext_MouseUp">
<Border Width="36" MouseUp="GridPPTControlNext_MouseUp" Height="36" CornerRadius="5" Background="#9FFFFFFF" BorderThickness="1" BorderBrush="#BF666666">
<Grid Margin="6">
<Image Source="{DynamicResource ResourceKey=SeewoImageSource.HorizontalNextSlideNormal}"/>
</Grid>
</Border>
@ -710,6 +752,18 @@
</Viewbox>
</Border>
</ui:SimpleStackPanel>
<Grid Width="20" Height="24" Margin="0,0,-2,0" MouseUp="ImageEraser_MouseUp" Visibility="{Binding ElementName=BtnErase, Path=Visibility}">
<Image Margin="-2" Source="{DynamicResource ImageSource.RubberNormal}" RenderTransformOrigin="0.5,0.5">
<Image.RenderTransform>
<TransformGroup>
<ScaleTransform/>
<SkewTransform/>
<RotateTransform Angle="-45"/>
<TranslateTransform/>
</TransformGroup>
</Image.RenderTransform>
</Image>
</Grid>
<Grid Margin="0,0,0,0" Width="20">
<ui:SymbolIcon Symbol="Delete" Foreground="#666666" MouseUp="SymbolIconDelete_MouseUp"/>
<Border x:Name="BorderClearInDelete" Visibility="Collapsed" Background="White" BorderBrush="#BF666666" BorderThickness="1"
@ -735,7 +789,7 @@
</Viewbox>
</ui:SimpleStackPanel>
<ui:SimpleStackPanel Orientation="{Binding ElementName=StackPanelFloatingBar, Path=Orientation}">
<Grid Width="20" Height="24" Margin="2,0,12,2">
<Grid Width="20" Height="24" Margin="2,0,12,1">
<Image Margin="-8" MouseUp="ImageBlackboard_MouseUp">
<Image.Source>
<DrawingImage>

File diff suppressed because it is too large Load Diff

View File

@ -51,5 +51,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("3.0.0.1")]
[assembly: AssemblyFileVersion("3.0.0.1")]
[assembly: AssemblyVersion("3.0.1.0")]
[assembly: AssemblyFileVersion("3.0.1.0")]