Scissor the text of a ButtonWidget if it overflows and display a tooltip

Also:
* add a variable to a comomn pattern used for truncating text in HotkeyEntryWidget and TextFieldWidget
This commit is contained in:
Ivaylo Draganov
2019-05-10 13:35:31 +03:00
committed by abcdefg30
parent f325a4d190
commit 76a6e7ec92
3 changed files with 24 additions and 4 deletions

View File

@@ -243,12 +243,27 @@ namespace OpenRA.Mods.Common.Widgets
var bgDark = GetContrastColorDark();
var bgLight = GetContrastColorLight();
var contentWidth = Bounds.Width - LeftMargin - RightMargin;
var stateOffset = Depressed ? new int2(VisualHeight, VisualHeight) : new int2(0, 0);
var position = GetTextPosition(text, font, rb);
var hover = Ui.MouseOverWidget == this || Children.Any(c => c == Ui.MouseOverWidget);
DrawBackground(rb, disabled, Depressed, hover, highlighted);
// Scissor when the text overflows
var isTextOverflowing = font.Measure(text).X > contentWidth;
if (isTextOverflowing && TooltipContainer != null)
{
Game.Renderer.EnableScissor(new Rectangle(RenderOrigin.X + LeftMargin, RenderOrigin.Y,
contentWidth, Bounds.Bottom));
if (GetTooltipText() == null)
GetTooltipText = () => GetText();
text = WidgetUtils.TruncateText(text, contentWidth, font);
}
if (Contrast)
font.DrawTextWithContrast(text, position + stateOffset,
disabled ? colordisabled : color, bgDark, bgLight, 2);
@@ -257,6 +272,9 @@ namespace OpenRA.Mods.Common.Widgets
else
font.DrawText(text, position + stateOffset,
disabled ? colordisabled : color);
if (isTextOverflowing && TooltipContainer != null)
Game.Renderer.DisableScissor();
}
int2 GetTextPosition(string text, SpriteFont font, Rectangle rb)