diff --git a/OpenRA.Mods.Common/Widgets/ButtonWidget.cs b/OpenRA.Mods.Common/Widgets/ButtonWidget.cs index c15242d187..c23466c294 100644 --- a/OpenRA.Mods.Common/Widgets/ButtonWidget.cs +++ b/OpenRA.Mods.Common/Widgets/ButtonWidget.cs @@ -25,6 +25,9 @@ namespace OpenRA.Mods.Common.Widgets public bool DisableKeySound = false; [Translate] public string Text = ""; + public TextAlign Align = TextAlign.Center; + public int LeftMargin = 5; + public int RightMargin = 5; public string Background = "button"; public bool Depressed = false; public int VisualHeight = ChromeMetrics.Get("ButtonDepth"); @@ -87,6 +90,9 @@ namespace OpenRA.Mods.Common.Widgets ModRules = other.ModRules; Text = other.Text; + Align = other.Align; + LeftMargin = other.LeftMargin; + RightMargin = other.RightMargin; Font = other.Font; BaseLine = other.BaseLine; TextColor = other.TextColor; @@ -229,9 +235,10 @@ namespace OpenRA.Mods.Common.Widgets var colordisabled = GetColorDisabled(); var bgDark = GetContrastColorDark(); var bgLight = GetContrastColorLight(); - var s = font.Measure(text); + var textSize = font.Measure(text); var stateOffset = Depressed ? new int2(VisualHeight, VisualHeight) : new int2(0, 0); - var position = new int2(rb.X + (UsableWidth - s.X) / 2, rb.Y - BaseLine + (Bounds.Height - s.Y) / 2); + + var position = GetTextPosition(textSize, rb); DrawBackground(rb, disabled, Depressed, Ui.MouseOverWidget == this, highlighted); if (Contrast) @@ -244,6 +251,23 @@ namespace OpenRA.Mods.Common.Widgets disabled ? colordisabled : color); } + int2 GetTextPosition(int2 textSize, Rectangle rb) + { + var y = rb.Y - BaseLine + (Bounds.Height - textSize.Y) / 2; + + switch (Align) + { + case TextAlign.Left: + return new int2(rb.X + LeftMargin, y); + case TextAlign.Center: + return new int2(rb.X + (UsableWidth - textSize.X) / 2, y); + case TextAlign.Right: + return new int2(rb.X + UsableWidth - textSize.X - RightMargin, y); + default: + throw new ArgumentOutOfRangeException("Align"); + } + } + public override Widget Clone() { return new ButtonWidget(this); } public virtual int UsableWidth { get { return Bounds.Width; } }