1212using System . Threading ;
1313using System . Threading . Tasks ;
1414using System . Windows ;
15+ using System . Windows . Controls . Primitives ;
1516using System . Windows . Input ;
1617
1718namespace 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>
0 commit comments