Skip to content

Commit 4d7e8c6

Browse files
committed
Merge branch 'develop'
2 parents be06fb4 + 7043c7a commit 4d7e8c6

File tree

6 files changed

+87
-56
lines changed

6 files changed

+87
-56
lines changed

src/PdfiumViewer.Demo/MainWindow.xaml

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
xmlns:converters="clr-namespace:PdfiumViewer.Demo.Converters"
99
xmlns:core="clr-namespace:PdfiumViewer.Core;assembly=PdfiumViewer"
1010
mc:Ignorable="d"
11-
Title="PDFium Viewer WPF Demo" Height="450" Width="1118" Background="LightGray">
11+
Height="450" Width="1200" Background="LightGray">
1212
<Grid >
1313
<Grid.RowDefinitions>
1414
<RowDefinition Height="40"/>
@@ -67,6 +67,9 @@
6767
<Button x:Name="BtnSearch" ToolTip="Search term" Click="OpenCloseSearch">
6868
<Image Source="Resources/find.png" />
6969
</Button>
70+
<ToggleButton x:Name="BtnHand" ToolTip="Hand Tool" Click="EnableHandTools">
71+
<Image Source="Resources/hand_cursor.png" />
72+
</ToggleButton>
7073
<Popup IsOpen="{Binding IsSearchOpen}"
7174
Placement="Bottom"
7275
PlacementRectangle="0,20,0,20"

src/PdfiumViewer.Demo/MainWindow.xaml.cs

Lines changed: 36 additions & 47 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
using System.Threading;
1313
using System.Threading.Tasks;
1414
using System.Windows;
15+
using System.Windows.Controls.Primitives;
1516
using System.Windows.Input;
1617

