diff options
Diffstat (limited to 'source/frontend')
-rw-r--r-- | source/frontend/StarChat.cpp | 19 | ||||
-rw-r--r-- | source/frontend/StarChat.hpp | 2 | ||||
-rw-r--r-- | source/frontend/StarWidgetLuaBindings.cpp | 4 |
3 files changed, 18 insertions, 7 deletions
diff --git a/source/frontend/StarChat.cpp b/source/frontend/StarChat.cpp index b444ce4..b89bd4e 100644 --- a/source/frontend/StarChat.cpp +++ b/source/frontend/StarChat.cpp @@ -21,7 +21,9 @@ Chat::Chat(UniverseClientPtr client) : m_client(client) { auto assets = Root::singleton().assets(); m_timeChatLastActive = Time::monotonicMilliseconds(); - m_fontSize = assets->json("/interface/chat/chat.config:config.font.baseSize").toInt(); + auto fontConfig = assets->json("/interface/chat/chat.config:config.font"); + m_fontSize = fontConfig.getInt("baseSize"); + m_fontDirectives = fontConfig.queryString("directives", ""); 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(); @@ -69,6 +71,13 @@ Chat::Chat(UniverseClientPtr client) : m_client(client) { m_say = fetchChild<LabelWidget>("say"); m_chatLog = fetchChild<CanvasWidget>("chatLog"); + if (auto logPadding = fontConfig.optQuery("padding")) { + m_chatLogPadding = jsonToVec2I(logPadding.get()); + m_chatLog->setSize(m_chatLog->size() + m_chatLogPadding * 2); + m_chatLog->setPosition(m_chatLog->position() - m_chatLogPadding); + } + else + m_chatLogPadding = Vec2I(); m_bottomButton = fetchChild<ButtonWidget>("bottomButton"); m_upButton = fetchChild<ButtonWidget>("upButton"); @@ -224,7 +233,7 @@ void Chat::renderImpl() { m_say->setColor(fadeGreen); m_chatLog->clear(); - Vec2I chatMin; + Vec2I chatMin = m_chatLogPadding; int messageIndex = -m_historyOffset; GuiContext& guiContext = GuiContext::singleton(); @@ -249,7 +258,7 @@ void Chat::renderImpl() { float messageHeight = 0; float lineHeightMargin = + ((m_chatLineHeight * m_fontSize) - m_fontSize); - unsigned wrapWidth = m_chatLog->size()[0]; + unsigned wrapWidth = m_chatLog->size()[0] - m_chatLogPadding[0]; if (message.portrait != "") { TextPositioning tp = {Vec2F(chatMin + m_portraitTextOffset), HorizontalAnchor::LeftAnchor, VerticalAnchor::VMidAnchor, (wrapWidth - m_portraitTextOffset[0])}; @@ -262,13 +271,13 @@ 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_chatLog->drawText(messageString, tp, m_fontSize, fade, FontMode::Normal, m_chatLineHeight, m_fontDirectives); } 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_chatLog->drawText(messageString, tp, m_fontSize, fade, FontMode::Normal, m_chatLineHeight, m_fontDirectives); } chatMin[1] += ceil(messageHeight); diff --git a/source/frontend/StarChat.hpp b/source/frontend/StarChat.hpp index 4c0dae9..9c1f8f4 100644 --- a/source/frontend/StarChat.hpp +++ b/source/frontend/StarChat.hpp @@ -68,11 +68,13 @@ private: float m_chatVisTime; float m_fadeRate; unsigned m_fontSize; + String m_fontDirectives; float m_chatLineHeight; unsigned m_chatHistoryLimit; int m_historyOffset; CanvasWidgetPtr m_chatLog; + Vec2I m_chatLogPadding; ImageStretchWidgetPtr m_background; int m_defaultHeight; diff --git a/source/frontend/StarWidgetLuaBindings.cpp b/source/frontend/StarWidgetLuaBindings.cpp index f9a8af5..eb81f51 100644 --- a/source/frontend/StarWidgetLuaBindings.cpp +++ b/source/frontend/StarWidgetLuaBindings.cpp @@ -78,8 +78,8 @@ struct LuaUserDataMethods<CanvasWidgetPtr> { canvasWidget->drawTriangles(tris, color.value(Color::White).toRgba()); }); methods.registerMethod("drawText", - [](CanvasWidgetPtr canvasWidget, String text, Json tp, unsigned fontSize, Maybe<Color> color) { - canvasWidget->drawText(text, TextPositioning(tp), fontSize, color.value(Color::White).toRgba()); + [](CanvasWidgetPtr canvasWidget, String text, Json tp, unsigned fontSize, Maybe<Color> color, Maybe<float> lineSpacing, Maybe<String> directives) { + canvasWidget->drawText(text, TextPositioning(tp), fontSize, color.value(Color::White).toRgba(), FontMode::Normal, lineSpacing.value(DefaultLineSpacing), directives.value("")); }); return methods; |