Skip to content

Commit

Permalink
Merge branch 'develop'
Browse files Browse the repository at this point in the history
  • Loading branch information
bezzad committed Oct 27, 2020
2 parents be06fb4 + 7043c7a commit 4d7e8c6
Show file tree
Hide file tree
Showing 6 changed files with 87 additions and 56 deletions.
5 changes: 4 additions & 1 deletion src/PdfiumViewer.Demo/MainWindow.xaml
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@
xmlns:converters="clr-namespace:PdfiumViewer.Demo.Converters"
xmlns:core="clr-namespace:PdfiumViewer.Core;assembly=PdfiumViewer"
mc:Ignorable="d"
Title="PDFium Viewer WPF Demo" Height="450" Width="1118" Background="LightGray">
Height="450" Width="1200" Background="LightGray">
<Grid >
<Grid.RowDefinitions>
<RowDefinition Height="40"/>
Expand Down Expand Up @@ -67,6 +67,9 @@
<Button x:Name="BtnSearch" ToolTip="Search term" Click="OpenCloseSearch">
<Image Source="Resources/find.png" />
</Button>
<ToggleButton x:Name="BtnHand" ToolTip="Hand Tool" Click="EnableHandTools">
<Image Source="Resources/hand_cursor.png" />
</ToggleButton>
<Popup IsOpen="{Binding IsSearchOpen}"
Placement="Bottom"
PlacementRectangle="0,20,0,20"
Expand Down
83 changes: 36 additions & 47 deletions src/PdfiumViewer.Demo/MainWindow.xaml.cs
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@
using System.Threading;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls.Primitives;
using System.Windows.Input;

