OSDN Git Service

ListViewのカラム幅のスケーリング処理をOTBaseFormに移動
authorKimura Youichi <kim.upsilon@bucyou.net>
Tue, 3 Feb 2015 00:24:33 +0000 (09:24 +0900)
committerKimura Youichi <kim.upsilon@bucyou.net>
Thu, 5 Feb 2015 16:20:05 +0000 (01:20 +0900)
OpenTween.Tests/OTBaseFormTest.cs
OpenTween/ApiInfoDialog.cs
OpenTween/EventViewerDialog.cs
OpenTween/OTBaseForm.cs
OpenTween/Tween.cs

index 14519fe..4211a48 100644 (file)
@@ -57,5 +57,23 @@ namespace OpenTween
                 Assert.Equal(new SizeF(1.25f, 1.25f), form.CurrentScaleFactor);
             }
         }
+
+        [Fact]
+        public void ScaleChildControl_ListViewTest()
+        {
+            using (var listview = new ListView { Width = 200, Height = 200 })
+            {
+                listview.Columns.AddRange(new[]
+                {
+                    new ColumnHeader { Width = 60 },
+                    new ColumnHeader { Width = 140 },
+                });
+
+                OTBaseForm.ScaleChildControl(listview, new SizeF(1.25f, 1.25f));
+
+                Assert.Equal(75, listview.Columns[0].Width);
+                Assert.Equal(175, listview.Columns[1].Width);
+            }
+        }
     }
 }
index 920c04e..8be3885 100644 (file)
@@ -128,12 +128,7 @@ namespace OpenTween
         protected override void ScaleControl(SizeF factor, BoundsSpecified specified)
         {
             base.ScaleControl(factor, specified);
-
-            // カラムヘッダは自動調節されないのでfactorから計算
-            foreach (ColumnHeader col in this.ListViewApi.Columns)
-            {
-                col.Width = (int)Math.Round(col.Width * factor.Width);
-            }
+            ScaleChildControl(this.ListViewApi, factor);
         }
     }
 
index 244a041..6c184f5 100644 (file)
@@ -57,6 +57,12 @@ namespace OpenTween
             this.TabEventType.HandleCreated += (s, e) => NativeMethods.SetMinTabWidth((TabControl)s, 40);
         }
 
+        protected override void ScaleControl(SizeF factor, BoundsSpecified specified)
+        {
+            base.ScaleControl(factor, specified);
+            ScaleChildControl(this.EventList, factor);
+        }
+
         private void OK_Button_Click(object sender, EventArgs e)
         {
             this.DialogResult = DialogResult.OK;
index b7d134e..5ef1e45 100644 (file)
@@ -85,6 +85,18 @@ namespace OpenTween
                 this.CurrentAutoScaleDimensions.Height / baseDpi);
         }
 
+        /// <summary>
+        /// 標準の ListView のスケーリングでは不十分な処理を補います
+        /// </summary>
+        public static void ScaleChildControl(ListView listview, SizeF factor)
+        {
+            // カラム幅
+            foreach (ColumnHeader col in listview.Columns)
+            {
+                col.Width = ScaleBy(factor.Width, col.Width);
+            }
+        }
+
         public static Size ScaleBy(SizeF factor, Size size)
         {
             return Size.Round(new SizeF(size.Width * factor.Width, size.Height * factor.Height));
index c7f9bb1..80b3bb7 100644 (file)
@@ -5379,6 +5379,19 @@ namespace OpenTween
             }
         }
 
+        protected override void ScaleControl(SizeF factor, BoundsSpecified specified)
+        {
+            base.ScaleControl(factor, specified);
+
+            var tabpages = this.ListTab.TabPages.Cast<TabPage>();
+            var listviews = tabpages.Select(x => x.Tag).Cast<ListView>();
+
+            foreach (var listview in listviews)
+            {
+                ScaleChildControl(listview, factor);
+            }
+        }
+
         //private void DrawListViewItemStateIcon(DrawListViewSubItemEventArgs e, RectangleF rct)
         //{
         //    ImageListViewItem item = (ImageListViewItem)e.Item;