OSDN Git Service

ShowErrorImage/ShowInitialImage実行後にSizeModeを変更すると表示モードが変わってしまう不具合を修正
authorKimura Youichi <kim.upsilon@bucyou.net>
Sun, 9 Mar 2014 22:47:14 +0000 (07:47 +0900)
committerKimura Youichi <kim.upsilon@bucyou.net>
Sun, 9 Mar 2014 22:50:47 +0000 (07:50 +0900)
OpenTween.Tests/OTPictureBoxTest.cs [new file with mode: 0644]
OpenTween.Tests/OpenTween.Tests.csproj
OpenTween/OTPictureBox.cs

diff --git a/OpenTween.Tests/OTPictureBoxTest.cs b/OpenTween.Tests/OTPictureBoxTest.cs
new file mode 100644 (file)
index 0000000..f62b19a
--- /dev/null
@@ -0,0 +1,105 @@
+// OpenTween - Client of Twitter
+// Copyright (c) 2014 kim_upsilon (@kim_upsilon) <https://upsilo.net/~upsilon/>
+// All rights reserved.
+//
+// This file is part of OpenTween.
+//
+// This program is free software; you can redistribute it and/or modify it
+// under the terms of the GNU General Public License as published by the Free
+// Software Foundation; either version 3 of the License, or (at your option)
+// any later version.
+//
+// This program is distributed in the hope that it will be useful, but
+// WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+// or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+// for more details.
+//
+// You should have received a copy of the GNU General Public License along
+// with this program. If not, see <http://www.gnu.org/licenses/>, or write to
+// the Free Software Foundation, Inc., 51 Franklin Street - Fifth Floor,
+// Boston, MA 02110-1301, USA.
+
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Windows.Forms;
+using Xunit;
+using Xunit.Extensions;
+using System.Drawing;
+using System.IO;
+using System.Drawing.Imaging;
+
+namespace OpenTween
+{
+    public class OTPictureBoxTest
+    {
+        [Fact]
+        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);
+            }
+        }
+
+        [Fact]
+        public void SizeMode_ErrorImageTest()
+        {
+            using (var picbox = new OTPictureBox())
+            {
+                picbox.SizeMode = PictureBoxSizeMode.Zoom;
+
+                picbox.ShowErrorImage();
+
+                Assert.Equal(PictureBoxSizeMode.Zoom, picbox.SizeMode);
+                Assert.Equal(PictureBoxSizeMode.CenterImage, ((PictureBox)picbox).SizeMode);
+            }
+        }
+
+        [Fact]
+        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);
+            }
+        }
+
+        [Fact]
+        public void SizeMode_RestoreTest()
+        {
+            using (var picbox = new OTPictureBox())
+            {
+                picbox.SizeMode = PictureBoxSizeMode.Zoom;
+
+                picbox.ShowErrorImage();
+
+                picbox.Image = this.CreateDummyImage();
+
+                Assert.Equal(PictureBoxSizeMode.Zoom, picbox.SizeMode);
+                Assert.Equal(PictureBoxSizeMode.Zoom, ((PictureBox)picbox).SizeMode);
+            }
+        }
+
+        MemoryImage CreateDummyImage()
+        {
+            using (var bitmap = new Bitmap(100, 100))
+            using (var stream = new MemoryStream())
+            {
+                bitmap.Save(stream, ImageFormat.Png);
+                stream.Position = 0;
+
+                return MemoryImage.CopyFromStream(stream);
+            }
+        }
+    }
+}
index 252ca5e..9bd9283 100644 (file)
@@ -61,6 +61,7 @@
     <Compile Include="BingTest.cs" />
     <Compile Include="HashtagManageTest.cs" />
     <Compile Include="MyApplicationTest.cs" />
+    <Compile Include="OTPictureBoxTest.cs" />
     <Compile Include="PostFilterRuleTest.cs" />
     <Compile Include="FoursquareTest.cs" />
     <Compile Include="LRUCacheDictionaryTest.cs" />
index 9bcf13a..0e35812 100644 (file)
@@ -54,26 +54,26 @@ namespace OpenTween
         [DefaultValue(PictureBoxSizeMode.Normal)]
         public new PictureBoxSizeMode SizeMode
         {
-            get { return base.SizeMode; }
+            get { return this.currentSizeMode; }
             set
             {
-                base.SizeMode = value;
-                this.previousSizeMode = value;
+                this.currentSizeMode = value;
+
+                if (base.Image != base.InitialImage && base.Image != base.ErrorImage)
+                {
+                    base.SizeMode = value;
+                }
             }
         }
 
         /// <summary>
         /// InitialImage や ErrorImage の表示に SizeMode を一時的に変更するため、
-        /// 以前の SizeMode を記憶しておくためのフィールド
+        /// 現在の SizeMode を記憶しておくためのフィールド
         /// </summary>
-        private PictureBoxSizeMode previousSizeMode;
+        private PictureBoxSizeMode currentSizeMode;
 
         public void ShowInitialImage()
         {
-            if (base.Image != base.InitialImage && base.Image != base.ErrorImage)
-            {
-                this.previousSizeMode = this.SizeMode;
-            }
             base.Image = base.InitialImage;
 
             // InitialImage は SizeMode の値に依らず中央等倍に表示する必要がある
@@ -82,10 +82,6 @@ namespace OpenTween
 
         public void ShowErrorImage()
         {
-            if (base.Image != base.InitialImage && base.Image != base.ErrorImage)
-            {
-                this.previousSizeMode = this.SizeMode;
-            }
             base.Image = base.ErrorImage;
 
             // ErrorImage は SizeMode の値に依らず中央等倍に表示する必要がある
@@ -94,7 +90,7 @@ namespace OpenTween
 
         private void RestoreSizeMode()
         {
-            this.SizeMode = this.previousSizeMode;
+            base.SizeMode = this.currentSizeMode;
         }
 
         [Browsable(false)]