namespace PdfiumViewer.Demo
Expand All @@ -21,17 +22,42 @@ namespace PdfiumViewer.Demo
/// </summary>
public partial class MainWindow : Window, INotifyPropertyChanged
{
public MainWindow()
{
InitializeComponent();

var version = GetType().Assembly.GetName().Version.ToString(3);
Title = $"WPF PDFium Viewer Demo v{version}";
CurrentProcess = Process.GetCurrentProcess();
Cts = new CancellationTokenSource();
DataContext = this;
Renderer.PropertyChanged += delegate
{
OnPropertyChanged(nameof(Page));
OnPropertyChanged(nameof(ZoomPercent));
};

MemoryChecker = new System.Windows.Threading.DispatcherTimer();
MemoryChecker.Tick += OnMemoryChecker;
MemoryChecker.Interval = new TimeSpan(0, 0, 1);
MemoryChecker.Start();

SearchManager = new PdfSearchManager(Renderer);
MatchCaseCheckBox.IsChecked = SearchManager.MatchCase;
WholeWordOnlyCheckBox.IsChecked = SearchManager.MatchWholeWord;
HighlightAllMatchesCheckBox.IsChecked = SearchManager.HighlightAllMatches;
}


private Process CurrentProcess { get; }
private CancellationTokenSource Cts { get; }
private System.Windows.Threading.DispatcherTimer MemoryChecker { get; }
private PdfSearchManager SearchManager { get; }

public string InfoText { get; set; }
public string SearchTerm { get; set; }
public PdfBookmarkCollection Bookmarks { get; set; }
public bool ShowBookmarks { get; set; }
public PdfBookmark SelectedBookIndex { get; set; }

public double ZoomPercent
{
get => Renderer.Zoom * 100;
Expand All @@ -50,32 +76,8 @@ public FlowDirection IsRtl
get => Renderer.IsRightToLeft ? FlowDirection.RightToLeft : FlowDirection.LeftToRight;
set => Renderer.IsRightToLeft = value == FlowDirection.RightToLeft ? true : false;
}


public MainWindow()
{
InitializeComponent();

CurrentProcess = Process.GetCurrentProcess();
Cts = new CancellationTokenSource();
DataContext = this;
Renderer.PropertyChanged += delegate
{
OnPropertyChanged(nameof(Page));
OnPropertyChanged(nameof(ZoomPercent));
};

MemoryChecker = new System.Windows.Threading.DispatcherTimer();
MemoryChecker.Tick += OnMemoryChecker;
MemoryChecker.Interval = new TimeSpan(0, 0, 1);
MemoryChecker.Start();

SearchManager = new PdfSearchManager(Renderer);
MatchCaseCheckBox.IsChecked = SearchManager.MatchCase;
WholeWordOnlyCheckBox.IsChecked = SearchManager.MatchWholeWord;
HighlightAllMatchesCheckBox.IsChecked = SearchManager.HighlightAllMatches;
}



private void OnMemoryChecker(object sender, EventArgs e)
{
CurrentProcess.Refresh();
Expand Down Expand Up @@ -126,7 +128,6 @@ protected override void OnClosed(EventArgs e)
MemoryChecker?.Stop();
Renderer?.Dispose();
}

private void OnPrevPageClick(object sender, RoutedEventArgs e)
{
Renderer.PreviousPage();
Expand All @@ -135,7 +136,6 @@ private void OnNextPageClick(object sender, RoutedEventArgs e)
{
Renderer.NextPage();
}

private void OnFitWidth(object sender, RoutedEventArgs e)
{
Renderer.SetZoomMode(PdfViewerZoomMode.FitWidth);
Expand All @@ -144,27 +144,22 @@ private void OnFitHeight(object sender, RoutedEventArgs e)
{
Renderer.SetZoomMode(PdfViewerZoomMode.FitHeight);
}

private void OnZoomInClick(object sender, RoutedEventArgs e)
{
Renderer.ZoomIn();
}

private void OnZoomOutClick(object sender, RoutedEventArgs e)
{
Renderer.ZoomOut();
}

private void OnRotateLeftClick(object sender, RoutedEventArgs e)
{
Renderer.Counterclockwise();
}

private void OnRotateRightClick(object sender, RoutedEventArgs e)
{
Renderer.ClockwiseRotate();
}

private void OnInfo(object sender, RoutedEventArgs e)
{
var info = Renderer.GetInformation();
Expand All @@ -183,7 +178,6 @@ private void OnInfo(object sender, RoutedEventArgs e)
MessageBox.Show(sb.ToString(), "Information", MessageBoxButton.OK, MessageBoxImage.Information);
}
}

private void OnGetText(object sender, RoutedEventArgs e)
{
var txtViewer = new TextViewer();
Expand All @@ -192,38 +186,31 @@ private void OnGetText(object sender, RoutedEventArgs e)
txtViewer.Caption = $"Page {page + 1} contains {txtViewer.Body?.Length} character(s):";
txtViewer.ShowDialog();
}

private void OnDisplayBookmarks(object sender, RoutedEventArgs e)
{
Bookmarks = Renderer.Bookmarks;
if(Bookmarks?.Count > 0)
ShowBookmarks = !ShowBookmarks;
}

private void OnContinuousModeClick(object sender, RoutedEventArgs e)
{
Renderer.PagesDisplayMode = PdfViewerPagesDisplayMode.ContinuousMode;
}

private void OnBookModeClick(object sender, RoutedEventArgs e)
{
Renderer.PagesDisplayMode = PdfViewerPagesDisplayMode.BookMode;
}

private void OnSinglePageModeClick(object sender, RoutedEventArgs e)
{
Renderer.PagesDisplayMode = PdfViewerPagesDisplayMode.SinglePageMode;
}

public event PropertyChangedEventHandler PropertyChanged;

[NotifyPropertyChangedInvocator]
protected virtual void OnPropertyChanged([CallerMemberName] string propertyName = null)
{
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
}


private void OnTransparent(object sender, RoutedEventArgs e)
{
if ((Renderer.Flags & PdfRenderFlags.Transparent) != 0)
Expand All @@ -235,21 +222,18 @@ private void OnTransparent(object sender, RoutedEventArgs e)
Renderer.Flags |= PdfRenderFlags.Transparent;
}
}

private void OpenCloseSearch(object sender, RoutedEventArgs e)
{
IsSearchOpen = !IsSearchOpen;
OnPropertyChanged(nameof(IsSearchOpen));
}

private void OnSearchTermKeyDown(object sender, KeyEventArgs e)
{
if (e.Key == Key.Enter)
{
Search();
}
}

private void SaveAsImages(object sender, RoutedEventArgs e)
{
// Create a "Save As" dialog for selecting a directory (HACK)
Expand Down Expand Up @@ -371,7 +355,12 @@ private async void OnClosePdf(object sender, RoutedEventArgs e)
Console.WriteLine(exception);
}
}

private void EnableHandTools(object sender, RoutedEventArgs e)
{
var toggle = (ToggleButton) sender;
Renderer.EnableKinetic = toggle.IsChecked == true;
}

/// <summary>
/// Call when SelectedBookIndex changed.
/// </summary>
Expand Down
15 changes: 15 additions & 0 deletions src/PdfiumViewer.Demo/PdfiumViewer.Demo.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,15 @@
<TargetFramework>netcoreapp3.1</TargetFramework>
<UseWPF>true</UseWPF>
<ApplicationIcon>icon.ico</ApplicationIcon>
<Version>1.0.5</Version>
<PackageReleaseNotes>Added bookmarks list and kinetic scroll on PDF</PackageReleaseNotes>
<Description>Demo of PDF viewer based on Google's PDFium.</Description>
<Copyright>Copyright © 2019-2020 Behzad Khosravifar</Copyright>
<PackageLicenseFile>LICENSE</PackageLicenseFile>
<PackageProjectUrl>https://github.com/bezzad/PdfiumViewer</PackageProjectUrl>
<RepositoryUrl>https://github.com/bezzad/PdfiumViewer.git</RepositoryUrl>
<RepositoryType>git</RepositoryType>
<PackageTags>pdfium pdf-viewer wpf-controls dotnet-core google-pdf-viewer chrome-pdf</PackageTags>
</PropertyGroup>

