Merge branch 'master' of https://github.com/WXRIW/Ink-Canvas into feat/TimeMachine

# Conflicts:
#	Ink Canvas/MainWindow.xaml.cs
This commit is contained in:
Raspberry-Monster 2023-04-23 03:02:40 +08:00
commit 2baa23fcc8
No known key found for this signature in database
GPG Key ID: 9A0D725BB122D507
3 changed files with 343 additions and 137 deletions

View File

@ -381,11 +381,6 @@
<Button Content="立即退出" Width="168" FontFamily="Microsoft YaHei UI" Click="BtnExit_Click" Margin="0,0,0,10"/>
</ui:SimpleStackPanel>
<ui:ToggleSwitch Name="ToggleSwitchRunAtStartup" Header="开机时运行" FontFamily="Microsoft YaHei UI" OnContent="开" OffContent="关" Toggled="ToggleSwitchRunAtStartup_Toggled"/>
<TextBlock Text="我们并不推荐使用 WPS Office因为其对于触摸设备的较差支持。" Foreground="#666666"/>
<ui:ToggleSwitch Name="ToggleSwitchSupportPowerPoint" Header="Microsoft PowerPoint 支持" IsOn="True" FontFamily="Microsoft YaHei UI" OnContent="开" OffContent="关" Toggled="ToggleSwitchSupportPowerPoint_Toggled"/>
<TextBlock Text="对 WPS Office 支持时会导致 WPS Office 关闭时卡顿,仅测试用。" Foreground="#666666"/>
<ui:ToggleSwitch Name="ToggleSwitchSupportWPS" Header="WPS Office 支持" IsOn="False" IsEnabled="True" FontFamily="Microsoft YaHei UI" OnContent="开" OffContent="关" Toggled="ToggleSwitchSupportWPS_Toggled"/>
<ui:ToggleSwitch Name="ToggleSwitchShowCanvasAtNewSlideShow" Header="开始放映时自动显示画板" IsOn="True" FontFamily="Microsoft YaHei UI" OnContent="开" OffContent="关" Toggled="ToggleSwitchShowCanvasAtNewSlideShow_Toggled"/>
</ui:SimpleStackPanel>
</GroupBox>
<GroupBox Header="启动">
@ -436,9 +431,6 @@
<ui:ToggleSwitch Name="ToggleSwitchEnableTwoFingerRotation" Header="允许双指旋转" FontFamily="Microsoft YaHei UI" OnContent="开" OffContent="关" Toggled="ToggleSwitchEnableTwoFingerRotation_Toggled"/>
<TextBlock Text="允许选中墨迹后对墨迹进行双指或多指缩放操作(此设置不受“允许双指旋转”设置的影响)" TextWrapping="Wrap" Foreground="#666666"/>
<ui:ToggleSwitch Name="ToggleSwitchEnableTwoFingerRotationOnSelection" Header="允许双指旋转选中的墨迹" FontFamily="Microsoft YaHei UI" OnContent="开" OffContent="关" Toggled="ToggleSwitchEnableTwoFingerRotation_Toggled"/>
<ui:ToggleSwitch Name="ToggleSwitchEnableTwoFingerGestureInPresentationMode" Header="允许幻灯片模式下的双指手势" FontFamily="Microsoft YaHei UI" OnContent="开" OffContent="关" Toggled="ToggleSwitchEnableTwoFingerGestureInPresentationMode_Toggled"/>
<TextBlock Text="允许开启画板时使用手指手势进行幻灯片翻页(启用后,在幻灯片放映模式下,当画板无墨迹时,使用手指(笔尖或手掌无法识别)左右滑动即可控制幻灯片翻页。)" TextWrapping="Wrap" Foreground="#666666"/>
<ui:ToggleSwitch Name="ToggleSwitchEnableFingerGestureSlideShowControl" Header="允许使用手指手势进行幻灯片翻页" FontFamily="Microsoft YaHei UI" OnContent="开" OffContent="关" IsOn="True" Toggled="ToggleSwitchEnableFingerGestureSlideShowControl_Toggled"/>
</ui:SimpleStackPanel>
</GroupBox>
<GroupBox Header="墨迹识别 (Beta)">
@ -477,10 +469,49 @@
<ui:ToggleSwitch Name="ToggleSwitchShowButtonPPTNavigation" Header="显示 PPT 浏览切页按钮" IsOn="True" FontFamily="Microsoft YaHei UI" OnContent="开" OffContent="关" Toggled="ToggleSwitchShowButtonPPTNavigation_OnToggled"/>
</ui:SimpleStackPanel>
</GroupBox>
<GroupBox Header="PowerPoint 集成">
<ui:SimpleStackPanel Spacing="12">
<TextBlock Text="此分区的设置项将会在幻灯片播放时使用,优先级高于其他设置项" Foreground="#666666"/>
<ui:ToggleSwitch Name="ToggleSwitchSupportPowerPoint" Header="Microsoft PowerPoint 支持" IsOn="True" FontFamily="Microsoft YaHei UI" OnContent="开" OffContent="关" Toggled="ToggleSwitchSupportPowerPoint_Toggled"/>
<TextBlock Text="我们并不推荐使用 WPS Office因为其对于触摸设备的较差支持。" Foreground="#666666"/>
<TextBlock Text="对 WPS Office 支持时会导致 WPS Office 关闭时卡顿,仅测试用。" Foreground="#666666"/>
<ui:ToggleSwitch Name="ToggleSwitchSupportWPS" Header="WPS Office 支持" IsOn="False" IsEnabled="True" FontFamily="Microsoft YaHei UI" OnContent="开" OffContent="关" Toggled="ToggleSwitchSupportWPS_Toggled"/>
<Grid />
<ui:ToggleSwitch Name="ToggleSwitchShowCanvasAtNewSlideShow" Header="开始放映时自动启动画板" IsOn="True" FontFamily="Microsoft YaHei UI" OnContent="开" OffContent="关" Toggled="ToggleSwitchShowCanvasAtNewSlideShow_Toggled"/>
<ui:ToggleSwitch Name="ToggleSwitchEnableTwoFingerGestureInPresentationMode" Header="允许幻灯片模式下的双指手势" FontFamily="Microsoft YaHei UI" OnContent="开" OffContent="关" Toggled="ToggleSwitchEnableTwoFingerGestureInPresentationMode_Toggled"/>
<TextBlock Text="允许开启画板时使用手指手势进行幻灯片翻页(启用后,在幻灯片放映模式下,当画板无墨迹时,使用手指(笔尖或手掌无法识别)左右滑动即可控制幻灯片翻页。)" TextWrapping="Wrap" Foreground="#666666"/>
<ui:ToggleSwitch Name="ToggleSwitchEnableFingerGestureSlideShowControl" Header="允许使用手指手势进行幻灯片翻页" FontFamily="Microsoft YaHei UI" OnContent="开" OffContent="关" IsOn="True" Toggled="ToggleSwitchEnableFingerGestureSlideShowControl_Toggled"/>
<ui:ToggleSwitch Name="ToggleSwitchAutoSaveScreenShotInPowerPoint" Header="自动幻灯片截屏" IsOn="True" FontFamily="Microsoft YaHei UI" OnContent="开" OffContent="关" Toggled="ToggleSwitchAutoSaveScreenShotInPowerPoint_Toggled"/>
<TextBlock Text="开启后将在结束幻灯片放映时自动将已有墨迹保存至此电脑,并在下次打开时自动加载(文件名和幻灯片页数都要相同)" TextWrapping="Wrap" Foreground="#666666"/>
<ui:ToggleSwitch Name="ToggleSwitchAutoSaveStrokesInPowerPoint" Header="自动保存幻灯片墨迹" IsOn="True" FontFamily="Microsoft YaHei UI" OnContent="开" OffContent="关" Toggled="ToggleSwitchAutoSaveStrokesInPowerPoint_Toggled"/>
<ui:ToggleSwitch Name="ToggleSwitchNotifyPreviousPage" Header="记忆并提示上次播放位置" IsOn="True" FontFamily="Microsoft YaHei UI" OnContent="开" OffContent="关" Toggled="ToggleSwitchNotifyPreviousPage_Toggled"/>
<ui:ToggleSwitch Name="ToggleSwitchNotifyHiddenPage" Header="提示隐藏幻灯片" IsOn="True" FontFamily="Microsoft YaHei UI" OnContent="开" OffContent="关" Toggled="ToggleSwitchNotifyHiddenPage_Toggled"/>
<ui:ToggleSwitch Name="ToggleSwitchNoStrokeClearInPowerPoint" Header="进入鼠标模式不清除笔迹" IsOn="True" FontFamily="Microsoft YaHei UI" OnContent="开" OffContent="关" Toggled="ToggleSwitchNoStrokeClearInPowerPoint_Toggled"/>
<ui:ToggleSwitch Name="ToggleSwitchShowStrokeOnSelectInPowerPoint" Header="进入鼠标模式不隐藏笔迹" IsOn="True" FontFamily="Microsoft YaHei UI" OnContent="开" OffContent="关" Toggled="ToggleSwitchShowStrokeOnSelectInPowerPoint_Toggled"/>
</ui:SimpleStackPanel>
</GroupBox>
<GroupBox Header="高级">
<ui:SimpleStackPanel Spacing="12">
<TextBlock Text="可在手指触摸画板时显示圆形橡皮或手掌触摸画板时显示的橡皮比&#x000A;手掌大很多时开启" Foreground="#666666"/>
<ui:ToggleSwitch Name="ToggleSwitchIsSpecialScreen" Header="特殊屏幕模式" FontFamily="Microsoft YaHei UI" OnContent="开" OffContent="关" Toggled="ToggleSwitchIsSpecialScreen_Toggled"/>
<TextBlock Text="可在手指触摸画板时显示圆形橡皮或手掌触摸画板时显示的橡皮比&#x000A;手掌大很多时调整" Foreground="#666666"/>
<ui:ToggleSwitch Name="ToggleSwitchIsSpecialScreen" Header="特殊屏幕模式" FontFamily="Microsoft YaHei UI" OnContent="开" OffContent="关" Toggled="ToggleSwitchIsSpecialScreen_OnToggled"/>
<StackPanel Orientation="Horizontal">
<Slider x:Name="TouchMultiplierSlider"
HorizontalAlignment="Left"
Minimum="0" Maximum="1"
Width="300" FontFamily="Microsoft YaHei UI"
ui:ControlHelper.Header="触摸大小倍数"
IsSnapToTickEnabled="True"
TickFrequency="0.05" TickPlacement="Both"
ValueChanged="TouchMultiplierSlider_ValueChanged"
Visibility="Collapsed"/>
<TextBlock Text="{Binding Value, ElementName=TouchMultiplierSlider, Mode=OneWay}"
VerticalAlignment="Bottom" Margin="10,0,0,8"
FontSize="14" Width="30" HorizontalAlignment="Center"
Visibility="{Binding Path=Visibility, ElementName=TouchMultiplierSlider, Mode=OneWay}"/>
</StackPanel>
<ui:ToggleSwitch Name="ToggleSwitchEraserBindTouchMultiplier" Header="橡皮擦绑定触摸大小倍数" FontFamily="Microsoft YaHei UI" OnContent="开" OffContent="关" IsOn="False" Toggled="ToggleSwitchEraserBindTouchMultiplier_Toggled" Visibility="{Binding Path=Visibility, ElementName=TouchMultiplierSlider, Mode=OneWay}"/>
<ui:ToggleSwitch Name="ToggleSwitchIsLogEnabled" Header="记录日志" FontFamily="Microsoft YaHei UI" OnContent="开" OffContent="关" IsOn="True" Toggled="ToggleSwitchIsLogEnabled_Toggled"/>
</ui:SimpleStackPanel>
</GroupBox>
@ -511,9 +542,6 @@
<ui:ToggleSwitch Name="ToggleSwitchAutoSaveStrokesAtScreenshot" Header="截图时自动保存墨迹" IsOn="False" FontFamily="Microsoft YaHei UI" OnContent="开" OffContent="关" Toggled="ToggleSwitchAutoSaveStrokesAtScreenshot_Toggled"/>
<ui:ToggleSwitch Name="ToggleSwitchAutoSaveStrokesAtClear" Header="清屏时自动截图" IsOn="False" FontFamily="Microsoft YaHei UI" OnContent="开" OffContent="关" Toggled="ToggleSwitchAutoSaveStrokesAtClear_Toggled"/>
<ui:ToggleSwitch Name="ToggleSwitchClearExitingWritingMode" Header="切换到鼠标模式后自动清屏" IsOn="False" FontFamily="Microsoft YaHei UI" OnContent="开" OffContent="关" Toggled="ToggleSwitchExitingWritingMode_Toggled"/>
<ui:ToggleSwitch Name="ToggleSwitchAutoSaveScreenShotInPowerPoint" Header="自动幻灯片截屏" IsOn="True" FontFamily="Microsoft YaHei UI" OnContent="开" OffContent="关" Toggled="ToggleSwitchAutoSaveScreenShotInPowerPoint_Toggled"/>
<TextBlock Text="开启后将在结束幻灯片放映时自动将已有墨迹保存至此电脑,并在下次打开时自动加载(文件名和幻灯片页数都要相同)" TextWrapping="Wrap" Foreground="#666666"/>
<ui:ToggleSwitch Name="ToggleSwitchAutoSaveStrokesInPowerPoint" Header="自动保存幻灯片墨迹" IsOn="True" FontFamily="Microsoft YaHei UI" OnContent="开" OffContent="关" Toggled="ToggleSwitchAutoSaveStrokesInPowerPoint_Toggled"/>
<Slider x:Name="SideControlMinimumAutomationSlider"
HorizontalAlignment="Left"
Minimum="0" Maximum="10"
@ -539,7 +567,7 @@
<Bold>开发者:</Bold> XY Wang (WXRIW)
</TextBlock>
<TextBlock FontSize="14">
<Bold>贡献者:</Bold> Kengwang, jiajiaxd, CN-Ironegg
<Bold>贡献者:</Bold> Kengwang, jiajiaxd, CN-Ironegg, Raspberry Kan
</TextBlock>
<TextBlock FontSize="14">
<Bold>开源地址:</Bold>

