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

Reply via email to