diff options
author | Miguel de Icaza <miguel@gnome.org> | 2014-11-02 20:36:49 +0300 |
---|---|---|
committer | Miguel de Icaza <miguel@gnome.org> | 2014-11-02 20:36:49 +0300 |
commit | 09308892bd86cb20fa19431fe05682b01185f3e3 (patch) | |
tree | 11dc001bbf1d94038f50e84b60bce0febf339437 /mcs/class/Managed.Windows.Forms | |
parent | 57feacab954cd61844bf28b2ec285c3704b0bdd4 (diff) | |
parent | 5d869be79424a314362c331ec125a3d61378f176 (diff) |
Merge pull request #1347 from ermshiperete/ImproveEllipsisHandling
[MWF] Improve ellipsis handling
Diffstat (limited to 'mcs/class/Managed.Windows.Forms')
-rw-r--r-- | mcs/class/Managed.Windows.Forms/System.Windows.Forms/TextRenderer.cs | 3 | ||||
-rw-r--r-- | mcs/class/Managed.Windows.Forms/System.Windows.Forms/ThemeWin32Classic.cs | 26 |
2 files changed, 18 insertions, 11 deletions
diff --git a/mcs/class/Managed.Windows.Forms/System.Windows.Forms/TextRenderer.cs b/mcs/class/Managed.Windows.Forms/System.Windows.Forms/TextRenderer.cs index bda5da96f78..b82629a0483 100644 --- a/mcs/class/Managed.Windows.Forms/System.Windows.Forms/TextRenderer.cs +++ b/mcs/class/Managed.Windows.Forms/System.Windows.Forms/TextRenderer.cs @@ -492,9 +492,6 @@ namespace System.Windows.Forms r.X += 2; r.Width -= 2; } - if ((flags & TextFormatFlags.WordEllipsis) == TextFormatFlags.WordEllipsis || (flags & TextFormatFlags.EndEllipsis) == TextFormatFlags.EndEllipsis || (flags & TextFormatFlags.WordBreak) == TextFormatFlags.WordBreak) { - r.Width -= 4; - } if ((flags & TextFormatFlags.VerticalCenter) == TextFormatFlags.VerticalCenter && XplatUI.RunningOnUnix) { r.Y -= 1; } diff --git a/mcs/class/Managed.Windows.Forms/System.Windows.Forms/ThemeWin32Classic.cs b/mcs/class/Managed.Windows.Forms/System.Windows.Forms/ThemeWin32Classic.cs index 29921942b4e..d6214c5e93b 100644 --- a/mcs/class/Managed.Windows.Forms/System.Windows.Forms/ThemeWin32Classic.cs +++ b/mcs/class/Managed.Windows.Forms/System.Windows.Forms/ThemeWin32Classic.cs @@ -375,16 +375,18 @@ namespace System.Windows.Forms textRectangle = Rectangle.Inflate (content_rect, -4, -4); imageRectangle = Rectangle.Empty; + bool displayEllipsis = (button.TextFormatFlags & (TextFormatFlags.EndEllipsis | TextFormatFlags.PathEllipsis | TextFormatFlags.WordEllipsis)) != 0; + switch (button.TextImageRelation) { case TextImageRelation.Overlay: // Overlay is easy, text always goes here + // Image is dependent on ImageAlign + if (image == null) { if (button.Pressed) textRectangle.Offset (1, 1); - - // Image is dependent on ImageAlign - if (image == null) return; + } int image_x = 0; int image_y = 0; @@ -437,10 +439,10 @@ namespace System.Windows.Forms imageRectangle = new Rectangle (image_x, image_y, image_width, image_height); break; case TextImageRelation.ImageAboveText: - LayoutTextAboveOrBelowImage (textRectangle, false, text_size, image_size, button.TextAlign, button.ImageAlign, out textRectangle, out imageRectangle); + LayoutTextAboveOrBelowImage (textRectangle, false, text_size, image_size, button.TextAlign, button.ImageAlign, displayEllipsis, out textRectangle, out imageRectangle); break; case TextImageRelation.TextAboveImage: - LayoutTextAboveOrBelowImage (textRectangle, true, text_size, image_size, button.TextAlign, button.ImageAlign, out textRectangle, out imageRectangle); + LayoutTextAboveOrBelowImage (textRectangle, true, text_size, image_size, button.TextAlign, button.ImageAlign, displayEllipsis, out textRectangle, out imageRectangle); break; case TextImageRelation.ImageBeforeText: LayoutTextBeforeOrAfterImage (textRectangle, false, text_size, image_size, button.TextAlign, button.ImageAlign, out textRectangle, out imageRectangle); @@ -449,6 +451,8 @@ namespace System.Windows.Forms LayoutTextBeforeOrAfterImage (textRectangle, true, text_size, image_size, button.TextAlign, button.ImageAlign, out textRectangle, out imageRectangle); break; } + if (button.Pressed) + textRectangle.Offset (1, 1); } private void LayoutTextBeforeOrAfterImage (Rectangle totalArea, bool textFirst, Size textSize, Size imageSize, System.Drawing.ContentAlignment textAlign, System.Drawing.ContentAlignment imageAlign, out Rectangle textRect, out Rectangle imageRect) @@ -496,7 +500,7 @@ namespace System.Windows.Forms imageRect = final_image_rect; } - private void LayoutTextAboveOrBelowImage (Rectangle totalArea, bool textFirst, Size textSize, Size imageSize, System.Drawing.ContentAlignment textAlign, System.Drawing.ContentAlignment imageAlign, out Rectangle textRect, out Rectangle imageRect) + private void LayoutTextAboveOrBelowImage (Rectangle totalArea, bool textFirst, Size textSize, Size imageSize, System.Drawing.ContentAlignment textAlign, System.Drawing.ContentAlignment imageAlign, bool displayEllipsis, out Rectangle textRect, out Rectangle imageRect) { int element_spacing = 0; // Spacing between the Text and the Image int total_height = textSize.Height + element_spacing + imageSize.Height; @@ -545,6 +549,12 @@ namespace System.Windows.Forms final_text_rect.Y = totalArea.Top; } + if (displayEllipsis) { + // Don't use more space than is available otherwise ellipsis won't show + if (final_text_rect.Height > totalArea.Bottom) + final_text_rect.Height = totalArea.Bottom - final_text_rect.Top; + } + textRect = final_text_rect; imageRect = final_image_rect; } @@ -1092,11 +1102,11 @@ namespace System.Windows.Forms break; case TextImageRelation.ImageAboveText: content_rect.Inflate (-4, -4); - LayoutTextAboveOrBelowImage (content_rect, false, text_size, image_size, button.TextAlign, button.ImageAlign, out textRectangle, out imageRectangle); + LayoutTextAboveOrBelowImage (content_rect, false, text_size, image_size, button.TextAlign, button.ImageAlign, false, out textRectangle, out imageRectangle); break; case TextImageRelation.TextAboveImage: content_rect.Inflate (-4, -4); - LayoutTextAboveOrBelowImage (content_rect, true, text_size, image_size, button.TextAlign, button.ImageAlign, out textRectangle, out imageRectangle); + LayoutTextAboveOrBelowImage (content_rect, true, text_size, image_size, button.TextAlign, button.ImageAlign, false, out textRectangle, out imageRectangle); break; case TextImageRelation.ImageBeforeText: content_rect.Inflate (-4, -4); |