View File

@ -25,6 +25,7 @@ using System.Windows.Input;
using System.Windows.Input.StylusPlugIns;
using System.Windows.Media;
using System.Windows.Media.Animation;
using System.Windows.Threading;
using Application = System.Windows.Application;
using File = System.IO.File;
using MessageBox = System.Windows.MessageBox;
@ -626,8 +627,8 @@ namespace Ink_Canvas
}
PptNavigationBtn.Visibility =
Settings.Appearance.IsShowPPTNavigation ? Visibility.Visible : Visibility.Collapsed;
ToggleSwitchShowButtonPPTNavigation.IsOn = Settings.Appearance.IsShowPPTNavigation;
Settings.PowerPointSettings.IsShowPPTNavigation ? Visibility.Visible : Visibility.Collapsed;
ToggleSwitchShowButtonPPTNavigation.IsOn = Settings.PowerPointSettings.IsShowPPTNavigation;
if (Settings.Appearance.IsShowHideControlButton)
{
BtnHideControl.Visibility = Visibility.Visible;
@ -676,7 +677,7 @@ namespace Ink_Canvas
}
}
if (Settings.Behavior.PowerPointSupport)
if (Settings.PowerPointSettings.PowerPointSupport)
{
ToggleSwitchSupportPowerPoint.IsOn = true;
timerCheckPPT.Start();
@ -686,7 +687,7 @@ namespace Ink_Canvas
ToggleSwitchSupportPowerPoint.IsOn = false;
timerCheckPPT.Stop();
}
if (Settings.Behavior.IsShowCanvasAtNewSlideShow)
if (Settings.PowerPointSettings.IsShowCanvasAtNewSlideShow)
{
ToggleSwitchShowCanvasAtNewSlideShow.IsOn = true;
}
@ -723,7 +724,7 @@ namespace Ink_Canvas
{
ToggleSwitchEnableTwoFingerRotationOnSelection.IsOn = false;
}
if (Settings.Gesture.IsEnableTwoFingerGestureInPresentationMode)
if (Settings.PowerPointSettings.IsEnableTwoFingerGestureInPresentationMode)
{
ToggleSwitchEnableTwoFingerGestureInPresentationMode.IsOn = true;
}
@ -731,7 +732,7 @@ namespace Ink_Canvas
{
ToggleSwitchEnableTwoFingerGestureInPresentationMode.IsOn = false;
}
if (Settings.Gesture.IsEnableFingerGestureSlideShowControl)
if (Settings.PowerPointSettings.IsEnableFingerGestureSlideShowControl)
{
ToggleSwitchEnableFingerGestureSlideShowControl.IsOn = true;
}
@ -831,7 +832,7 @@ namespace Ink_Canvas
ToggleSwitchAutoSaveStrokesAtScreenshot.IsOn = false;
}
if (Settings.Automation.IsAutoSaveStrokesInPowerPoint)
if (Settings.PowerPointSettings.IsAutoSaveStrokesInPowerPoint)
{
ToggleSwitchAutoSaveStrokesInPowerPoint.IsOn = true;
}
@ -840,6 +841,42 @@ namespace Ink_Canvas
ToggleSwitchAutoSaveStrokesInPowerPoint.IsOn = false;
}
if (Settings.PowerPointSettings.IsNotifyPreviousPage)
{
ToggleSwitchNotifyPreviousPage.IsOn = true;
}
else
{
ToggleSwitchNotifyPreviousPage.IsOn = false;
}
if (Settings.PowerPointSettings.IsNotifyHiddenPage)
{
ToggleSwitchNotifyHiddenPage.IsOn = true;
}
else
{
ToggleSwitchNotifyHiddenPage.IsOn = false;
}
if (Settings.PowerPointSettings.IsNoClearStrokeOnSelectWhenInPowerPoint)
{
ToggleSwitchNoStrokeClearInPowerPoint.IsOn = true;
}
else
{
ToggleSwitchNoStrokeClearInPowerPoint.IsOn = false;
}
if (Settings.PowerPointSettings.IsShowStrokeOnSelectInPowerPoint)
{
ToggleSwitchShowStrokeOnSelectInPowerPoint.IsOn = true;
}
else
{
ToggleSwitchShowStrokeOnSelectInPowerPoint.IsOn = false;
}
SideControlMinimumAutomationSlider.Value = Settings.Automation.MinimumAutomationStrokeNumber;
if (Settings.Canvas.HideStrokeWhenSelecting)
@ -868,7 +905,7 @@ namespace Ink_Canvas
BtnSwitchTheme.Content = "深色";
}
BtnSwitchTheme_Click(null , null);
if (Settings.Automation.IsAutoSaveScreenShotInPowerPoint)
if (Settings.PowerPointSettings.IsAutoSaveScreenShotInPowerPoint)
{
ToggleSwitchAutoSaveScreenShotInPowerPoint.IsOn = true;
}
@ -884,14 +921,7 @@ namespace Ink_Canvas
if (Settings.Advanced != null)
{
if (Settings.Advanced.IsSpecialScreen)
{
ToggleSwitchIsSpecialScreen.IsOn = true;
}
else
{
ToggleSwitchIsSpecialScreen.IsOn = false;
}
TouchMultiplierSlider.Value=Settings.Advanced.TouchMultiplier;
if (Settings.Advanced.IsLogEnabled)
{
ToggleSwitchIsLogEnabled.IsOn = true;
@ -900,6 +930,24 @@ namespace Ink_Canvas
{
ToggleSwitchIsLogEnabled.IsOn = false;
}
if (Settings.Advanced.EraserBindTouchMultiplier)
{
ToggleSwitchEraserBindTouchMultiplier.IsOn = true;
}
else
{
ToggleSwitchEraserBindTouchMultiplier.IsOn = false;
}
if (Settings.Advanced.IsSpecialScreen)
{
ToggleSwitchIsSpecialScreen.IsOn = true;
}
else
{
ToggleSwitchIsSpecialScreen.IsOn = false;
}
TouchMultiplierSlider.Visibility = ToggleSwitchIsSpecialScreen.IsOn ? Visibility.Visible : Visibility.Collapsed;
}
else
{
@ -1304,21 +1352,25 @@ namespace Ink_Canvas
}
else
{
// Auto-clear Strokes
// 很烦, 要重新来, 要等待截图完成再清理笔记
if (BtnPPTSlideShowEnd.Visibility != Visibility.Visible)
{
if (isLoaded && Settings.Automation.IsAutoClearWhenExitingWritingMode)
{
if (inkCanvas.Strokes.Count > 0)
{
if (Settings.Automation.IsAutoSaveStrokesAtClear && inkCanvas.Strokes.Count > Settings.Automation.MinimumAutomationStrokeNumber)
if (Settings.Automation.IsAutoSaveStrokesAtClear && inkCanvas.Strokes.Count >
Settings.Automation.MinimumAutomationStrokeNumber)
{
SaveScreenShot(true);
}
BtnClear_Click(BtnClear, null);
}
}
Main_Grid.Background = Brushes.Transparent;
if (Settings.Canvas.HideStrokeWhenSelecting)
inkCanvas.Visibility = Visibility.Collapsed;
else
@ -1326,6 +1378,45 @@ namespace Ink_Canvas
inkCanvas.IsHitTestVisible = false;
inkCanvas.Visibility = Visibility.Visible;
}
}
else
{
if (isLoaded && Settings.Automation.IsAutoClearWhenExitingWritingMode && !Settings.PowerPointSettings.IsNoClearStrokeOnSelectWhenInPowerPoint)
{
if (inkCanvas.Strokes.Count > 0)
{
if (Settings.Automation.IsAutoSaveStrokesAtClear && inkCanvas.Strokes.Count >
Settings.Automation.MinimumAutomationStrokeNumber)
{
SaveScreenShot(true);
}
BtnClear_Click(BtnClear, null);
}
}
if (Settings.PowerPointSettings.IsShowStrokeOnSelectInPowerPoint)
{
inkCanvas.Visibility = Visibility.Visible;
inkCanvas.IsHitTestVisible = true;
}
else
{
if (Settings.Canvas.HideStrokeWhenSelecting)
inkCanvas.Visibility = Visibility.Collapsed;
else
{
inkCanvas.IsHitTestVisible = false;
inkCanvas.Visibility = Visibility.Visible;
}
}
}
Main_Grid.Background = Brushes.Transparent;
GridBackgroundCoverHolder.Visibility = Visibility.Collapsed;
if (currentMode != 0)
@ -1730,8 +1821,9 @@ namespace Ink_Canvas
MouseTouchMove(iniP);
}
inkCanvas.Opacity = 1;
double boundsWidth = GetTouchBoundWidth(e);
var eraserMultiplier = 1d;
if (!Settings.Advanced.EraserBindTouchMultiplier && Settings.Advanced.IsSpecialScreen) eraserMultiplier = 1 / Settings.Advanced.TouchMultiplier;
if (boundsWidth > BoundsWidth)
{
isLastTouchEraser = true;
@ -1754,12 +1846,12 @@ namespace Ink_Canvas
k = 1.8;
break;
}
inkCanvas.EraserShape = new EllipseStylusShape(boundsWidth * 1.5 * k, boundsWidth * 1.5 * k);
inkCanvas.EraserShape = new EllipseStylusShape(boundsWidth * 1.5 * k * eraserMultiplier, boundsWidth * 1.5 * k * eraserMultiplier);
inkCanvas.EditingMode = InkCanvasEditingMode.EraseByPoint;
}
else
{
if (StackPanelPPTControls.Visibility == Visibility.Visible && inkCanvas.Strokes.Count == 0 && Settings.Gesture.IsEnableFingerGestureSlideShowControl)
if (StackPanelPPTControls.Visibility == Visibility.Visible && inkCanvas.Strokes.Count == 0 && Settings.PowerPointSettings.IsEnableFingerGestureSlideShowControl)
{
isLastTouchEraser = false;
inkCanvas.EditingMode = InkCanvasEditingMode.GestureOnly;
@ -1785,8 +1877,9 @@ namespace Ink_Canvas
public double GetTouchBoundWidth(TouchEventArgs e)
{
double value = e.GetTouchPoint(null).Bounds.Width;
if (Settings.Advanced.IsSpecialScreen) value /= 3.75;
var args = e.GetTouchPoint(null).Bounds;
double value = args.Width;
if (Settings.Advanced.IsSpecialScreen) value *= Settings.Advanced.TouchMultiplier;
return value;
}
@ -1871,7 +1964,7 @@ namespace Ink_Canvas
private void Main_Grid_ManipulationDelta(object sender, ManipulationDeltaEventArgs e)
{
if (isInMultiTouchMode || !Settings.Gesture.IsEnableTwoFingerZoom) return;
if ((dec.Count >= 2 && (Settings.Gesture.IsEnableTwoFingerGestureInPresentationMode || StackPanelPPTControls.Visibility != Visibility.Visible || StackPanelPPTButtons.Visibility == Visibility.Collapsed)) || isSingleFingerDragMode)
if ((dec.Count >= 2 && (Settings.PowerPointSettings.IsEnableTwoFingerGestureInPresentationMode || StackPanelPPTControls.Visibility != Visibility.Visible || StackPanelPPTButtons.Visibility == Visibility.Collapsed)) || isSingleFingerDragMode)
{
ManipulationDelta md = e.DeltaManipulation;
Vector trans = md.Translation; // 获得位移矢量
@ -2052,19 +2145,21 @@ namespace Ink_Canvas
}
}
if (pptApplication == null) throw new Exception();
if (pptApplication == null) return;
//BtnCheckPPT.Visibility = Visibility.Collapsed;
// 跳转到上次播放页
Application.Current.Dispatcher.Invoke(() =>
if (Settings.PowerPointSettings.IsNotifyPreviousPage)
Application.Current.Dispatcher.BeginInvoke(() =>
{
string defaultFolderPath = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments) + @"\Ink Canvas Strokes\Auto Saved\Presentations\";
string defaultFolderPath = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments) +
@"\Ink Canvas Strokes\Auto Saved\Presentations\";
string folderPath = defaultFolderPath + presentation.Name + "_" + presentation.Slides.Count;
if (File.Exists(folderPath + "/position"))
{
if (int.TryParse(File.ReadAllText(folderPath + "/position"), out var page))
{
IsShowingRestoreHiddenSlidesWindow = true;
if (page <= 0 ) return;
new YesOrNoNotificationWindow($"上次播放到了第 {page} 页, 是否立即跳转", () =>
{
if (pptApplication.SlideShowWindows.Count >= 1)
@ -2079,10 +2174,12 @@ namespace Ink_Canvas
}).ShowDialog();
}
}
});
}, DispatcherPriority.Normal);
//检查是否有隐藏幻灯片
if (Settings.PowerPointSettings.IsNotifyHiddenPage)
{
bool isHaveHiddenSlide = false;
foreach (Slide slide in slides)
{
@ -2092,7 +2189,8 @@ namespace Ink_Canvas
break;
}
}
Application.Current.Dispatcher.Invoke(() =>
Application.Current.Dispatcher.BeginInvoke(() =>
{
if (isHaveHiddenSlide && !IsShowingRestoreHiddenSlidesWindow)
{
@ -2102,9 +2200,11 @@ namespace Ink_Canvas
{
foreach (Slide slide in slides)
{
if (slide.SlideShowTransition.Hidden == Microsoft.Office.Core.MsoTriState.msoTrue)
if (slide.SlideShowTransition.Hidden ==
Microsoft.Office.Core.MsoTriState.msoTrue)
{
slide.SlideShowTransition.Hidden = Microsoft.Office.Core.MsoTriState.msoFalse;
slide.SlideShowTransition.Hidden =
Microsoft.Office.Core.MsoTriState.msoFalse;
}
}
}).ShowDialog();
@ -2113,7 +2213,8 @@ namespace Ink_Canvas
BtnPPTSlideShow.Visibility = Visibility.Visible;
});
}, DispatcherPriority.Normal);
}
//如果检测到已经开始放映,则立即进入画板模式
if (pptApplication.SlideShowWindows.Count >= 1)
@ -2195,7 +2296,7 @@ namespace Ink_Canvas
LogHelper.NewLog("Slides Count: " + slidescount.ToString());
//检查是否有已有墨迹,并加载
if (Settings.Automation.IsAutoSaveStrokesInPowerPoint)
if (Settings.PowerPointSettings.IsAutoSaveStrokesInPowerPoint)
{
string defaultFolderPath = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments) + @"\Ink Canvas Strokes\Auto Saved\Presentations\";
if (Directory.Exists(defaultFolderPath + Wn.Presentation.Name + "_" + Wn.Presentation.Slides.Count))
@ -2234,7 +2335,7 @@ namespace Ink_Canvas
BtnPPTSlideShowEnd.Visibility = Visibility.Visible;
ViewBoxStackPanelMain.Margin = new Thickness(10, 10, 10, 10);
if (Settings.Behavior.IsShowCanvasAtNewSlideShow && Main_Grid.Background == Brushes.Transparent)
if (Settings.PowerPointSettings.IsShowCanvasAtNewSlideShow && Main_Grid.Background == Brushes.Transparent)
{
if (currentMode != 0)
{
@ -2268,7 +2369,7 @@ namespace Ink_Canvas
BorderFloatingBarMainControls.Visibility = Visibility.Visible;
BorderPenColorRed_MouseUp(BorderPenColorRed, null);
if (Settings.Behavior.IsShowCanvasAtNewSlideShow == false)
if (Settings.PowerPointSettings.IsShowCanvasAtNewSlideShow == false)
{
BtnHideInkCanvas_Click(BtnHideInkCanvas, null);
}
@ -2317,7 +2418,7 @@ namespace Ink_Canvas
return;
}
isEnteredSlideShowEndEvent = true;
if (Settings.Automation.IsAutoSaveStrokesInPowerPoint)
if (Settings.PowerPointSettings.IsAutoSaveStrokesInPowerPoint)
{
string defaultFolderPath = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments) + @"\Ink Canvas Strokes\Auto Saved\Presentations\";
string folderPath = defaultFolderPath + Pres.Name + "_" + Pres.Slides.Count;
@ -2429,7 +2530,7 @@ namespace Ink_Canvas
ms.Position = 0;
memoryStreams[previousSlideID] = ms;
if (inkCanvas.Strokes.Count > Settings.Automation.MinimumAutomationStrokeNumber && Settings.Automation.IsAutoSaveScreenShotInPowerPoint && !_isPptClickingBtnTurned)
if (inkCanvas.Strokes.Count > Settings.Automation.MinimumAutomationStrokeNumber && Settings.PowerPointSettings.IsAutoSaveScreenShotInPowerPoint && !_isPptClickingBtnTurned)
SaveScreenShot(true, Wn.Presentation.Name + "/" + Wn.View.CurrentShowPosition);
_isPptClickingBtnTurned = false;
@ -2465,7 +2566,7 @@ namespace Ink_Canvas
_isPptClickingBtnTurned = true;
if (inkCanvas.Strokes.Count > Settings.Automation.MinimumAutomationStrokeNumber &&
Settings.Automation.IsAutoSaveScreenShotInPowerPoint)
Settings.PowerPointSettings.IsAutoSaveScreenShotInPowerPoint)
SaveScreenShot(true, pptApplication.SlideShowWindows[1].Presentation.Name + "/" + pptApplication.SlideShowWindows[1].View.CurrentShowPosition);
try
{
@ -2491,7 +2592,7 @@ namespace Ink_Canvas
}
_isPptClickingBtnTurned = true;
if (inkCanvas.Strokes.Count > Settings.Automation.MinimumAutomationStrokeNumber &&
Settings.Automation.IsAutoSaveScreenShotInPowerPoint)
Settings.PowerPointSettings.IsAutoSaveScreenShotInPowerPoint)
SaveScreenShot(true, pptApplication.SlideShowWindows[1].Presentation.Name + "/" + pptApplication.SlideShowWindows[1].View.CurrentShowPosition);
try
{
@ -2583,10 +2684,10 @@ namespace Ink_Canvas
{
if (!isLoaded) return;
Settings.Behavior.PowerPointSupport = ToggleSwitchSupportPowerPoint.IsOn;
Settings.PowerPointSettings.PowerPointSupport = ToggleSwitchSupportPowerPoint.IsOn;
SaveSettingsToFile();
if (Settings.Behavior.PowerPointSupport)
if (Settings.PowerPointSettings.PowerPointSupport)
{
timerCheckPPT.Start();
}
@ -2600,7 +2701,7 @@ namespace Ink_Canvas
{
if (!isLoaded) return;
Settings.Behavior.IsShowCanvasAtNewSlideShow = ToggleSwitchShowCanvasAtNewSlideShow.IsOn;
Settings.PowerPointSettings.IsShowCanvasAtNewSlideShow = ToggleSwitchShowCanvasAtNewSlideShow.IsOn;
SaveSettingsToFile();
}
@ -2671,11 +2772,11 @@ namespace Ink_Canvas
{
if (!isLoaded) return;
Settings.Appearance.IsShowPPTNavigation = ToggleSwitchShowButtonPPTNavigation.IsOn;
Settings.PowerPointSettings.IsShowPPTNavigation = ToggleSwitchShowButtonPPTNavigation.IsOn;
SaveSettingsToFile();
PptNavigationBtn.Visibility =
Settings.Appearance.IsShowPPTNavigation ? Visibility.Visible : Visibility.Collapsed;
Settings.PowerPointSettings.IsShowPPTNavigation ? Visibility.Visible : Visibility.Collapsed;
}
private void ToggleSwitchShowButtonHideControl_Toggled(object sender, RoutedEventArgs e)
@ -2881,7 +2982,36 @@ namespace Ink_Canvas
private void ToggleSwitchAutoSaveStrokesInPowerPoint_Toggled(object sender, RoutedEventArgs e)
{
if (!isLoaded) return;
Settings.Automation.IsAutoSaveStrokesInPowerPoint = ToggleSwitchAutoSaveStrokesInPowerPoint.IsOn;
Settings.PowerPointSettings.IsAutoSaveStrokesInPowerPoint = ToggleSwitchAutoSaveStrokesInPowerPoint.IsOn;
SaveSettingsToFile();
}
private void ToggleSwitchNotifyPreviousPage_Toggled(object sender, RoutedEventArgs e)
{
if (!isLoaded) return;
Settings.PowerPointSettings.IsNotifyPreviousPage = ToggleSwitchNotifyPreviousPage.IsOn;
SaveSettingsToFile();
}
private void ToggleSwitchNotifyHiddenPage_Toggled(object sender, RoutedEventArgs e)
{
if (!isLoaded) return;
Settings.PowerPointSettings.IsNotifyHiddenPage = ToggleSwitchNotifyHiddenPage.IsOn;
SaveSettingsToFile();
}
private void ToggleSwitchNoStrokeClearInPowerPoint_Toggled(object sender, RoutedEventArgs e)
{
if (!isLoaded) return;
Settings.PowerPointSettings.IsNoClearStrokeOnSelectWhenInPowerPoint = ToggleSwitchNoStrokeClearInPowerPoint.IsOn;
SaveSettingsToFile();
}
private void ToggleSwitchShowStrokeOnSelectInPowerPoint_Toggled(object sender, RoutedEventArgs e)
{
if (!isLoaded) return;
Settings.PowerPointSettings.IsShowStrokeOnSelectInPowerPoint = ToggleSwitchShowStrokeOnSelectInPowerPoint.IsOn;
SaveSettingsToFile();
}
@ -2895,7 +3025,7 @@ namespace Ink_Canvas
private void ToggleSwitchAutoSaveScreenShotInPowerPoint_Toggled(object sender, RoutedEventArgs e)
{
if (!isLoaded) return;
Settings.Automation.IsAutoSaveScreenShotInPowerPoint = ToggleSwitchAutoSaveScreenShotInPowerPoint.IsOn;
Settings.PowerPointSettings.IsAutoSaveScreenShotInPowerPoint = ToggleSwitchAutoSaveScreenShotInPowerPoint.IsOn;
SaveSettingsToFile();
}
@ -2908,7 +3038,7 @@ namespace Ink_Canvas
{
if (!isLoaded) return;
Settings.Gesture.IsEnableFingerGestureSlideShowControl = ToggleSwitchEnableFingerGestureSlideShowControl.IsOn;
Settings.PowerPointSettings.IsEnableFingerGestureSlideShowControl = ToggleSwitchEnableFingerGestureSlideShowControl.IsOn;
SaveSettingsToFile();
}
@ -2936,7 +3066,7 @@ namespace Ink_Canvas
{
if (!isLoaded) return;
Settings.Gesture.IsEnableTwoFingerGestureInPresentationMode = ToggleSwitchEnableTwoFingerGestureInPresentationMode.IsOn;
Settings.PowerPointSettings.IsEnableTwoFingerGestureInPresentationMode = ToggleSwitchEnableTwoFingerGestureInPresentationMode.IsOn;
SaveSettingsToFile();
}
@ -3021,10 +3151,25 @@ namespace Ink_Canvas
#region Advanced
private void ToggleSwitchIsSpecialScreen_Toggled(object sender, RoutedEventArgs e)
private void ToggleSwitchIsSpecialScreen_OnToggled(object sender, RoutedEventArgs e)
{
if (!isLoaded) return;
Settings.Advanced.IsSpecialScreen = ToggleSwitchIsSpecialScreen.IsOn;
TouchMultiplierSlider.Visibility = ToggleSwitchIsSpecialScreen.IsOn ? Visibility.Visible : Visibility.Collapsed;
SaveSettingsToFile();
}
private void TouchMultiplierSlider_ValueChanged(object sender, RoutedPropertyChangedEventArgs<double> e)
{
if (!isLoaded) return;
Settings.Advanced.TouchMultiplier = e.NewValue;
SaveSettingsToFile();
}
private void ToggleSwitchEraserBindTouchMultiplier_Toggled(object sender, RoutedEventArgs e)
{
if (!isLoaded) return;
Settings.Advanced.EraserBindTouchMultiplier= ToggleSwitchEraserBindTouchMultiplier.IsOn;
SaveSettingsToFile();
}
@ -3506,10 +3651,24 @@ namespace Ink_Canvas
{
forceEraser = true;
drawingShapeMode = 0;
if (inkCanvas.EditingMode == InkCanvasEditingMode.Select)
inkCanvas.Select(inkCanvas.Strokes);
inkCanvas.EditingMode = InkCanvasEditingMode.Select;
inkCanvas.IsManipulationEnabled = false;
if (inkCanvas.EditingMode == InkCanvasEditingMode.Select)
{
if (inkCanvas.GetSelectedStrokes().Count == inkCanvas.Strokes.Count)
{
inkCanvas.EditingMode = InkCanvasEditingMode.Ink;
inkCanvas.IsManipulationEnabled = true;
}
else
{
inkCanvas.Select(inkCanvas.Strokes);
}
}
else
{
inkCanvas.EditingMode = InkCanvasEditingMode.Select;
}
}
double BorderStrokeSelectionControlWidth = 490.0;
@ -6357,7 +6516,10 @@ namespace Ink_Canvas
{
if (Settings.Automation.IsAutoSaveStrokesAtClear && inkCanvas.Strokes.Count > Settings.Automation.MinimumAutomationStrokeNumber)
{
SaveScreenShot(true, null);
if (BtnPPTSlideShowEnd.Visibility == Visibility.Visible)
SaveScreenShot(true, $"{pptName}/{previousSlideID}_{DateTime.Now:HH-mm-ss}");
else
SaveScreenShot(true);
}
BtnClear_Click(BtnClear, null);
}

View File

@ -10,8 +10,8 @@ namespace Ink_Canvas
public Appearance Appearance { get; set; } = new Appearance();
[JsonProperty("automation")]
public Automation Automation { get; set; } = new Automation();
[JsonProperty("behavior")]
public Behavior Behavior { get; set; } = new Behavior();
[JsonProperty("powerpoint")]
public PowerPointSettings PowerPointSettings { get; set; } = new PowerPointSettings();
[JsonProperty("canvas")]
public Canvas Canvas { get; set; } = new Canvas();
[JsonProperty("gesture")]
@ -22,14 +22,6 @@ namespace Ink_Canvas
public Startup Startup { get; set; } = new Startup();
}
public class Behavior
{
[JsonProperty("powerPointSupport")]
public bool PowerPointSupport { get; set; } = true;
[JsonProperty("isShowCanvasAtNewSlideShow")]
public bool IsShowCanvasAtNewSlideShow { get; set; } = true;
}
public class Canvas
{
[JsonProperty("inkWidth")]
@ -56,10 +48,7 @@ namespace Ink_Canvas
public bool IsEnableTwoFingerRotation { get; set; } = false;
[JsonProperty("isEnableTwoFingerRotationOnSelection")]
public bool IsEnableTwoFingerRotationOnSelection { get; set; } = false;
[JsonProperty("isEnableTwoFingerGestureInPresentationMode")]
public bool IsEnableTwoFingerGestureInPresentationMode { get; set; } = false;
[JsonProperty("isEnableFingerGestureSlideShowControl")]
public bool IsEnableFingerGestureSlideShowControl { get; set; } = true;
}
public class Startup
@ -84,8 +73,34 @@ namespace Ink_Canvas
public bool IsShowLRSwitchButton { get; set; } = false;
[JsonProperty("isShowModeFingerToggleSwitch")]
public bool IsShowModeFingerToggleSwitch { get; set; } = true;
}
public class PowerPointSettings
{
[JsonProperty("isShowPPTNavigation")]
public bool IsShowPPTNavigation { get; set; } = true;
[JsonProperty("powerPointSupport")]
public bool PowerPointSupport { get; set; } = true;
[JsonProperty("isShowCanvasAtNewSlideShow")]
public bool IsShowCanvasAtNewSlideShow { get; set; } = true;
[JsonProperty("isNoClearStrokeOnSelectWhenInPowerPoint")]
public bool IsNoClearStrokeOnSelectWhenInPowerPoint { get; set; } = true;
[JsonProperty("isShowStrokeOnSelectInPowerPoint")]
public bool IsShowStrokeOnSelectInPowerPoint { get; set; } = false;
[JsonProperty("isAutoSaveStrokesInPowerPoint")]
public bool IsAutoSaveStrokesInPowerPoint { get; set; } = true;
[JsonProperty("isAutoSaveScreenShotInPowerPoint")]
public bool IsAutoSaveScreenShotInPowerPoint { get; set; } = false;
[JsonProperty("isNotifyPreviousPage")]
public bool IsNotifyPreviousPage { get; set; } = true;
[JsonProperty("isNotifyHiddenPage")]
public bool IsNotifyHiddenPage { get; set; } = true;
[JsonProperty("isEnableTwoFingerGestureInPresentationMode")]
public bool IsEnableTwoFingerGestureInPresentationMode { get; set; } = false;
[JsonProperty("isEnableFingerGestureSlideShowControl")]
public bool IsEnableFingerGestureSlideShowControl { get; set; } = true;
}
public class Automation
@ -98,10 +113,7 @@ namespace Ink_Canvas
public bool IsAutoSaveStrokesAtScreenshot { get; set; } = false;
[JsonProperty("isAutoSaveStrokesAtClear")]
public bool IsAutoSaveStrokesAtClear { get; set; } = false;
[JsonProperty("isAutoSaveStrokesInPowerPoint")]
public bool IsAutoSaveStrokesInPowerPoint { get; set; } = true;
[JsonProperty("isAutoSaveScreenShotInPowerPoint")]
public bool IsAutoSaveScreenShotInPowerPoint { get; set; } = false;
[JsonProperty("isAutoClearWhenExitingWritingMode")]
public bool IsAutoClearWhenExitingWritingMode { get; set; } = false;
@ -114,6 +126,10 @@ namespace Ink_Canvas
{
[JsonProperty("isSpecialScreen")]
public bool IsSpecialScreen { get; set; } = false;
[JsonProperty("touchMultiplier")]
public double TouchMultiplier { get; set; } = 0.25;
[JsonProperty("eraserBindTouchMultiplier")]
public bool EraserBindTouchMultiplier { get; set; } = false;
[JsonProperty("isLogEnabled")]
public bool IsLogEnabled { get; set; } = true;
}