Author: everaldo
Date: 2007-02-28 08:10:32 -0500 (Wed, 28 Feb 2007)
New Revision: 73541
Modified:
trunk/mcs/class/Managed.Windows.Forms/System.Windows.Forms/ChangeLog
trunk/mcs/class/Managed.Windows.Forms/System.Windows.Forms/LinkLabel.cs
trunk/mcs/class/Managed.Windows.Forms/System.Windows.Forms/ThemeWin32Classic.cs
Log:
2007-02-28 Everaldo Canuto <[EMAIL PROTECTED]>
* LinkLabel.cs: Theres some diferences between rectangle return from
MeasureCharacterRanges and the area used for DrawString to fix this
CalcMeasurementFactor method was created, it calcules the diferences
to be use later to adjust rectangle in draw operations. Fixes #80473.
* ThemeWin32Classic.cs: Use factor calculated by CalcMeasurementFactor
to adjust draw rectangle.
Modified: trunk/mcs/class/Managed.Windows.Forms/System.Windows.Forms/ChangeLog
===================================================================
--- trunk/mcs/class/Managed.Windows.Forms/System.Windows.Forms/ChangeLog
2007-02-28 13:04:10 UTC (rev 73540)
+++ trunk/mcs/class/Managed.Windows.Forms/System.Windows.Forms/ChangeLog
2007-02-28 13:10:32 UTC (rev 73541)
@@ -1,3 +1,13 @@
+2007-02-28 Everaldo Canuto <[EMAIL PROTECTED]>
+
+ * LinkLabel.cs: Theres some diferences between rectangle return from
+ MeasureCharacterRanges and the area used for DrawString to fix this
+ CalcMeasurementFactor method was created, it calcules the diferences
+ to be use later to adjust rectangle in draw operations. Fixes #80473.
+
+ * ThemeWin32Classic.cs: Use factor calculated by CalcMeasurementFactor
+ to adjust draw rectangle.
+
2007-02-27 Everaldo Canuto <[EMAIL PROTECTED]>
* ThemeWin32Classic.cs: In DrawLinkLabel draw focus rectangle before
draw
Modified:
trunk/mcs/class/Managed.Windows.Forms/System.Windows.Forms/LinkLabel.cs
===================================================================
--- trunk/mcs/class/Managed.Windows.Forms/System.Windows.Forms/LinkLabel.cs
2007-02-28 13:04:10 UTC (rev 73540)
+++ trunk/mcs/class/Managed.Windows.Forms/System.Windows.Forms/LinkLabel.cs
2007-02-28 13:10:32 UTC (rev 73541)
@@ -74,6 +74,7 @@
internal Font link_font;
private Cursor override_cursor;
private DialogResult dialog_result;
+ internal Rectangle factor;
private Link active_link;
private Link hovered_link;
@@ -99,6 +100,8 @@
link_font = null;
focused_index = -1;
+ string_format.FormatFlags = StringFormatFlags.NoClip;
+
ActiveLinkColor = Color.Red;
DisabledLinkColor = ThemeEngine.Current.ColorGrayText;
LinkColor = Color.FromArgb (255, 0, 0, 255);
@@ -549,6 +552,27 @@
return rv;
}
+ private void CalcMeasurementFactor ()
+ {
+ const string text = "X";
+
+ // Measure total area including padding area.
+ SizeF size = DeviceContext.MeasureString (text,
link_font);
+ Rectangle rect = new Rectangle (0, 0, (int) size.Width,
(int) size.Height);
+
+ // Measure only font area without padding area.
+ CharacterRange[] ranges = { new CharacterRange(0, 1) };
+ string_format.SetMeasurableCharacterRanges (ranges);
+ Region[] regions = DeviceContext.MeasureCharacterRanges
(text, link_font, rect, string_format);
+
+ // Calculate diference.
+ RectangleF rectf = regions [0].GetBounds
(DeviceContext);
+
+ factor = new Rectangle ((int) rectf.X, (int) rectf.Y,
+ rect.Width - (int)
rectf.Width - ((int) rectf.X * 2),
+ rect.Height - (int)
rectf.Height - ((int) rectf.Y * 2));
+ }
+
private void CreateLinkPieces ()
{
if (Text.Length == 0) {
@@ -603,7 +627,6 @@
for(int i = 0; i < pieces.Length; i++)
ranges[i] = new CharacterRange
(pieces[i].start, pieces[i].length);
- string_format.FormatFlags = StringFormatFlags.NoClip;
string_format.SetMeasurableCharacterRanges (ranges);
Region[] regions = DeviceContext.MeasureCharacterRanges
(Text,
@@ -614,6 +637,7 @@
for (int i = 0; i < pieces.Length; i ++)
pieces[i].region = regions[i];
+ CalcMeasurementFactor ();
Invalidate ();
}
Modified:
trunk/mcs/class/Managed.Windows.Forms/System.Windows.Forms/ThemeWin32Classic.cs
===================================================================
---
trunk/mcs/class/Managed.Windows.Forms/System.Windows.Forms/ThemeWin32Classic.cs
2007-02-28 13:04:10 UTC (rev 73540)
+++
trunk/mcs/class/Managed.Windows.Forms/System.Windows.Forms/ThemeWin32Classic.cs
2007-02-28 13:10:32 UTC (rev 73541)
@@ -1687,6 +1687,12 @@
if (link != null && link.Focused)
CPDrawFocusRectangle (dc, rect,
label.ForeColor, label.BackColor);
+ // To adjust diference between measurement and
draw string.
+ rect.X -= label.factor.X;
+ rect.Y -= label.factor.Y;
+ rect.Width += label.factor.Width;
+ rect.Height += label.factor.Height;
+
dc.DrawString (label.pieces[i].text,
label.GetPieceFont (label.pieces[i]), ResPool.GetSolidBrush
(label.GetPieceColor (label.pieces[i], i)),
rect, label.string_format);
_______________________________________________
Mono-patches maillist - [email protected]
http://lists.ximian.com/mailman/listinfo/mono-patches