Updated ChatDisplayWidget to use the new vertical alignment

This commit is contained in:
teinarss
2019-05-27 20:42:21 +02:00
committed by abcdefg30
parent ab382ce4d6
commit 4e84545b55

View File

@@ -9,7 +9,6 @@
*/ */
#endregion #endregion
using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Linq; using System.Linq;
using OpenRA.Primitives; using OpenRA.Primitives;
@@ -25,6 +24,8 @@ namespace OpenRA.Mods.Common.Widgets
public readonly Color BackgroundColorDark = ChromeMetrics.Get<Color>("TextContrastColorDark"); public readonly Color BackgroundColorDark = ChromeMetrics.Get<Color>("TextContrastColorDark");
public readonly Color BackgroundColorLight = ChromeMetrics.Get<Color>("TextContrastColorLight"); public readonly Color BackgroundColorLight = ChromeMetrics.Get<Color>("TextContrastColorLight");
public string Notification = ""; public string Notification = "";
public readonly int TextLineBoxHeight = 16;
public readonly int Space = 4;
const int LogLength = 9; const int LogLength = 9;
List<ChatLine> recentLines = new List<ChatLine>(); List<ChatLine> recentLines = new List<ChatLine>();
@@ -35,13 +36,14 @@ namespace OpenRA.Mods.Common.Widgets
{ {
var pos = RenderOrigin; var pos = RenderOrigin;
var chatLogArea = new Rectangle(pos.X, pos.Y, Bounds.Width, Bounds.Height); var chatLogArea = new Rectangle(pos.X, pos.Y, Bounds.Width, Bounds.Height);
var chatpos = new int2(chatLogArea.X + 5, chatLogArea.Bottom - 5); var chatPos = new int2(chatLogArea.X + 5, chatLogArea.Bottom - 8);
var font = Game.Renderer.Fonts["Regular"]; var font = Game.Renderer.Fonts["Regular"];
Game.Renderer.EnableScissor(chatLogArea); Game.Renderer.EnableScissor(chatLogArea);
foreach (var line in recentLines.AsEnumerable().Reverse()) foreach (var line in recentLines.AsEnumerable().Reverse())
{ {
var lineHeight = TextLineBoxHeight;
var inset = 0; var inset = 0;
string name = null; string name = null;
@@ -52,31 +54,46 @@ namespace OpenRA.Mods.Common.Widgets
} }
var text = WidgetUtils.WrapText(line.Text, chatLogArea.Width - inset - 6, font); var text = WidgetUtils.WrapText(line.Text, chatLogArea.Width - inset - 6, font);
chatpos = chatpos.WithY(chatpos.Y - (Math.Max(15, font.Measure(text).Y) + 5)); var textSize = font.Measure(text).Y;
var offset = font.TopOffset;
if (chatpos.Y < pos.Y) if (chatPos.Y < pos.Y)
break; break;
var textLineHeight = lineHeight;
var dh = textSize - textLineHeight;
if (dh > 0)
textLineHeight += dh;
var textOffset = textLineHeight - (textLineHeight - textSize - offset) / 2;
var textPos = new int2(chatPos.X + inset, chatPos.Y - textOffset);
if (name != null) if (name != null)
{ {
var nameSize = font.Measure(name).Y;
var namePos = chatPos.WithY(chatPos.Y - (textLineHeight - (lineHeight - nameSize - offset) / 2));
if (UseContrast) if (UseContrast)
font.DrawTextWithContrast(name, chatpos, font.DrawTextWithContrast(name, namePos,
line.NameColor, BackgroundColorDark, BackgroundColorLight, 1); line.NameColor, BackgroundColorDark, BackgroundColorLight, 1);
else if (UseShadow) else if (UseShadow)
font.DrawTextWithShadow(name, chatpos, font.DrawTextWithShadow(name, namePos,
line.NameColor, BackgroundColorDark, BackgroundColorLight, 1); line.NameColor, BackgroundColorDark, BackgroundColorLight, 1);
else else
font.DrawText(name, chatpos, line.NameColor); font.DrawText(name, namePos, line.NameColor);
} }
if (UseContrast) if (UseContrast)
font.DrawTextWithContrast(text, chatpos + new int2(inset, 0), font.DrawTextWithContrast(text, textPos,
line.TextColor, Color.Black, 1); line.TextColor, Color.Black, 1);
else if (UseShadow) else if (UseShadow)
font.DrawTextWithShadow(text, chatpos + new int2(inset, 0), font.DrawTextWithShadow(text, textPos,
line.TextColor, Color.Black, 1); line.TextColor, Color.Black, 1);
else else
font.DrawText(text, chatpos + new int2(inset, 0), Color.White); font.DrawText(text, textPos, Color.White);
chatPos = chatPos.WithY(chatPos.Y - Space - textLineHeight);
} }
Game.Renderer.DisableScissor(); Game.Renderer.DisableScissor();