public FactionTooltipLogic(Widget widget, ButtonWidget button) { var lines = button.GetTooltipText().Replace("\\n", "\n").Split('\n'); var header = widget.Get<LabelWidget>("HEADER"); var headerLine = lines[0]; var headerFont = Game.Renderer.Fonts[header.Font]; var headerSize = headerFont.Measure(headerLine); header.Bounds.Width += headerSize.X; header.Bounds.Height += headerSize.Y; header.GetText = () => headerLine; if (lines.Length > 1) { var description = widget.Get<LabelWidget>("DESCRIPTION"); var descriptionLines = lines.Skip(1).ToArray(); var descriptionFont = Game.Renderer.Fonts[description.Font]; description.Bounds.Y += header.Bounds.Y + header.Bounds.Height; description.Bounds.Width += descriptionLines.Select(l => descriptionFont.Measure(l).X).Max(); description.Bounds.Height += descriptionFont.Measure(descriptionLines.First()).Y * descriptionLines.Length; description.GetText = () => string.Join("\n", descriptionLines); widget.Bounds.Width = Math.Max(header.Bounds.X + header.Bounds.Width, description.Bounds.X + description.Bounds.Width); widget.Bounds.Height = description.Bounds.Y + description.Bounds.Height; } else { widget.Bounds.Width = header.Bounds.X + header.Bounds.Width; widget.Bounds.Height = header.Bounds.Y + header.Bounds.Height; } }
public ButtonTooltipLogic(Widget widget, ButtonWidget button) { var label = widget.Get<LabelWidget>("LABEL"); var font = Game.Renderer.Fonts[label.Font]; var text = button.GetTooltipText(); var labelWidth = font.Measure(text).X; label.GetText = () => text; label.Bounds.Width = labelWidth; widget.Bounds.Width = 2 * label.Bounds.X + labelWidth; if (button.Key.IsValid()) { var hotkey = widget.Get<LabelWidget>("HOTKEY"); hotkey.Visible = true; var hotkeyLabel = "({0})".F(button.Key.DisplayString()); hotkey.GetText = () => hotkeyLabel; hotkey.Bounds.X = labelWidth + 2 * label.Bounds.X; widget.Bounds.Width = hotkey.Bounds.X + label.Bounds.X + font.Measure(hotkeyLabel).X; } }