public async Task InitAllContainer(int index) { StopSlideShow(true); // シークバー初期化 MainWindow.Current.InitSeekbar(); ImagePool.InitIndex(index); ImagePool.InitImageFileContextRefCount(); InitContainerIndex(); InitContainerSize(); InitContainerPos(); InitWrapPoint(CurrentSlideDirection); Containers.ForEach(c => c.ImageFileContextMapList.Clear()); InitContainerGrid(); InitBitmapDecodePixelOfTile(); SetImageElementToContainerGrid(); // 読み込めるファイルが無い場合 if (ImagePool.ImageFileContextList.Count < 1) { MainWindow.Current.UpdatePageInfo(); MainWindow.Current.UpdateMainWindowView(); return; } // 前方向マッピング MapImageFileContextToContainer(Containers[2], false); MapImageFileContextToContainer(Containers[3], false); MapImageFileContextToContainer(Containers[4], false); // 巻き戻し方向マッピング MapImageFileContextToContainer(Containers[1], true); MapImageFileContextToContainer(Containers[0], true); // メインウインドウ表示更新 MainWindow.Current.UpdateMainWindowView(); // ページ番号更新 MainWindow.Current.UpdatePageInfo(); // まだ読み込み中のTaskがあるならキャンセル Containers.ForEach(c => c.Cts?.Cancel()); // 画像のロード await semaphoreSlim.WaitAsync(); try { await LoadAllContainerImage(); await CorrectAllContainerBitmap(); } finally { semaphoreSlim.Release(); } // 使われていないBitmapImageの開放 ImagePool.ReleaseBitmapImageOutofRefarence(); // メインウインドウ表示更新 MainWindow.Current.UpdateMainWindowView(); }
public async Task ChangeCurrentIndex(int index) { if (IsActiveSliding) { return; } StopSlideShow(true); ImagePool.InitIndex(index); ImagePool.InitImageFileContextRefCount(); InitContainerIndex(); InitContainerPos(); // マッピング MapImageFileContextToContainer(Containers[2], false); MapImageFileContextToContainer(Containers[3], false); MapImageFileContextToContainer(Containers[4], false); MapImageFileContextToContainer(Containers[1], true); MapImageFileContextToContainer(Containers[0], true); // ページ番号 MainWindow.Current.UpdatePageInfo(); // まだ読み込み中のTaskがあるならキャンセル Containers.ForEach(c => c.Cts?.Cancel()); // 画像のロード await semaphoreSlim.WaitAsync(); try { await LoadAllContainerImage(); } finally { semaphoreSlim.Release(); } // 使われていないBitmapImageの開放 ImagePool.ReleaseBitmapImageOutofRefarence(); }
public async Task CorrectAllContainerBitmap() { // BitmapDecodePixelOfTileにサイズが足りていないBitmapImageを開放 Containers.ForEach(c => c.ReleaseIncorrectSizeBitmap()); // 更新 await LoadAllContainerImage(); }
public List <Container> CreateContainers() { XmlSerializer serializer = new XmlSerializer(typeof(List <Container>), new XmlRootAttribute("Containers")); using (XmlReader reader = XmlReader.Create(@"..\..\data\containers.xml")) { Containers = (List <Container>)serializer.Deserialize(reader); Containers.ForEach(i => XMLReference <Item> .Link(i.Contents, Items)); return(Containers); } }
public void StopSlideShow(bool allowNotification) { Containers.ForEach(c => c.Animation.StopSlideAnimation()); if (allowNotification && TempProfile.SlidePlayMethod.Value == SlidePlayMethod.Interval && IntervalSlideTimer.IsEnabled) { MainWindow.Current.NotificationBlock.Show("スライドショー停止", NotificationPriority.Normal, NotificationTime.Short, NotificationType.None); } IntervalSlideTimer.Stop(); IntervalSlideTimerCount = 0; SlideShowState = SlideShowState.Stop; MainWindow.Current.UpdateToolbarViewing(); }
public async Task ReturnContainerRev(ImgContainer container) { container.Cts?.Cancel(); CancellationTokenSource cts = new CancellationTokenSource(); container.Cts = cts; Containers.ForEach(c => c.CurrentIndex += 1); container.CurrentIndex = -numofBackwardContainer; container.InitPos(CurrentSlideDirection); ReleaseContainerImage(container); ImagePool.ShiftForwardIndex(-container.NumofImage); MapImageFileContextToContainer(container, true); MainWindow.Current.UpdatePageInfo(); await container.LoadImage(cts.Token); }
internal void ValidateAndResolve(ModuleJson module) { Validation.Validate(Fields is object ^ Containers is object, "Each container must either specify fields or containers as children, but not both."); if (Fields is object) { Validation.Validate(Size is object, "Field containers must specify a size."); Fields.ForEach(f => f.ValidateJson(module)); resolvedFields = ResolveFields(module); requiresOverlayResolution = resolvedFields.Any(f => f is OverlayField overlay && overlay.SwitchPath.Contains('{')); } else { Containers?.ForEach(f => f.ValidateJson(module)); } }
public async Task ReturnContainer(ImgContainer container) { // まだコンテナにTaskが残っているならキャンセル container.Cts?.Cancel(); // キャンセルトークン作成 CancellationTokenSource cts = new CancellationTokenSource(); container.Cts = cts; Containers.ForEach(c => c.CurrentIndex -= 1); container.CurrentIndex = numofForwardContainer; container.InitPos(CurrentSlideDirection); ReleaseContainerImage(container); ImagePool.ShiftBackwardIndex(container.NumofImage); MapImageFileContextToContainer(container, false); MainWindow.Current.UpdatePageInfo(); await container.LoadImage(cts.Token); }
public void Show() { Containers.ForEach(c => c.Visibility = Visibility.Visible); }
public void Hide() { Containers.ForEach(c => c.Visibility = Visibility.Collapsed); }
public void ApplyGridLineColor() { Containers.ForEach(c => c.ApplyGridLineColor()); }
public void InitContainerSize() { Profile pf = this.TempProfile; Containers.ForEach(c => c.InitSize(pf.AspectRatio.H, pf.AspectRatio.V, pf.TilePadding.Value, pf.NumofMatrix.Col, pf.NumofMatrix.Row)); }
public void InitContainerIndex() { Containers.ForEach(c => c.InitIndex()); }
public void InitContainerPos() { Containers.ForEach(c => c.InitPos(CurrentSlideDirection)); }
public void SetImageElementToContainerGrid() { Containers.ForEach(tc => tc.SetImageElementToGrid()); }
public void InitBitmapDecodePixelOfTile() { Containers.ForEach(c => c.InitBitmapDecodePixelOfTile()); }
public void InitContainerGrid() { Containers.ForEach(c => c.InitGrid(TempProfile.NumofMatrix.Col, TempProfile.NumofMatrix.Row)); }