Пример #1
0
        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();
        }
Пример #2
0
        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();
        }
Пример #3
0
        public async Task CorrectAllContainerBitmap()
        {
            // BitmapDecodePixelOfTileにサイズが足りていないBitmapImageを開放
            Containers.ForEach(c => c.ReleaseIncorrectSizeBitmap());

            // 更新
            await LoadAllContainerImage();
        }
Пример #4
0
        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);
            }
        }
Пример #5
0
        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();
        }
Пример #6
0
        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);
        }
Пример #7
0
        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));
            }
        }
Пример #8
0
        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);
        }
Пример #9
0
 public void Show()
 {
     Containers.ForEach(c => c.Visibility = Visibility.Visible);
 }
Пример #10
0
 public void Hide()
 {
     Containers.ForEach(c => c.Visibility = Visibility.Collapsed);
 }
Пример #11
0
 public void ApplyGridLineColor()
 {
     Containers.ForEach(c => c.ApplyGridLineColor());
 }
Пример #12
0
        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));
        }
Пример #13
0
 public void InitContainerIndex()
 {
     Containers.ForEach(c => c.InitIndex());
 }
Пример #14
0
 public void InitContainerPos()
 {
     Containers.ForEach(c => c.InitPos(CurrentSlideDirection));
 }
Пример #15
0
 public void SetImageElementToContainerGrid()
 {
     Containers.ForEach(tc => tc.SetImageElementToGrid());
 }
Пример #16
0
 public void InitBitmapDecodePixelOfTile()
 {
     Containers.ForEach(c => c.InitBitmapDecodePixelOfTile());
 }
Пример #17
0
 public void InitContainerGrid()
 {
     Containers.ForEach(c => c.InitGrid(TempProfile.NumofMatrix.Col, TempProfile.NumofMatrix.Row));
 }