Веб-сайт самохостера Lotigara

summaryrefslogtreecommitdiff
path: root/source/frontend/StarChat.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'source/frontend/StarChat.cpp')
-rw-r--r--source/frontend/StarChat.cpp74
1 files changed, 36 insertions, 38 deletions
diff --git a/source/frontend/StarChat.cpp b/source/frontend/StarChat.cpp
index 688bf4a..d780d23 100644
--- a/source/frontend/StarChat.cpp
+++ b/source/frontend/StarChat.cpp
@@ -20,32 +20,30 @@ Chat::Chat(UniverseClientPtr client) : m_client(client) {
m_historyOffset = 0;
auto assets = Root::singleton().assets();
+ auto config = assets->json("/interface/chat/chat.config:config");
m_timeChatLastActive = Time::monotonicMilliseconds();
- auto fontConfig = assets->json("/interface/chat/chat.config:config.font");
- m_fontSize = fontConfig.getInt("baseSize");
- m_fontDirectives = fontConfig.queryString("directives", "");
- m_font = fontConfig.queryString("type", "");
- m_chatLineHeight = assets->json("/interface/chat/chat.config:config.lineHeight").toFloat();
- m_chatVisTime = assets->json("/interface/chat/chat.config:config.visTime").toFloat();
- m_fadeRate = assets->json("/interface/chat/chat.config:config.fadeRate").toDouble();
- m_chatHistoryLimit = assets->json("/interface/chat/chat.config:config.chatHistoryLimit").toInt();
-
- m_portraitTextOffset = jsonToVec2I(assets->json("/interface/chat/chat.config:config.portraitTextOffset"));
- m_portraitImageOffset = jsonToVec2I(assets->json("/interface/chat/chat.config:config.portraitImageOffset"));
- m_portraitScale = assets->json("/interface/chat/chat.config:config.portraitScale").toFloat();
- m_portraitVerticalMargin = assets->json("/interface/chat/chat.config:config.portraitVerticalMargin").toFloat();
- m_portraitBackground = assets->json("/interface/chat/chat.config:config.portraitBackground").toString();
-
- m_bodyHeight = assets->json("/interface/chat/chat.config:config.bodyHeight").toInt();
- m_expandedBodyHeight = assets->json("/interface/chat/chat.config:config.expandedBodyHeight").toInt();
-
- m_colorCodes[MessageContext::Local] = assets->json("/interface/chat/chat.config:config.colors.local").toString();
- m_colorCodes[MessageContext::Party] = assets->json("/interface/chat/chat.config:config.colors.party").toString();
- m_colorCodes[MessageContext::Broadcast] = assets->json("/interface/chat/chat.config:config.colors.broadcast").toString();
- m_colorCodes[MessageContext::Whisper] = assets->json("/interface/chat/chat.config:config.colors.whisper").toString();
- m_colorCodes[MessageContext::CommandResult] = assets->json("/interface/chat/chat.config:config.colors.commandResult").toString();
- m_colorCodes[MessageContext::RadioMessage] = assets->json("/interface/chat/chat.config:config.colors.radioMessage").toString();
- m_colorCodes[MessageContext::World] = assets->json("/interface/chat/chat.config:config.colors.world").toString();
+ m_chatTextStyle = config.get("textStyle");
+ m_chatTextStyle.lineSpacing = config.get("lineHeight").toFloat();
+ m_chatVisTime = config.get("visTime").toFloat();
+ m_fadeRate = config.get("fadeRate").toDouble();
+ m_chatHistoryLimit = config.get("chatHistoryLimit").toInt();
+
+ m_portraitTextOffset = jsonToVec2I(config.get("portraitTextOffset"));
+ m_portraitImageOffset = jsonToVec2I(config.get("portraitImageOffset"));
+ m_portraitScale = config.get("portraitScale").toFloat();
+ m_portraitVerticalMargin = config.get("portraitVerticalMargin").toFloat();
+ m_portraitBackground = config.get("portraitBackground").toString();
+
+ m_bodyHeight = config.get("bodyHeight").toInt();
+ m_expandedBodyHeight = config.get("expandedBodyHeight").toInt();
+
+ m_colorCodes[MessageContext::Local] = config.query("colors.local").toString();
+ m_colorCodes[MessageContext::Party] = config.query("colors.party").toString();
+ m_colorCodes[MessageContext::Broadcast] = config.query("colors.broadcast").toString();
+ m_colorCodes[MessageContext::Whisper] = config.query("colors.whisper").toString();
+ m_colorCodes[MessageContext::CommandResult] = config.query("colors.commandResult").toString();
+ m_colorCodes[MessageContext::RadioMessage] = config.query("colors.radioMessage").toString();
+ m_colorCodes[MessageContext::World] = config.query("colors.world").toString();
GuiReader reader;
@@ -72,7 +70,7 @@ Chat::Chat(UniverseClientPtr client) : m_client(client) {
m_say = fetchChild<LabelWidget>("say");
m_chatLog = fetchChild<CanvasWidget>("chatLog");
- if (auto logPadding = fontConfig.optQuery("padding")) {
+ if (auto logPadding = config.optQuery("padding")) {
m_chatLogPadding = jsonToVec2I(logPadding.get());
m_chatLog->setSize(m_chatLog->size() + m_chatLogPadding * 2);
m_chatLog->setPosition(m_chatLog->position() - m_chatLogPadding);
@@ -133,8 +131,8 @@ String Chat::currentChat() const {
return m_textBox->getText();
}
-void Chat::setCurrentChat(String const& chat) {
- m_textBox->setText(chat);
+bool Chat::setCurrentChat(String const& chat, bool moveCursor) {
+ return m_textBox->setText(chat, true, moveCursor);
}
void Chat::clearCurrentChat() {
@@ -179,8 +177,7 @@ void Chat::addMessages(List<ChatReceivedMessage> const& messages, bool showPane)
if (message.portrait.empty())
wrapWidth = m_chatLog->size()[0] - m_chatLogPadding[0] * 2;
- guiContext.setFont(m_font);
- guiContext.setFontSize(m_fontSize);
+ guiContext.setTextStyle(m_chatTextStyle);
StringList lines;
if (message.fromNick != "" && message.portrait == "")
lines = guiContext.wrapInterfaceText(strf("<{}> {}", message.fromNick, message.text), wrapWidth);
@@ -239,10 +236,10 @@ void Chat::renderImpl() {
int messageIndex = -m_historyOffset;
GuiContext& guiContext = GuiContext::singleton();
- guiContext.setFont(m_font);
- guiContext.setFontSize(m_fontSize);
- guiContext.setLineSpacing(m_chatLineHeight);
- for (auto message : m_receivedMessages) {
+ float lineHeight = m_chatTextStyle.lineSpacing;
+ float fontSize = m_chatTextStyle.fontSize;
+ guiContext.setTextStyle(m_chatTextStyle);
+ for (auto& message : m_receivedMessages) {
if (!m_modeFilter.empty() && !m_modeFilter.contains(message.mode))
continue;
@@ -260,7 +257,7 @@ void Chat::renderImpl() {
String messageString = channelColorCode + message.text;
float messageHeight = 0;
- float lineHeightMargin = + ((m_chatLineHeight * m_fontSize) - m_fontSize);
+ float lineHeightMargin = ((lineHeight * fontSize) - fontSize);
unsigned wrapWidth = m_chatLog->size()[0] - m_chatLogPadding[0] * 2;
if (message.portrait != "") {
@@ -274,13 +271,14 @@ void Chat::renderImpl() {
m_chatLog->drawImage(m_portraitBackground, Vec2F(imagePosition), 1.0f, fade);
m_chatLog->drawImage(message.portrait, Vec2F(imagePosition + m_portraitImageOffset), m_portraitScale, fade);
tp.pos += Vec2F(0, floor(messageHeight / 2));
- m_chatLog->drawText(messageString, tp, m_fontSize, fade, FontMode::Normal, m_chatLineHeight, m_font, m_fontDirectives);
+ m_chatTextStyle.color = fade;
+ m_chatLog->drawText(messageString, tp, m_chatTextStyle);
} else {
TextPositioning tp = {Vec2F(chatMin), HorizontalAnchor::LeftAnchor, VerticalAnchor::BottomAnchor, wrapWidth};
messageHeight = guiContext.determineInterfaceTextSize(messageString, tp).size()[1] + lineHeightMargin;
-
- m_chatLog->drawText(messageString, tp, m_fontSize, fade, FontMode::Normal, m_chatLineHeight, m_font, m_fontDirectives);
+ m_chatTextStyle.color = fade;
+ m_chatLog->drawText(messageString, tp, m_chatTextStyle);
}
chatMin[1] += ceil(messageHeight);