Author: jpobst
Date: 2007-08-22 17:48:16 -0400 (Wed, 22 Aug 2007)
New Revision: 84666

Modified:
   trunk/mcs/class/Managed.Windows.Forms/System.Windows.Forms/ChangeLog
   trunk/mcs/class/Managed.Windows.Forms/System.Windows.Forms/CheckBox.cs
   trunk/mcs/class/Managed.Windows.Forms/System.Windows.Forms/Theme.cs
   
trunk/mcs/class/Managed.Windows.Forms/System.Windows.Forms/ThemeWin32Classic.cs
   trunk/mcs/class/Managed.Windows.Forms/Test/System.Windows.Forms/ChangeLog
   
trunk/mcs/class/Managed.Windows.Forms/Test/System.Windows.Forms/ComboBoxTest.cs
Log:
2007-08-22  Jonathan Pobst  <[EMAIL PROTECTED]>

        * CheckBox.cs: Implement AutoSize calculation.

2007-08-22  Jonathan Pobst  <[EMAIL PROTECTED]>

        * ComboBoxTest.cs: Add test for AutoSize behavior.

Modified: trunk/mcs/class/Managed.Windows.Forms/System.Windows.Forms/ChangeLog
===================================================================
--- trunk/mcs/class/Managed.Windows.Forms/System.Windows.Forms/ChangeLog        
2007-08-22 21:27:33 UTC (rev 84665)
+++ trunk/mcs/class/Managed.Windows.Forms/System.Windows.Forms/ChangeLog        
2007-08-22 21:48:16 UTC (rev 84666)
@@ -1,5 +1,9 @@
 2007-08-22  Jonathan Pobst  <[EMAIL PROTECTED]>
 
+       * CheckBox.cs: Implement AutoSize calculation.
+
+2007-08-22  Jonathan Pobst  <[EMAIL PROTECTED]>
+
        * CheckBox.cs: Use new 2.0 rendering for 2.0.
        * Theme.cs: Method declarations for 2.0 rendering path.
        * ThemeWin32Classic.cs: 2.0 rendering implementation for CheckBox.

Modified: trunk/mcs/class/Managed.Windows.Forms/System.Windows.Forms/CheckBox.cs
===================================================================
--- trunk/mcs/class/Managed.Windows.Forms/System.Windows.Forms/CheckBox.cs      
2007-08-22 21:27:33 UTC (rev 84665)
+++ trunk/mcs/class/Managed.Windows.Forms/System.Windows.Forms/CheckBox.cs      
2007-08-22 21:48:16 UTC (rev 84666)
@@ -140,6 +140,16 @@
 #endif
                }
 
+#if NET_2_0
+               internal override Size GetPreferredSizeCore (Size proposedSize)
+               {
+                       if (this.AutoSize)
+                               return 
ThemeEngine.Current.CalculateCheckBoxAutoSize (this);
+
+                       return base.GetPreferredSizeCore (proposedSize);
+               }
+#endif
+
                internal override void HaveDoubleClick() {
                        if (DoubleClick != null) DoubleClick(this, 
EventArgs.Empty);
                }

Modified: trunk/mcs/class/Managed.Windows.Forms/System.Windows.Forms/Theme.cs
===================================================================
--- trunk/mcs/class/Managed.Windows.Forms/System.Windows.Forms/Theme.cs 
2007-08-22 21:27:33 UTC (rev 84665)
+++ trunk/mcs/class/Managed.Windows.Forms/System.Windows.Forms/Theme.cs 
2007-08-22 21:48:16 UTC (rev 84666)
@@ -725,6 +725,7 @@
 
                #region CheckBox
 #if NET_2_0
+               public abstract Size CalculateCheckBoxAutoSize (CheckBox 
checkBox);
                public abstract void CalculateCheckBoxTextAndImageLayout 
(ButtonBase b, Point offset, out Rectangle glyphArea, out Rectangle 
textRectangle, out Rectangle imageRectangle);
                public abstract void DrawCheckBox (Graphics g, CheckBox cb, 
Rectangle textBounds, Rectangle glyphArea, Rectangle imageBounds, Rectangle 
clipRectangle);
 #endif

Modified: 
trunk/mcs/class/Managed.Windows.Forms/System.Windows.Forms/ThemeWin32Classic.cs
===================================================================
--- 
trunk/mcs/class/Managed.Windows.Forms/System.Windows.Forms/ThemeWin32Classic.cs 
    2007-08-22 21:27:33 UTC (rev 84665)
+++ 
trunk/mcs/class/Managed.Windows.Forms/System.Windows.Forms/ThemeWin32Classic.cs 
    2007-08-22 21:48:16 UTC (rev 84666)
@@ -1022,6 +1022,46 @@
                                        break;
                        }
                }
