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