Skip to content

Commit 31e08ba

Browse files
committed
Tiff navigation improvements and refactor #190
1 parent 8670c55 commit 31e08ba

File tree

2 files changed

+40
-14
lines changed

2 files changed

+40
-14
lines changed

Diff for: src/PicView.Avalonia/Navigation/NavigationHelper.cs

+39-13
Original file line numberDiff line numberDiff line change
@@ -64,13 +64,19 @@ public static async Task Navigate(bool next, MainViewModel vm)
6464
var navigateTo = next ? NavigateTo.Next : NavigateTo.Previous;
6565
var nextIteration = vm.ImageIterator.GetIteration(vm.ImageIterator.CurrentIndex, navigateTo);
6666
var currentFileName = vm.ImageIterator.ImagePaths[vm.ImageIterator.CurrentIndex];
67-
if (!TiffManager.IsTiff(currentFileName) || vm.ImageIterator.IsReversed)
67+
if (!TiffManager.IsTiff(currentFileName))
6868
{
6969
await CheckCancellationAndStartIterateToIndex(nextIteration, vm).ConfigureAwait(false);
70-
return;
7170
}
71+
else
72+
{
73+
await TiffNavigation(vm, currentFileName, nextIteration).ConfigureAwait(false);
74+
}
75+
}
7276

73-
if (TiffNavigationInfo is null)
77+
private static async Task TiffNavigation(MainViewModel vm, string currentFileName, int nextIteration)
78+
{
79+
if (TiffNavigationInfo is null && !vm.ImageIterator.IsReversed)
7480
{
7581
var tiffPages = await Task.FromResult(TiffManager.LoadTiffPages(currentFileName)).ConfigureAwait(false);
7682
if (tiffPages.Count < 1)
@@ -80,25 +86,45 @@ public static async Task Navigate(bool next, MainViewModel vm)
8086
}
8187
TiffNavigationInfo = new TiffManager.TiffNavigationInfo
8288
{
83-
CurrentPage = 1, // Skip first page since it has already been shown
89+
CurrentPage = 0,
8490
PageCount = tiffPages.Count,
8591
Pages = tiffPages
8692
};
8793
}
88-
else
89-
{
90-
TiffNavigationInfo.CurrentPage += 1;
91-
}
92-
93-
if (TiffNavigationInfo.CurrentPage >= TiffNavigationInfo.PageCount)
94+
95+
if (TiffNavigationInfo is null)
9496
{
95-
TiffNavigationInfo.Dispose();
96-
TiffNavigationInfo = null;
9797
await CheckCancellationAndStartIterateToIndex(nextIteration, vm).ConfigureAwait(false);
9898
}
9999
else
100100
{
101-
UpdateImage.SetTiffImage(TiffNavigationInfo, Path.GetFileName(currentFileName), vm);
101+
if (vm.ImageIterator.IsReversed)
102+
{
103+
if (TiffNavigationInfo.CurrentPage - 1 <= 0)
104+
{
105+
await CheckCancellationAndStartIterateToIndex(vm.ImageIterator.CurrentIndex, vm).ConfigureAwait(false);
106+
TiffNavigationInfo.Dispose();
107+
TiffNavigationInfo = null;
108+
return;
109+
}
110+
111+
TiffNavigationInfo.CurrentPage -= 1;
112+
}
113+
else
114+
{
115+
TiffNavigationInfo.CurrentPage += 1;
116+
}
117+
118+
if (TiffNavigationInfo.CurrentPage >= TiffNavigationInfo.PageCount || TiffNavigationInfo.CurrentPage <= 0)
119+
{
120+
await CheckCancellationAndStartIterateToIndex(nextIteration, vm).ConfigureAwait(false);
121+
TiffNavigationInfo.Dispose();
122+
TiffNavigationInfo = null;
123+
}
124+
else
125+
{
126+
UpdateImage.SetTiffImage(TiffNavigationInfo, Path.GetFileName(currentFileName), vm);
127+
}
102128
}
103129
}
104130

Diff for: src/PicView.Avalonia/Navigation/UpdateImage.cs

+1-1
Original file line numberDiff line numberDiff line change
@@ -200,7 +200,7 @@ public static void SetTiffImage(TiffManager.TiffNavigationInfo tiffNavigationInf
200200
var width = source?.PixelSize.Width ?? 0;
201201
var height = source?.PixelSize.Height ?? 0;
202202

203-
name = name.Insert(name.LastIndexOf('.'), $" [{tiffNavigationInfo.CurrentPage}/{tiffNavigationInfo.PageCount - 1}]");
203+
name = name.Insert(name.LastIndexOf('.'), $" [{tiffNavigationInfo.CurrentPage + 1}/{tiffNavigationInfo.PageCount}]");
204204

205205
Dispatcher.UIThread.Invoke(() =>
206206
{

0 commit comments

Comments
 (0)