1718
namespace PdfiumViewer.Demo
@@ -21,17 +22,42 @@ namespace PdfiumViewer.Demo
2122
/// </summary>
2223
public partial class MainWindow : Window, INotifyPropertyChanged
2324
{
25+
public MainWindow()
26+
{
27+
InitializeComponent();
28+
29+
var version = GetType().Assembly.GetName().Version.ToString(3);
30+
Title = $"WPF PDFium Viewer Demo v{version}";
31+
CurrentProcess = Process.GetCurrentProcess();
32+
Cts = new CancellationTokenSource();
33+
DataContext = this;
34+
Renderer.PropertyChanged += delegate
35+
{
36+
OnPropertyChanged(nameof(Page));
37+
OnPropertyChanged(nameof(ZoomPercent));
38+
};
39+
40+
MemoryChecker = new System.Windows.Threading.DispatcherTimer();
41+
MemoryChecker.Tick += OnMemoryChecker;
42+
MemoryChecker.Interval = new TimeSpan(0, 0, 1);
43+
MemoryChecker.Start();
44+
45+
SearchManager = new PdfSearchManager(Renderer);
46+
MatchCaseCheckBox.IsChecked = SearchManager.MatchCase;
47+
WholeWordOnlyCheckBox.IsChecked = SearchManager.MatchWholeWord;
48+
HighlightAllMatchesCheckBox.IsChecked = SearchManager.HighlightAllMatches;
49+
}
50+
51+
2452
private Process CurrentProcess { get; }
2553
private CancellationTokenSource Cts { get; }
2654
private System.Windows.Threading.DispatcherTimer MemoryChecker { get; }
2755
private PdfSearchManager SearchManager { get; }
28-
2956
public string InfoText { get; set; }
3057
public string SearchTerm { get; set; }
3158
public PdfBookmarkCollection Bookmarks { get; set; }
3259
public bool ShowBookmarks { get; set; }
3360
public PdfBookmark SelectedBookIndex { get; set; }
34-
3561
public double ZoomPercent
3662
{
3763
get => Renderer.Zoom * 100;
@@ -50,32 +76,8 @@ public FlowDirection IsRtl
5076
get => Renderer.IsRightToLeft ? FlowDirection.RightToLeft : FlowDirection.LeftToRight;
5177
set => Renderer.IsRightToLeft = value == FlowDirection.RightToLeft ? true : false;
5278
}
53-
54-
55-
public MainWindow()
56-
{
57-
InitializeComponent();
58-
59-
CurrentProcess = Process.GetCurrentProcess();
60-
Cts = new CancellationTokenSource();
61-
DataContext = this;
62-
Renderer.PropertyChanged += delegate
63-
{
64-
OnPropertyChanged(nameof(Page));
65-
OnPropertyChanged(nameof(ZoomPercent));
66-
};
67-
68-
MemoryChecker = new System.Windows.Threading.DispatcherTimer();
69-
MemoryChecker.Tick += OnMemoryChecker;
70-
MemoryChecker.Interval = new TimeSpan(0, 0, 1);
71-
MemoryChecker.Start();
72-
73-
SearchManager = new PdfSearchManager(Renderer);
74-
MatchCaseCheckBox.IsChecked = SearchManager.MatchCase;
75-
WholeWordOnlyCheckBox.IsChecked = SearchManager.MatchWholeWord;
76-
HighlightAllMatchesCheckBox.IsChecked = SearchManager.HighlightAllMatches;
77-
}
78-
79+
80+
7981
private void OnMemoryChecker(object sender, EventArgs e)
8082
{
8183
CurrentProcess.Refresh();
@@ -126,7 +128,6 @@ protected override void OnClosed(EventArgs e)
126128
MemoryChecker?.Stop();
127129
Renderer?.Dispose();
128130
}
129-
130131
private void OnPrevPageClick(object sender, RoutedEventArgs e)
131132
{
132133
Renderer.PreviousPage();
@@ -135,7 +136,6 @@ private void OnNextPageClick(object sender, RoutedEventArgs e)
135136
{
136137
Renderer.NextPage();
137138
}
138-
139139
private void OnFitWidth(object sender, RoutedEventArgs e)
140140
{
141141
Renderer.SetZoomMode(PdfViewerZoomMode.FitWidth);
@@ -144,27 +144,22 @@ private void OnFitHeight(object sender, RoutedEventArgs e)
144144
{
145145
Renderer.SetZoomMode(PdfViewerZoomMode.FitHeight);
146146
}
147-
148147
private void OnZoomInClick(object sender, RoutedEventArgs e)
149148
{
150149
Renderer.ZoomIn();
151150
}
152-
153151
private void OnZoomOutClick(object sender, RoutedEventArgs e)
154152
{
155153
Renderer.ZoomOut();
156154
}
157-
158155
private void OnRotateLeftClick(object sender, RoutedEventArgs e)
159156
{
160157
Renderer.Counterclockwise();
161158
}
162-
163159
private void OnRotateRightClick(object sender, RoutedEventArgs e)
164160
{
165161
Renderer.ClockwiseRotate();
166162
}
167-
168163
private void OnInfo(object sender, RoutedEventArgs e)
169164
{
170165
var info = Renderer.GetInformation();
@@ -183,7 +178,6 @@ private void OnInfo(object sender, RoutedEventArgs e)
183178
MessageBox.Show(sb.ToString(), "Information", MessageBoxButton.OK, MessageBoxImage.Information);
184179
}
185180
}
186-
187181
private void OnGetText(object sender, RoutedEventArgs e)
188182
{
189183
var txtViewer = new TextViewer();
@@ -192,38 +186,31 @@ private void OnGetText(object sender, RoutedEventArgs e)
192186
txtViewer.Caption = $"Page {page + 1} contains {txtViewer.Body?.Length} character(s):";
193187
txtViewer.ShowDialog();
194188
}
195-
196189
private void OnDisplayBookmarks(object sender, RoutedEventArgs e)
197190
{
198191
Bookmarks = Renderer.Bookmarks;
199192
if(Bookmarks?.Count > 0)
200193
ShowBookmarks = !ShowBookmarks;
201194
}
202-
203195
private void OnContinuousModeClick(object sender, RoutedEventArgs e)
204196
{
205197
Renderer.PagesDisplayMode = PdfViewerPagesDisplayMode.ContinuousMode;
206198
}
207-
208199
private void OnBookModeClick(object sender, RoutedEventArgs e)
209200
{
210201
Renderer.PagesDisplayMode = PdfViewerPagesDisplayMode.BookMode;
211202
}
212-
213203
private void OnSinglePageModeClick(object sender, RoutedEventArgs e)
214204
{
215205
Renderer.PagesDisplayMode = PdfViewerPagesDisplayMode.SinglePageMode;
216206
}
217-
218207
public event PropertyChangedEventHandler PropertyChanged;
219208

220209
[NotifyPropertyChangedInvocator]
221210
protected virtual void OnPropertyChanged([CallerMemberName] string propertyName = null)
222211
{
223212
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
224213
}
225-
226-
227214
private void OnTransparent(object sender, RoutedEventArgs e)
228215
{
229216
if ((Renderer.Flags & PdfRenderFlags.Transparent) != 0)
@@ -235,21 +222,18 @@ private void OnTransparent(object sender, RoutedEventArgs e)
235222
Renderer.Flags |= PdfRenderFlags.Transparent;
236223
}
237224
}
238-
239225
private void OpenCloseSearch(object sender, RoutedEventArgs e)
240226
{
241227
IsSearchOpen = !IsSearchOpen;
242228
OnPropertyChanged(nameof(IsSearchOpen));
243229
}
244-
245230
private void OnSearchTermKeyDown(object sender, KeyEventArgs e)
246231
{
247232
if (e.Key == Key.Enter)
248233
{
249234
Search();
250235
}
251236
}
252-
253237
private void SaveAsImages(object sender, RoutedEventArgs e)
254238
{
255239
// Create a "Save As" dialog for selecting a directory (HACK)
@@ -371,7 +355,12 @@ private async void OnClosePdf(object sender, RoutedEventArgs e)
371355
Console.WriteLine(exception);
372356
}
373357
}
374-
358+
private void EnableHandTools(object sender, RoutedEventArgs e)
359+
{
360+
var toggle = (ToggleButton) sender;
361+
Renderer.EnableKinetic = toggle.IsChecked == true;
362+
}
363+
375364
/// <summary>
376365
/// Call when SelectedBookIndex changed.
377366
/// </summary>

