public void SizeMode_SetterGetterTest() { using (var picbox = new OTPictureBox()) { picbox.SizeMode = PictureBoxSizeMode.Zoom; Assert.Equal(PictureBoxSizeMode.Zoom, picbox.SizeMode); Assert.Equal(PictureBoxSizeMode.Zoom, ((PictureBox)picbox).SizeMode); } }
public void SizeMode_ErrorImageTest2() { using (var picbox = new OTPictureBox()) { picbox.ShowErrorImage(); picbox.SizeMode = PictureBoxSizeMode.Zoom; Assert.Equal(PictureBoxSizeMode.Zoom, picbox.SizeMode); Assert.Equal(PictureBoxSizeMode.CenterImage, ((PictureBox)picbox).SizeMode); } }
public void SizeMode_RestoreTest() { using (var picbox = new OTPictureBox()) { picbox.SizeMode = PictureBoxSizeMode.Zoom; picbox.ShowErrorImage(); picbox.Image = TestUtils.CreateDummyImage(); Assert.Equal(PictureBoxSizeMode.Zoom, picbox.SizeMode); Assert.Equal(PictureBoxSizeMode.Zoom, ((PictureBox)picbox).SizeMode); } }
public async Task SetImageFromAsync_ErrorTest() { using (var picbox = new OTPictureBox()) { // Mono でのテスト実行時にデッドロックする問題の対策 SynchronizationContext.SetSynchronizationContext(new SynchronizationContext()); var tcs = new TaskCompletionSource <MemoryImage>(); var setImageTask = picbox.SetImageFromTask(() => tcs.Task); Assert.Equal(picbox.InitialImage, ((PictureBox)picbox).Image); tcs.SetException(new InvalidImageException()); await setImageTask; Assert.Equal(picbox.ErrorImage, ((PictureBox)picbox).Image); } }
public async Task SetImageFromAsync_Test() { using (var picbox = new OTPictureBox()) { // Mono でのテスト実行時にデッドロックする問題の対策 SynchronizationContext.SetSynchronizationContext(new SynchronizationContext()); var tcs = new TaskCompletionSource <MemoryImage>(); var setImageTask = picbox.SetImageFromTask(() => tcs.Task); Assert.Equal(picbox.InitialImage, ((PictureBox)picbox).Image); var image = TestUtils.CreateDummyImage(); tcs.SetResult(image); await setImageTask; Assert.Equal(image, picbox.Image); } }
public async Task SetImageFromAsync_Test() { using (var picbox = new OTPictureBox()) { // Mono でのテスト実行時にデッドロックする問題の対策 SynchronizationContext.SetSynchronizationContext(new SynchronizationContext()); var tcs = new TaskCompletionSource<MemoryImage>(); var setImageTask = picbox.SetImageFromTask(() => tcs.Task); Assert.Equal(picbox.InitialImage, ((PictureBox)picbox).Image); var image = TestUtils.CreateDummyImage(); tcs.SetResult(image); await setImageTask; Assert.Equal(image, picbox.Image); } }
public async Task SetImageFromAsync_ErrorTest() { using (var picbox = new OTPictureBox()) { // Mono でのテスト実行時にデッドロックする問題の対策 SynchronizationContext.SetSynchronizationContext(new SynchronizationContext()); var tcs = new TaskCompletionSource<MemoryImage>(); var setImageTask = picbox.SetImageFromTask(() => tcs.Task); Assert.Equal(picbox.InitialImage, ((PictureBox)picbox).Image); tcs.SetException(new InvalidImageException()); await setImageTask; Assert.Equal(picbox.ErrorImage, ((PictureBox)picbox).Image); } }
public static void Show(OTPictureBox picbox, Point originPos) { if (picbox == null || picbox.Image == null) throw new ArgumentNullException("picbox"); if (picbox.IsDisposed) throw new ObjectDisposedException("picbox"); // ポップアップ表示中は、サムネイル枠の画像を乗っ取ってダミーとすり替えておく var thumbnail = picbox.Image; picbox.Image = null; var popup = new ThumbnailZoomWindow(thumbnail, (ThumbnailInfo)picbox.Tag, picbox.RectangleToScreen(picbox.Bounds), picbox.PointToScreen(originPos)) { BackColor = picbox.BackColor, }; popup.Disposed += (s, e) => { // 乗っ取った画像は、サムネイル枠に戻せるなら戻し、戻せないなら破棄する if (!picbox.IsDisposed) picbox.Image = thumbnail; else thumbnail.Dispose(); }; popup.Show(); picbox.Update(); }
protected ThumbnailZoomWindow(MemoryImage thumbnail, ThumbnailInfo thumbInfo, Rectangle startupBounds, Point originPos) { this.startupBounds = startupBounds; this.originPos = originPos; using (ControlTransaction.Layout(this, false)) { this.DoubleBuffered = true; this.TopMost = true; this.FormBorderStyle = FormBorderStyle.None; this.ShowInTaskbar = false; this.StartPosition = FormStartPosition.Manual; this.Bounds = startupBounds; this.Capture = true; this.MouseMove += ThumbnailZoomWindow_MouseMove; this.MouseUp += ThumbnailZoomWindow_MouseUp; var picbox = new OTPictureBox() { Name = "picbox", Image = thumbnail, Tag = thumbInfo, SizeMode = PictureBoxSizeMode.Zoom, WaitOnLoad = false, Dock = DockStyle.Fill, }; this.Controls.Add(picbox); picbox.MouseMove += ThumbnailZoomWindow_MouseMove; picbox.MouseUp += ThumbnailZoomWindow_MouseUp; } }
private async Task SetThumbnailImageAsync(OTPictureBox picbox, ThumbnailInfo thumbInfo, CancellationToken cancelToken) { try { picbox.ShowInitialImage(); picbox.MouseDown += this.pictureBox_MouseDown; picbox.MouseUp += this.pictureBox_MouseUp; picbox.Image = await thumbInfo.LoadThumbnailImageAsync(cancelToken); cancelToken.ThrowIfCancellationRequested(); picbox.MouseMove += this.pictureBox_MouseMove; if (this.ThumbnailLoadCompleted != null) this.ThumbnailLoadCompleted(picbox, EventArgs.Empty); } catch (Exception) { picbox.ShowErrorImage(); try { throw; } catch (HttpRequestException) { } catch (InvalidImageException) { } catch (TaskCanceledException) { } catch (WebException) { } } }
private async Task SetThumbnailImageAsync(OTPictureBox picbox, ThumbnailInfo thumbInfo, CancellationToken cancelToken) { try { picbox.ShowInitialImage(); picbox.Image = await thumbInfo.LoadThumbnailImageAsync(cancelToken); } catch (Exception) { picbox.ShowErrorImage(); try { throw; } catch (HttpRequestException) { } catch (InvalidImageException) { } catch (TaskCanceledException) { } } }