public ArchiveTabContent() { this.InitializeComponent(); ReaderBackground.SetVisualOpacity(0); ScrollViewer.SetVisualOpacity(0); Data = DataContext as ArchivePageViewModel; Data.ZoomChangedEvent += FitImages; Data.RebuildReader += RebuildReader; _loadSemaphore.Wait(); Service.Events.RebuildReaderImagesSetEvent += RebuildReader; }
private async void OpenReader(int page, object item = null) { if (_transition) { return; } _transition = true; var readerSet = Data.ArchiveImagesReader.FirstOrDefault(s => s.Page >= page); if (readerSet == null) { return; } var index = Data.ArchiveImagesReader.IndexOf(readerSet); if (Service.Platform.AnimationsEnabled && item != null && !Data.UseVerticalReader) { var image = ImagesGrid.ContainerFromItem(item).FindDescendant("Thumbnail"); if (!(image.ActualWidth == 0 || image.ActualHeight == 0)) { var anim = ConnectedAnimationService.GetForCurrentView().PrepareToAnimate(GetOpenTarget(readerSet, page), image); anim.Configuration = new BasicConnectedAnimationConfiguration(); } } Data.ShowReader = true; Data.ReaderIndex = index; if (Data.UseVerticalReader) { await Task.Delay(100); var element = ReaderVertical.GetOrCreateElement(index); element.UpdateLayout(); element.StartBringIntoView(new BringIntoViewOptions { AnimationDesired = false, VerticalAlignmentRatio = 0f }); } else { await ChangePage(); } if (Data.Archive.isnew) { _wasNew = true; } if (Service.Platform.AnimationsEnabled) { FadeIn.Start(ReaderBackground); await FadeIn.StartAsync(ScrollViewer); } else { ReaderBackground.SetVisualOpacity(1); ScrollViewer.SetVisualOpacity(1); } _focus = true; FocusReader(); _transition = false; }
public async void CloseReader() { if (_transition) { return; } _transition = true; var animate = Service.Platform.AnimationsEnabled; ConnectedAnimation animLeft = null, animRight = null; if (!Data.UseVerticalReader) { var left = ReaderImage.FindDescendant("LeftImage"); var right = ReaderImage.FindDescendant("RightImage"); ReaderImage.disableAnimation = true; if (animate) { if (Data.ReaderContent.LeftImage != null && !(left.ActualWidth == 0 || left.ActualHeight == 0)) { animLeft = ConnectedAnimationService.GetForCurrentView().PrepareToAnimate("closeL", left); animLeft.Configuration = new BasicConnectedAnimationConfiguration(); } if (Data.ReaderContent.RightImage != null && !(right.ActualWidth == 0 || right.ActualHeight == 0)) { animRight = ConnectedAnimationService.GetForCurrentView().PrepareToAnimate("closeR", right); animRight.Configuration = new BasicConnectedAnimationConfiguration(); } } } _focus = false; int currentPage = Data.ReaderContent.Page; int count = Data.Pages; int leftTarget = currentPage; int rightTarget = currentPage; if (Data.ReaderContent.TwoPages) { leftTarget--; if (Data.ReadRTL) { int tmp = leftTarget; leftTarget = rightTarget; rightTarget = tmp; } } leftTarget = leftTarget.Clamp(0, count - 1); rightTarget = rightTarget.Clamp(0, count - 1); if (animate) { if (Data.ReaderContent.LeftImage != null && animLeft != null && Data.ArchiveImages.Count > leftTarget) { animLeft.TryStart(ImagesGrid.ContainerFromIndex(leftTarget).FindDescendant("Thumbnail")); } if (Data.ReaderContent.RightImage != null & animRight != null && Data.ArchiveImages.Count > rightTarget) { animRight.TryStart(ImagesGrid.ContainerFromIndex(rightTarget).FindDescendant("Thumbnail")); } FadeOut.Start(ReaderBackground); await FadeOut.StartAsync(ScrollViewer); await Task.Delay(200); // Give it a sec } else { ReaderBackground.SetVisualOpacity(0); ScrollViewer.SetVisualOpacity(0); } Data.ShowReader = false; _wasNew = await Data.SaveReaderData(_wasNew); _transition = false; }