src/PdfiumViewer.Demo/PdfiumViewer.Demo.csproj

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,15 @@
55
<TargetFramework>netcoreapp3.1</TargetFramework>
66
<UseWPF>true</UseWPF>
77
<ApplicationIcon>icon.ico</ApplicationIcon>
8+
<Version>1.0.5</Version>
9+
<PackageReleaseNotes>Added bookmarks list and kinetic scroll on PDF</PackageReleaseNotes>
10+
<Description>Demo of PDF viewer based on Google's PDFium.</Description>
11+
<Copyright>Copyright © 2019-2020 Behzad Khosravifar</Copyright>
12+
<PackageLicenseFile>LICENSE</PackageLicenseFile>
13+
<PackageProjectUrl>https://github.com/bezzad/PdfiumViewer</PackageProjectUrl>
14+
<RepositoryUrl>https://github.com/bezzad/PdfiumViewer.git</RepositoryUrl>
15+
<RepositoryType>git</RepositoryType>
16+
<PackageTags>pdfium pdf-viewer wpf-controls dotnet-core google-pdf-viewer chrome-pdf</PackageTags>
817
</PropertyGroup>
918

1019
<ItemGroup>
@@ -13,6 +22,7 @@
1322
<None Remove="Resources\find.png" />
1423
<None Remove="Resources\fit_height.png" />
1524
<None Remove="Resources\fit_width.png" />
25+
<None Remove="Resources\hand_cursor.png" />
1626
<None Remove="Resources\info.png" />
1727
<None Remove="Resources\ltr.png" />
1828
<None Remove="Resources\next.png" />
@@ -30,6 +40,10 @@
3040
<None Remove="Resources\two_page.png" />
3141
<None Remove="Resources\zoom_in.png" />
3242
<None Remove="Resources\zoom_out.png" />
43+
<None Include="..\..\LICENSE">
44+
<Pack>True</Pack>
45+
<PackagePath></PackagePath>
46+
</None>
3347
</ItemGroup>
3448

3549
<ItemGroup>
@@ -55,6 +69,7 @@
5569
<Resource Include="Resources\fit_width.png">
5670
<CopyToOutputDirectory>Never</CopyToOutputDirectory>
5771
</Resource>
72+
<Resource Include="Resources\hand_cursor.png" />
5873
<Resource Include="Resources\info.png">
5974
<CopyToOutputDirectory>Never</CopyToOutputDirectory>
6075
</Resource>
878 Bytes
Loading

