diff --git a/Ink Canvas/Helpers/PPTUIManager.cs b/Ink Canvas/Helpers/PPTUIManager.cs index dfb4d353..6fe95e2c 100644 --- a/Ink Canvas/Helpers/PPTUIManager.cs +++ b/Ink Canvas/Helpers/PPTUIManager.cs @@ -22,6 +22,7 @@ namespace Ink_Canvas.Helpers public int PPTLBButtonPosition { get; set; } = 0; public int PPTRBButtonPosition { get; set; } = 0; public bool EnablePPTButtonPageClickable { get; set; } = true; + public bool EnablePPTButtonLongPressPageTurn { get; set; } = true; #endregion #region Private Fields diff --git a/Ink Canvas/MainWindow.xaml b/Ink Canvas/MainWindow.xaml index d6893bd0..9597d615 100644 --- a/Ink Canvas/MainWindow.xaml +++ b/Ink Canvas/MainWindow.xaml @@ -1843,6 +1843,19 @@ + + + + + diff --git a/Ink Canvas/MainWindow_cs/MW_PPT.cs b/Ink Canvas/MainWindow_cs/MW_PPT.cs index 3a5cd22d..4834a155 100644 --- a/Ink Canvas/MainWindow_cs/MW_PPT.cs +++ b/Ink Canvas/MainWindow_cs/MW_PPT.cs @@ -11,6 +11,7 @@ using System.Threading; using System.Threading.Tasks; using System.Windows; using System.Windows.Media; +using System.Windows.Threading; using Application = System.Windows.Application; using File = System.IO.File; using MessageBox = System.Windows.MessageBox; @@ -80,6 +81,13 @@ namespace Ink_Canvas private bool isPresentationHaveBlackSpace; private string pptName; private bool _isPptClickingBtnTurned; + + // 长按翻页相关字段 + private DispatcherTimer _longPressTimer; + private bool _isLongPressActive = false; + private bool _isLongPressNext = true; // true为下一页,false为上一页 + private const int LongPressDelay = 500; // 长按延迟时间(毫秒) + private const int LongPressInterval = 200; // 长按翻页间隔(毫秒) #endregion #region PPT Managers @@ -98,6 +106,9 @@ namespace Ink_Canvas { try { + // 初始化长按定时器 + InitializeLongPressTimer(); + // 初始化PPT管理器 _pptManager = new PPTManager(); _pptManager.IsSupportWPS = Settings.PowerPointSettings.IsSupportWPS; @@ -127,6 +138,7 @@ namespace Ink_Canvas _pptUIManager.PPTLBButtonPosition = Settings.PowerPointSettings.PPTLBButtonPosition; _pptUIManager.PPTRBButtonPosition = Settings.PowerPointSettings.PPTRBButtonPosition; _pptUIManager.EnablePPTButtonPageClickable = Settings.PowerPointSettings.EnablePPTButtonPageClickable; + _pptUIManager.EnablePPTButtonLongPressPageTurn = Settings.PowerPointSettings.EnablePPTButtonLongPressPageTurn; LogHelper.WriteLogToFile("PPT管理器初始化完成", LogHelper.LogType.Event); } @@ -157,6 +169,8 @@ namespace Ink_Canvas { _pptManager?.Dispose(); _pptInkManager?.Dispose(); + _longPressTimer?.Stop(); + _longPressTimer = null; _pptManager = null; _pptInkManager = null; _pptUIManager = null; @@ -167,6 +181,60 @@ namespace Ink_Canvas LogHelper.WriteLogToFile($"释放PPT管理器失败: {ex}", LogHelper.LogType.Error); } } + + /// + /// 初始化长按定时器 + /// + private void InitializeLongPressTimer() + { + _longPressTimer = new DispatcherTimer(); + _longPressTimer.Interval = TimeSpan.FromMilliseconds(LongPressDelay); + _longPressTimer.Tick += OnLongPressTimerTick; + } + + /// + /// 启动长按检测 + /// + /// 触发事件的控件 + /// 是否为下一页按钮 + private void StartLongPressDetection(object sender, bool isNext) + { + if (!Settings.PowerPointSettings.EnablePPTButtonLongPressPageTurn) return; + + _isLongPressNext = isNext; + _isLongPressActive = false; + _longPressTimer?.Start(); + } + + /// + /// 停止长按检测 + /// + private void StopLongPressDetection() + { + _longPressTimer?.Stop(); + _isLongPressActive = false; + } + + /// + /// 长按定时器事件处理 + /// + private void OnLongPressTimerTick(object sender, EventArgs e) + { + if (!Settings.PowerPointSettings.EnablePPTButtonLongPressPageTurn) return; + + _isLongPressActive = true; + _longPressTimer.Interval = TimeSpan.FromMilliseconds(LongPressInterval); + + // 执行翻页 + if (_isLongPressNext) + { + BtnPPTSlidesDown_Click(BtnPPTSlidesDown, null); + } + else + { + BtnPPTSlidesUp_Click(BtnPPTSlidesUp, null); + } + } #endregion #region New PPT Event Handlers @@ -1047,6 +1115,12 @@ namespace Ink_Canvas { PPTRBPreviousButtonFeedbackBorder.Opacity = 0.15; } + + // 启动长按检测 + if (Settings.PowerPointSettings.EnablePPTButtonLongPressPageTurn) + { + StartLongPressDetection(sender, false); + } } private void GridPPTControlPrevious_MouseLeave(object sender, MouseEventArgs e) { @@ -1067,6 +1141,9 @@ namespace Ink_Canvas { PPTRBPreviousButtonFeedbackBorder.Opacity = 0; } + + // 停止长按检测 + StopLongPressDetection(); } private void GridPPTControlPrevious_MouseUp(object sender, MouseButtonEventArgs e) { @@ -1087,6 +1164,10 @@ namespace Ink_Canvas { PPTRBPreviousButtonFeedbackBorder.Opacity = 0; } + + // 停止长按检测 + StopLongPressDetection(); + BtnPPTSlidesUp_Click(BtnPPTSlidesUp, null); } @@ -1110,6 +1191,12 @@ namespace Ink_Canvas { PPTRBNextButtonFeedbackBorder.Opacity = 0.15; } + + // 启动长按检测 + if (Settings.PowerPointSettings.EnablePPTButtonLongPressPageTurn) + { + StartLongPressDetection(sender, true); + } } private void GridPPTControlNext_MouseLeave(object sender, MouseEventArgs e) { @@ -1130,6 +1217,9 @@ namespace Ink_Canvas { PPTRBNextButtonFeedbackBorder.Opacity = 0; } + + // 停止长按检测 + StopLongPressDetection(); } private void GridPPTControlNext_MouseUp(object sender, MouseButtonEventArgs e) { @@ -1150,6 +1240,10 @@ namespace Ink_Canvas { PPTRBNextButtonFeedbackBorder.Opacity = 0; } + + // 停止长按检测 + StopLongPressDetection(); + BtnPPTSlidesDown_Click(BtnPPTSlidesDown, null); } diff --git a/Ink Canvas/MainWindow_cs/MW_Settings.cs b/Ink Canvas/MainWindow_cs/MW_Settings.cs index d3a695fc..011c9842 100644 --- a/Ink Canvas/MainWindow_cs/MW_Settings.cs +++ b/Ink Canvas/MainWindow_cs/MW_Settings.cs @@ -511,6 +511,13 @@ namespace Ink_Canvas SaveSettingsToFile(); } + private void ToggleSwitchEnablePPTButtonLongPressPageTurn_OnToggled(object sender, RoutedEventArgs e) + { + if (!isLoaded) return; + Settings.PowerPointSettings.EnablePPTButtonLongPressPageTurn = ToggleSwitchEnablePPTButtonLongPressPageTurn.IsOn; + SaveSettingsToFile(); + } + private void CheckboxEnableLBPPTButton_IsCheckChanged(object sender, RoutedEventArgs e) { if (!isLoaded) return; @@ -883,6 +890,8 @@ namespace Ink_Canvas _pptUIManager.PPTRSButtonPosition = Settings.PowerPointSettings.PPTRSButtonPosition; _pptUIManager.PPTLBButtonPosition = Settings.PowerPointSettings.PPTLBButtonPosition; _pptUIManager.PPTRBButtonPosition = Settings.PowerPointSettings.PPTRBButtonPosition; + _pptUIManager.EnablePPTButtonPageClickable = Settings.PowerPointSettings.EnablePPTButtonPageClickable; + _pptUIManager.EnablePPTButtonLongPressPageTurn = Settings.PowerPointSettings.EnablePPTButtonLongPressPageTurn; _pptUIManager.UpdateNavigationPanelsVisibility(); _pptUIManager.UpdateNavigationButtonStyles(); } diff --git a/Ink Canvas/MainWindow_cs/MW_SettingsToLoad.cs b/Ink Canvas/MainWindow_cs/MW_SettingsToLoad.cs index b350d73c..454f45a1 100644 --- a/Ink Canvas/MainWindow_cs/MW_SettingsToLoad.cs +++ b/Ink Canvas/MainWindow_cs/MW_SettingsToLoad.cs @@ -367,6 +367,9 @@ namespace Ink_Canvas ToggleSwitchEnablePPTButtonPageClickable.IsOn = Settings.PowerPointSettings.EnablePPTButtonPageClickable; + ToggleSwitchEnablePPTButtonLongPressPageTurn.IsOn = + Settings.PowerPointSettings.EnablePPTButtonLongPressPageTurn; + var dops = Settings.PowerPointSettings.PPTButtonsDisplayOption.ToString(); var dopsc = dops.ToCharArray(); if ((dopsc[0] == '1' || dopsc[0] == '2') && (dopsc[1] == '1' || dopsc[1] == '2') && diff --git a/Ink Canvas/Resources/Settings.cs b/Ink Canvas/Resources/Settings.cs index d5c7b5a0..a80971c5 100644 --- a/Ink Canvas/Resources/Settings.cs +++ b/Ink Canvas/Resources/Settings.cs @@ -262,6 +262,9 @@ namespace Ink_Canvas [JsonProperty("enablePPTButtonPageClickable")] public bool EnablePPTButtonPageClickable { get; set; } = true; + [JsonProperty("enablePPTButtonLongPressPageTurn")] + public bool EnablePPTButtonLongPressPageTurn { get; set; } = true; + // -- new -- [JsonProperty("powerPointSupport")]