+
+               public override Size CalculateCheckBoxAutoSize (CheckBox 
checkBox)
+               {
+                       Size ret_size = Size.Empty;
+                       Size text_size = TextRenderer.MeasureTextInternal 
(checkBox.Text, checkBox.Font, checkBox.UseCompatibleTextRendering);
+                       Size image_size = checkBox.Image == null ? Size.Empty : 
checkBox.Image.Size;
+
+                       // Pad the text size
+                       if (checkBox.Text.Length != 0) {
+                               text_size.Height += 4;
+                               text_size.Width += 4;
+                       }
+
+                       switch (checkBox.TextImageRelation) {
+                               case TextImageRelation.Overlay:
+                                       ret_size.Height = Math.Max 
(checkBox.Text.Length == 0 ? 0 : text_size.Height, image_size.Height);
+                                       ret_size.Width = Math.Max 
(text_size.Width, image_size.Width);
+                                       break;
+                               case TextImageRelation.ImageAboveText:
+                               case TextImageRelation.TextAboveImage:
+                                       ret_size.Height = text_size.Height + 
image_size.Height;
+                                       ret_size.Width = Math.Max 
(text_size.Width, image_size.Width);
+                                       break;
+                               case TextImageRelation.ImageBeforeText:
+                               case TextImageRelation.TextBeforeImage:
+                                       ret_size.Height = Math.Max 
(text_size.Height, image_size.Height);
+                                       ret_size.Width = text_size.Width + 
image_size.Width;
+                                       break;
+                       }
+
+                       // Pad the result
+                       ret_size.Height += (checkBox.Padding.Vertical);
+                       ret_size.Width += (checkBox.Padding.Horizontal) + 15;
+
+                       // There seems to be a minimum height
+                       if (ret_size.Height == checkBox.Padding.Vertical)
+                               ret_size.Height += 14;
+                               
+                       return ret_size;
+               }
 #endif
 
                public override void DrawCheckBox(Graphics dc, Rectangle 
clip_area, CheckBox checkbox) {

Modified: 
trunk/mcs/class/Managed.Windows.Forms/Test/System.Windows.Forms/ChangeLog
===================================================================
--- trunk/mcs/class/Managed.Windows.Forms/Test/System.Windows.Forms/ChangeLog   
2007-08-22 21:27:33 UTC (rev 84665)
+++ trunk/mcs/class/Managed.Windows.Forms/Test/System.Windows.Forms/ChangeLog   
2007-08-22 21:48:16 UTC (rev 84666)
@@ -1,3 +1,7 @@
+2007-08-22  Jonathan Pobst  <[EMAIL PROTECTED]>
+
+       * ComboBoxTest.cs: Add test for AutoSize behavior.
+
 2007-08-21  Rolf Bjarne Kvinge <[EMAIL PROTECTED]> 
 
        * DataGridViewCellTest.cs: Added GetClipboardContentTest,

Modified: 
trunk/mcs/class/Managed.Windows.Forms/Test/System.Windows.Forms/ComboBoxTest.cs
===================================================================
--- 
trunk/mcs/class/Managed.Windows.Forms/Test/System.Windows.Forms/ComboBoxTest.cs 
    2007-08-22 21:27:33 UTC (rev 84665)
+++ 
trunk/mcs/class/Managed.Windows.Forms/Test/System.Windows.Forms/ComboBoxTest.cs 
    2007-08-22 21:48:16 UTC (rev 84666)
@@ -1092,6 +1092,106 @@
 
 #if NET_2_0
                [Test]
+               public void BehaviorAutoSize ()
+               {
+                       if (TestHelper.RunningOnUnix)
+                               Assert.Ignore ("Depends on font measurements, 
corresponds to windows");
+
+                       Form f = new Form ();
+                       f.ShowInTaskbar = false;
+
+                       f.Show ();
+
+                       Image i = new Bitmap (20, 20);
+                       String s = "My test string";
+
+                       CheckBox b = new CheckBox ();
+                       Size s_size = TextRenderer.MeasureText (s, b.Font);
+
+                       b.UseCompatibleTextRendering = false;
+                       b.Size = new Size (5, 5);
+                       b.AutoSize = true;
+                       b.Text = s;
+                       f.Controls.Add (b);
+
+                       // Text only
+                       b.TextImageRelation = TextImageRelation.Overlay;
+                       Assert.AreEqual (new Size (s_size.Width + 19, 
s_size.Height + 4), b.Size, "A1");
+                       b.TextImageRelation = TextImageRelation.ImageAboveText;
+                       b.Size = new Size (5, 5);
+                       Assert.AreEqual (new Size (s_size.Width + 19, 
s_size.Height + 4), b.Size, "A2");
+                       b.TextImageRelation = TextImageRelation.ImageBeforeText;
+                       b.Size = new Size (5, 5);
+                       Assert.AreEqual (new Size (s_size.Width + 19, 
s_size.Height + 4), b.Size, "A3");
+                       b.TextImageRelation = TextImageRelation.TextAboveImage;
+                       b.Size = new Size (5, 5);
+                       Assert.AreEqual (new Size (s_size.Width + 19, 
s_size.Height + 4), b.Size, "A4");
+                       b.TextImageRelation = TextImageRelation.TextBeforeImage;
+                       b.Size = new Size (5, 5);
+                       Assert.AreEqual (new Size (s_size.Width + 19, 
s_size.Height + 4), b.Size, "A5");
+
+                       // Text and Image
+                       b.Image = i;
+                       b.TextImageRelation = TextImageRelation.Overlay;
+                       b.Size = new Size (5, 5);
+                       Assert.AreEqual (new Size (s_size.Width + 19, 
i.Height), b.Size, "A6");
+                       b.TextImageRelation = TextImageRelation.ImageAboveText;
+                       b.Size = new Size (5, 5);
+                       Assert.AreEqual (new Size (s_size.Width + 19, 
s_size.Height + i.Height + 4), b.Size, "A7");
+                       b.TextImageRelation = TextImageRelation.ImageBeforeText;
+                       b.Size = new Size (5, 5);
+                       Assert.AreEqual (new Size (s_size.Width + i.Width + 19, 
i.Height), b.Size, "A8");
+                       b.TextImageRelation = TextImageRelation.TextAboveImage;
+                       b.Size = new Size (5, 5);
+                       Assert.AreEqual (new Size (s_size.Width + 19, 
s_size.Height + i.Height + 4), b.Size, "A9");
+                       b.TextImageRelation = TextImageRelation.TextBeforeImage;
+                       b.Size = new Size (5, 5);
+                       Assert.AreEqual (new Size (s_size.Width + i.Width + 19, 
i.Height), b.Size, "A10");
+
+                       // Image only
+                       b.Text = string.Empty;
+                       b.TextImageRelation = TextImageRelation.Overlay;
+                       b.Size = new Size (5, 5);
+                       Assert.AreEqual (new Size (i.Height + 15, i.Height), 
b.Size, "A11");
+                       b.TextImageRelation = TextImageRelation.ImageAboveText;
+                       b.Size = new Size (5, 5);
+                       Assert.AreEqual (new Size (i.Height + 15, i.Height), 
b.Size, "A12");
+                       b.TextImageRelation = TextImageRelation.ImageBeforeText;
+                       b.Size = new Size (5, 5);
+                       Assert.AreEqual (new Size (i.Height + 15, i.Height), 
b.Size, "A13");
+                       b.TextImageRelation = TextImageRelation.TextAboveImage;
+                       b.Size = new Size (5, 5);
+                       Assert.AreEqual (new Size (i.Height + 15, i.Height), 
b.Size, "A14");
+                       b.TextImageRelation = TextImageRelation.TextBeforeImage;
+                       b.Size = new Size (5, 5);
+                       Assert.AreEqual (new Size (i.Height + 15, i.Height), 
b.Size, "A15");
+
+                       // Neither
+                       b.Image = null;
+                       b.TextImageRelation = TextImageRelation.Overlay;
+                       b.Size = new Size (5, 5);
+                       Assert.AreEqual (new Size (15, 14), b.Size, "A16");
+                       b.TextImageRelation = TextImageRelation.ImageAboveText;
+                       b.Size = new Size (5, 5);
+                       Assert.AreEqual (new Size (15, 14), b.Size, "A17");
+                       b.TextImageRelation = TextImageRelation.ImageBeforeText;
+                       b.Size = new Size (5, 5);
+                       Assert.AreEqual (new Size (15, 14), b.Size, "A18");
+                       b.TextImageRelation = TextImageRelation.TextAboveImage;
+                       b.Size = new Size (5, 5);
+                       Assert.AreEqual (new Size (15, 14), b.Size, "A19");
+                       b.TextImageRelation = TextImageRelation.TextBeforeImage;
+                       b.Size = new Size (5, 5);
+                       Assert.AreEqual (new Size (15, 14), b.Size, "A20");
+
+                       // Padding
+                       b.Padding = new Padding (5, 10, 15, 20);
+                       Assert.AreEqual (new Size (15 + b.Padding.Horizontal, 
14 + b.Padding.Vertical), b.Size, "A21");
+
+                       f.Dispose ();
+               }
+
+               [Test]
                public void MethodScaleControl ()
                {
                        Form f = new Form ();
@@ -1110,7 +1210,7 @@
 
                        gb.PublicScaleControl (new SizeF (.5f, .5f), 
BoundsSpecified.Location);
                        Assert.AreEqual (new Rectangle (5, 10, 238, 21), 
gb.Bounds, "A3");
-Console.WriteLine ("STARTING");
+
                        gb.PublicScaleControl (new SizeF (.5f, .5f), 
BoundsSpecified.Size);
                        Assert.AreEqual (new Rectangle (5, 10, 121, 21), 
gb.Bounds, "A4");
                        Console.WriteLine ("DONE");

_______________________________________________
Mono-patches maillist  -  [email protected]
http://lists.ximian.com/mailman/listinfo/mono-patches

Reply via email to