src/PdfiumViewer/PdfiumViewer.csproj

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
<PropertyGroup>
44
<TargetFramework>netcoreapp3.1</TargetFramework>
55
<UseWPF>true</UseWPF>
6-
<Version>1.0.4</Version>
6+
<Version>1.0.5</Version>
77
<Authors>Behzad Khosravifar</Authors>
88
<Description>PDF viewer based on Google's PDFium port to .Net Core.</Description>
99
<Copyright>Copyright © 2019-2020 Behzad Khosravifar</Copyright>
@@ -15,7 +15,7 @@
1515
<RunAnalyzersDuringBuild>false</RunAnalyzersDuringBuild>
1616
<PackageId>PdfiumViewer.WPF</PackageId>
1717
<PackageLicenseFile>LICENSE</PackageLicenseFile>
18-
<PackageReleaseNotes>Added kinetic scrolling on PDF</PackageReleaseNotes>
18+
<PackageReleaseNotes>Added EnableKinetic scroll option</PackageReleaseNotes>
1919
</PropertyGroup>
2020

2121
<ItemGroup>

src/PdfiumViewer/ScrollPanel.Paning.cs renamed to src/PdfiumViewer/ScrollPanel.Kinetic.cs

Lines changed: 30 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,8 @@ public partial class ScrollPanel
2323
/// Friction Attached Dependency Property
2424
/// </summary>
2525
public static readonly DependencyProperty FrictionProperty =
26-
DependencyProperty.RegisterAttached(nameof(Friction), typeof(double), typeof(ScrollPanel), new FrameworkPropertyMetadata(DefaultFriction));
26+
DependencyProperty.RegisterAttached(nameof(Friction), typeof(double), typeof(ScrollPanel),
27+
new FrameworkPropertyMetadata(DefaultFriction));
2728

2829
public double Friction
2930
{
@@ -33,12 +34,32 @@ public double Friction
3334

3435
#endregion
3536

37+
#region EnableKinetic
38+
39+
/// <summary>
40+
/// EnableKinetic Attached Dependency Property
41+
/// </summary>
42+
public static readonly DependencyProperty EnableKineticProperty =
43+
DependencyProperty.RegisterAttached(nameof(EnableKinetic), typeof(bool), typeof(ScrollPanel),
44+
new FrameworkPropertyMetadata(false));
45+
46+
public bool EnableKinetic
47+
{
48+
get => (bool)GetValue(EnableKineticProperty);
49+
set
50+
{
51+
SetValue(EnableKineticProperty, value);
52+
Cursor = value ? Cursors.Hand : Cursors.Arrow;
53+
}
54+
}
55+
56+
#endregion
3657

3758
protected override void OnPreviewMouseDown(MouseButtonEventArgs e)
3859
{
3960
base.OnPreviewMouseDown(e);
4061

41-
if (IsMouseOver)
62+
if (EnableKinetic && IsMouseOver)
4263
{
4364
Cursor = Cursors.ScrollAll;
4465
// Save starting point, used later when
@@ -54,7 +75,7 @@ protected override void OnPreviewMouseMove(MouseEventArgs e)
5475
{
5576
base.OnPreviewMouseMove(e);
5677

57-
if (IsMouseDown)
78+
if (EnableKinetic && IsMouseDown)
5879
{
5980
var currentPoint = e.GetPosition(this);
6081
// Determine the new amount to scroll.
@@ -70,9 +91,12 @@ protected override void OnPreviewMouseUp(MouseButtonEventArgs e)
7091
{
7192
base.OnPreviewMouseUp(e);
7293

73-
Cursor = Cursors.Arrow;
74-
IsMouseDown = false;
75-
InertiaHandleMouseUp();
94+
if (EnableKinetic)
95+
{
96+
Cursor = Cursors.Hand;
97+
IsMouseDown = false;
98+
InertiaHandleMouseUp();
99+
}
76100
}
77101

78102
private Point GetScrollTarget(Point currentPoint)

0 commit comments

Comments
 (0)