|
@@ -21,6 +21,8 @@ using ComPDFKit.Tool.DrawTool;
|
|
|
using static ComPDFKit.Tool.CPDFToolManager;
|
|
|
using static Compdfkit_Tools.PDFControlUI.CPDFViewModeUI;
|
|
|
using SplitMode = Compdfkit_Tools.PDFControlUI.CPDFViewModeUI.SplitMode;
|
|
|
+using System.Threading;
|
|
|
+using System.Threading.Tasks;
|
|
|
|
|
|
namespace Compdfkit_Tools.PDFControl
|
|
|
{
|
|
@@ -32,6 +34,7 @@ namespace Compdfkit_Tools.PDFControl
|
|
|
private CPDFViewerTool viewerTool;
|
|
|
private CPDFToolManager toolManager;
|
|
|
|
|
|
+
|
|
|
public CPDFViewerTool PDFViewTool { get; private set; }
|
|
|
public CPDFToolManager PDFToolManager { get; private set; }
|
|
|
|
|
@@ -76,6 +79,7 @@ namespace Compdfkit_Tools.PDFControl
|
|
|
|
|
|
PDFViewTool.SizeChanged -= PDFViewTool_SizeChanged;
|
|
|
PDFViewTool.GetCPDFViewer().MouseWheelZoomHandler -= PDFViewControl_MouseWheelZoomHandler;
|
|
|
+ PDFViewTool.GetCPDFViewer().MouseMove -= PDFViewControl_MouseMove;
|
|
|
PDFViewTool.DrawChanged -= PDFViewTool_DrawChanged;
|
|
|
PDFToolManager.MouseLeftButtonDownHandler -= PDFToolManager_MouseLeftButtonDownHandler;
|
|
|
PDFToolManager.MouseLeftButtonUpHandler -= PDFToolManager_MouseLeftButtonUpHandler;
|
|
@@ -85,6 +89,7 @@ namespace Compdfkit_Tools.PDFControl
|
|
|
|
|
|
PDFViewTool.SizeChanged += PDFViewTool_SizeChanged;
|
|
|
PDFViewTool.GetCPDFViewer().MouseWheelZoomHandler += PDFViewControl_MouseWheelZoomHandler;
|
|
|
+ PDFViewTool.GetCPDFViewer().MouseMove += PDFViewControl_MouseMove;
|
|
|
PDFViewTool.DrawChanged += PDFViewTool_DrawChanged;
|
|
|
PDFToolManager.MouseLeftButtonDownHandler += PDFToolManager_MouseLeftButtonDownHandler;
|
|
|
PDFToolManager.MouseLeftButtonUpHandler += PDFToolManager_MouseLeftButtonUpHandler;
|
|
@@ -109,7 +114,6 @@ namespace Compdfkit_Tools.PDFControl
|
|
|
splitToolManager.MouseMoveHandler += PDFToolManager_MouseMoveHandler;
|
|
|
splitToolManager.AnnotDefaultEditedHandler += PDFToolManager_AnnotDefaultEditedHandler;
|
|
|
splitToolManager.MouseRightButtonDownHandler += PDFToolManager_MouseRightButtonDownHandler;
|
|
|
-
|
|
|
}
|
|
|
|
|
|
private void PDFToolManager_AnnotDefaultEditedHandler(object sender, SelectedAnnotData e)
|
|
@@ -142,7 +146,7 @@ namespace Compdfkit_Tools.PDFControl
|
|
|
{
|
|
|
Point point = e.mouseButtonEventArgs.GetPosition(this);
|
|
|
viewerTool.GetCPDFViewer().GetPointPageInfo(point, out int index, out Rect paintRect, out Rect pageBound);
|
|
|
- if(index == -1)
|
|
|
+ if (index == -1)
|
|
|
{
|
|
|
viewerTool.ContextMenu = null;
|
|
|
return;
|
|
@@ -380,7 +384,7 @@ namespace Compdfkit_Tools.PDFControl
|
|
|
FocusPDFViewTool?.GetCPDFViewer()?.UpdateRenderFrame();
|
|
|
};
|
|
|
contextMenu.Items.Add(fitWidthMenu);
|
|
|
-
|
|
|
+
|
|
|
MenuItem fitSizeMenu = new MenuItem();
|
|
|
fitSizeMenu.Header = LanguageHelper.CommonManager.GetString("Menu_RealSize");
|
|
|
fitSizeMenu.Click += (o, p) =>
|
|
@@ -389,7 +393,7 @@ namespace Compdfkit_Tools.PDFControl
|
|
|
FocusPDFViewTool?.GetCPDFViewer()?.UpdateRenderFrame();
|
|
|
};
|
|
|
contextMenu.Items.Add(fitSizeMenu);
|
|
|
-
|
|
|
+
|
|
|
MenuItem zoomInMenu = new MenuItem();
|
|
|
zoomInMenu.Header = LanguageHelper.CommonManager.GetString("Menu_ZoomIn");
|
|
|
zoomInMenu.Click += (o, p) =>
|
|
@@ -400,7 +404,7 @@ namespace Compdfkit_Tools.PDFControl
|
|
|
FocusPDFViewTool?.GetCPDFViewer()?.UpdateRenderFrame();
|
|
|
};
|
|
|
contextMenu.Items.Add(zoomInMenu);
|
|
|
-
|
|
|
+
|
|
|
MenuItem zoomOutMenu = new MenuItem();
|
|
|
zoomOutMenu.Header = LanguageHelper.CommonManager.GetString("Menu_ZoomOut");
|
|
|
zoomOutMenu.Click += (o, p) =>
|
|
@@ -411,9 +415,9 @@ namespace Compdfkit_Tools.PDFControl
|
|
|
FocusPDFViewTool?.GetCPDFViewer()?.UpdateRenderFrame();
|
|
|
};
|
|
|
contextMenu.Items.Add(zoomOutMenu);
|
|
|
-
|
|
|
+
|
|
|
contextMenu.Items.Add(new Separator());
|
|
|
-
|
|
|
+
|
|
|
MenuItem singleView = new MenuItem();
|
|
|
singleView.Header = LanguageHelper.CommonManager.GetString("Menu_SinglePage");
|
|
|
singleView.Click += (o, p) =>
|
|
@@ -422,7 +426,7 @@ namespace Compdfkit_Tools.PDFControl
|
|
|
FocusPDFViewTool?.GetCPDFViewer()?.UpdateRenderFrame();
|
|
|
};
|
|
|
contextMenu.Items.Add(singleView);
|
|
|
-
|
|
|
+
|
|
|
MenuItem singleContinuousView = new MenuItem();
|
|
|
singleContinuousView.Header = LanguageHelper.CommonManager.GetString("Menu_SingleContinuous");
|
|
|
singleContinuousView.Click += (o, p) =>
|
|
@@ -431,7 +435,7 @@ namespace Compdfkit_Tools.PDFControl
|
|
|
FocusPDFViewTool?.GetCPDFViewer()?.UpdateRenderFrame();
|
|
|
};
|
|
|
contextMenu.Items.Add(singleContinuousView);
|
|
|
-
|
|
|
+
|
|
|
MenuItem doubleView = new MenuItem();
|
|
|
doubleView.Header = LanguageHelper.CommonManager.GetString("Menu_DoublePage");
|
|
|
doubleView.Click += (o, p) =>
|
|
@@ -440,7 +444,7 @@ namespace Compdfkit_Tools.PDFControl
|
|
|
FocusPDFViewTool?.GetCPDFViewer()?.UpdateRenderFrame();
|
|
|
};
|
|
|
contextMenu.Items.Add(doubleView);
|
|
|
-
|
|
|
+
|
|
|
MenuItem doubleContinuousView = new MenuItem();
|
|
|
doubleContinuousView.Header = LanguageHelper.CommonManager.GetString("Menu_DoubleContinuous");
|
|
|
doubleContinuousView.Click += (o, p) =>
|
|
@@ -450,7 +454,7 @@ namespace Compdfkit_Tools.PDFControl
|
|
|
};
|
|
|
contextMenu.Items.Add(doubleContinuousView);
|
|
|
contextMenu.Items.Add(new Separator());
|
|
|
-
|
|
|
+
|
|
|
MenuItem resetFormMenu = new MenuItem();
|
|
|
resetFormMenu.Header = LanguageHelper.CommonManager.GetString("Menu_Reset");
|
|
|
resetFormMenu.Click += (o, p) =>
|
|
@@ -477,11 +481,11 @@ namespace Compdfkit_Tools.PDFControl
|
|
|
|
|
|
public void WindowSizeChange()
|
|
|
{
|
|
|
- if(VerticalView.Visibility == Visibility.Visible)
|
|
|
+ if (VerticalView.Visibility == Visibility.Visible)
|
|
|
{
|
|
|
ViewToolGrid.ColumnDefinitions[2].Width = new GridLength(ViewToolGrid.ActualWidth * splitWidthScale);
|
|
|
}
|
|
|
- if(HorizontalView.Visibility == Visibility.Visible)
|
|
|
+ if (HorizontalView.Visibility == Visibility.Visible)
|
|
|
{
|
|
|
ViewToolGrid.RowDefinitions[2].Height = new GridLength(ViewToolGrid.ActualHeight * splitHeightScale);
|
|
|
}
|
|
@@ -537,8 +541,20 @@ namespace Compdfkit_Tools.PDFControl
|
|
|
|
|
|
#endregion
|
|
|
|
|
|
+ #region automatic scroll
|
|
|
+ internal bool EnableAutoScroll { get; set; } = true;
|
|
|
+
|
|
|
+ private bool cancelTask = false;
|
|
|
+ private bool scrollEnable = true;
|
|
|
+ private bool isAutomaticScroll = false;
|
|
|
+ private Point mouseCurrentPoint;
|
|
|
+ private Point middlePressPoint;
|
|
|
+ private Point middleMovePoint;
|
|
|
+ private Task MiddleScrollTask;
|
|
|
+
|
|
|
private void PDFView_MouseDown(object sender, MouseButtonEventArgs e)
|
|
|
{
|
|
|
+
|
|
|
switch ((sender as Border).Tag)
|
|
|
{
|
|
|
case "ViewerTool":
|
|
@@ -548,10 +564,78 @@ namespace Compdfkit_Tools.PDFControl
|
|
|
FocusPDFViewTool = splitViewerTool;
|
|
|
break;
|
|
|
}
|
|
|
- if (FocusPDFViewTool.IsLoaded&& FocusPDFViewTool.GetCPDFViewer()?.CurrentRenderFrame != null)
|
|
|
+ if (FocusPDFViewTool.IsLoaded && FocusPDFViewTool.GetCPDFViewer()?.CurrentRenderFrame != null)
|
|
|
{
|
|
|
FocusPDFViewToolChanged?.Invoke(this, EventArgs.Empty);
|
|
|
}
|
|
|
}
|
|
|
+
|
|
|
+ private void PDFViewControl_MouseMove(object sender, MouseEventArgs e)
|
|
|
+ {
|
|
|
+ if (isAutomaticScroll)
|
|
|
+ {
|
|
|
+ middleMovePoint = e.GetPosition(this);
|
|
|
+ e.Handled = true;
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ protected override void OnMouseDown(MouseButtonEventArgs e)
|
|
|
+ {
|
|
|
+ if (e.MiddleButton == MouseButtonState.Pressed)
|
|
|
+ {
|
|
|
+ isAutomaticScroll ^= true;
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ isAutomaticScroll = false;
|
|
|
+ }
|
|
|
+
|
|
|
+ if (isAutomaticScroll)
|
|
|
+ {
|
|
|
+ GetCPDFViewer().Cursor = Cursors.ScrollAll;
|
|
|
+ middlePressPoint = e.GetPosition(this);
|
|
|
+ middleMovePoint = middlePressPoint;
|
|
|
+
|
|
|
+ if (MiddleScrollTask != null && MiddleScrollTask.Status == TaskStatus.Running)
|
|
|
+ {
|
|
|
+ cancelTask = true;
|
|
|
+ MiddleScrollTask.Wait();
|
|
|
+ }
|
|
|
+
|
|
|
+ cancelTask = false;
|
|
|
+ MiddleScrollTask = Task.Factory.StartNew(() => DoScrollWork());
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ private void DoScrollWork()
|
|
|
+ {
|
|
|
+ try
|
|
|
+ {
|
|
|
+ while (!cancelTask && isAutomaticScroll)
|
|
|
+ {
|
|
|
+ Vector subSize = middleMovePoint - middlePressPoint;
|
|
|
+ Dispatcher.Invoke(() =>
|
|
|
+ {
|
|
|
+ GetCPDFViewer().SetVerticalOffset(GetCPDFViewer().VerticalOffset + subSize.Y);
|
|
|
+ GetCPDFViewer().SetHorizontalOffset(GetCPDFViewer().HorizontalOffset + subSize.X);
|
|
|
+ });
|
|
|
+ Thread.Sleep(100);
|
|
|
+ }
|
|
|
+ Dispatcher.Invoke(() =>
|
|
|
+ {
|
|
|
+ if (GetCPDFViewer().Cursor == Cursors.ScrollAll)
|
|
|
+ {
|
|
|
+ GetCPDFViewer().Cursor = Cursors.Arrow;
|
|
|
+ }
|
|
|
+ });
|
|
|
+ }
|
|
|
+ catch (Exception ex)
|
|
|
+ {
|
|
|
+ MiddleScrollTask = null;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ #endregion
|
|
|
}
|
|
|
}
|