<ItemGroup>
Expand All @@ -13,6 +22,7 @@
<None Remove="Resources\find.png" />
<None Remove="Resources\fit_height.png" />
<None Remove="Resources\fit_width.png" />
<None Remove="Resources\hand_cursor.png" />
<None Remove="Resources\info.png" />
<None Remove="Resources\ltr.png" />
<None Remove="Resources\next.png" />
Expand All @@ -30,6 +40,10 @@
<None Remove="Resources\two_page.png" />
<None Remove="Resources\zoom_in.png" />
<None Remove="Resources\zoom_out.png" />
<None Include="..\..\LICENSE">
<Pack>True</Pack>
<PackagePath></PackagePath>
</None>
</ItemGroup>

<ItemGroup>
Expand All @@ -55,6 +69,7 @@
<Resource Include="Resources\fit_width.png">
<CopyToOutputDirectory>Never</CopyToOutputDirectory>
</Resource>
<Resource Include="Resources\hand_cursor.png" />
<Resource Include="Resources\info.png">
<CopyToOutputDirectory>Never</CopyToOutputDirectory>
</Resource>
Expand Down
Binary file added src/PdfiumViewer.Demo/Resources/hand_cursor.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
4 changes: 2 additions & 2 deletions src/PdfiumViewer/PdfiumViewer.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
<PropertyGroup>
<TargetFramework>netcoreapp3.1</TargetFramework>
<UseWPF>true</UseWPF>
<Version>1.0.4</Version>
<Version>1.0.5</Version>
<Authors>Behzad Khosravifar</Authors>
<Description>PDF viewer based on Google's PDFium port to .Net Core.</Description>
<Copyright>Copyright © 2019-2020 Behzad Khosravifar</Copyright>
Expand All @@ -15,7 +15,7 @@
<RunAnalyzersDuringBuild>false</RunAnalyzersDuringBuild>
<PackageId>PdfiumViewer.WPF</PackageId>
<PackageLicenseFile>LICENSE</PackageLicenseFile>
<PackageReleaseNotes>Added kinetic scrolling on PDF</PackageReleaseNotes>
<PackageReleaseNotes>Added EnableKinetic scroll option</PackageReleaseNotes>
</PropertyGroup>

<ItemGroup>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,8 @@ public partial class ScrollPanel
/// Friction Attached Dependency Property
/// </summary>
public static readonly DependencyProperty FrictionProperty =
DependencyProperty.RegisterAttached(nameof(Friction), typeof(double), typeof(ScrollPanel), new FrameworkPropertyMetadata(DefaultFriction));
DependencyProperty.RegisterAttached(nameof(Friction), typeof(double), typeof(ScrollPanel),
new FrameworkPropertyMetadata(DefaultFriction));

public double Friction
{
Expand All @@ -33,12 +34,32 @@ public double Friction

#endregion

#region EnableKinetic

/// <summary>
/// EnableKinetic Attached Dependency Property
/// </summary>
public static readonly DependencyProperty EnableKineticProperty =
DependencyProperty.RegisterAttached(nameof(EnableKinetic), typeof(bool), typeof(ScrollPanel),
new FrameworkPropertyMetadata(false));

public bool EnableKinetic
{
get => (bool)GetValue(EnableKineticProperty);
set
{
SetValue(EnableKineticProperty, value);
Cursor = value ? Cursors.Hand : Cursors.Arrow;
}
}

#endregion

protected override void OnPreviewMouseDown(MouseButtonEventArgs e)
{
base.OnPreviewMouseDown(e);

if (IsMouseOver)
if (EnableKinetic && IsMouseOver)
{
Cursor = Cursors.ScrollAll;
// Save starting point, used later when
Expand All @@ -54,7 +75,7 @@ protected override void OnPreviewMouseMove(MouseEventArgs e)
{
base.OnPreviewMouseMove(e);

if (IsMouseDown)
if (EnableKinetic && IsMouseDown)
{
var currentPoint = e.GetPosition(this);
// Determine the new amount to scroll.
Expand All @@ -70,9 +91,12 @@ protected override void OnPreviewMouseUp(MouseButtonEventArgs e)
{
base.OnPreviewMouseUp(e);

Cursor = Cursors.Arrow;
IsMouseDown = false;
InertiaHandleMouseUp();
if (EnableKinetic)
{
Cursor = Cursors.Hand;
IsMouseDown = false;
InertiaHandleMouseUp();
}
}

private Point GetScrollTarget(Point currentPoint)
Expand Down

0 comments on commit 4d7e8c6

Please sign in to comment.