From 40ea4ddef1fe56dab9a1479302f0b2578b4b0ed5 Mon Sep 17 00:00:00 2001 From: Lars Müller <34514239+appgurueu@users.noreply.github.com> Date: Sun, 19 Sep 2021 20:23:22 +0200 Subject: Fix HUD multiline text alignment (#10795) --- src/client/hud.cpp | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) (limited to 'src/client') diff --git a/src/client/hud.cpp b/src/client/hud.cpp index e92f5a73d..0620759da 100644 --- a/src/client/hud.cpp +++ b/src/client/hud.cpp @@ -20,6 +20,8 @@ with this program; if not, write to the Free Software Foundation, Inc., */ #include "client/hud.h" +#include +#include #include #include "settings.h" #include "util/numeric.h" @@ -377,15 +379,19 @@ void Hud::drawLuaElements(const v3s16 &camera_offset) std::wstring text = unescape_translate(utf8_to_wide(e->text)); core::dimension2d textsize = textfont->getDimension(text.c_str()); - v2s32 offset((e->align.X - 1.0) * (textsize.Width / 2), - (e->align.Y - 1.0) * (textsize.Height / 2)); + v2s32 offset(0, (e->align.Y - 1.0) * (textsize.Height / 2)); core::rect size(0, 0, e->scale.X * m_scale_factor, - text_height * e->scale.Y * m_scale_factor); + text_height * e->scale.Y * m_scale_factor); v2s32 offs(e->offset.X * m_scale_factor, - e->offset.Y * m_scale_factor); - + e->offset.Y * m_scale_factor); + std::wstringstream wss(text); + std::wstring line; + while (std::getline(wss, line, L'\n')) { - textfont->draw(text.c_str(), size + pos + offset + offs, color); + core::dimension2d linesize = textfont->getDimension(line.c_str()); + v2s32 line_offset((e->align.X - 1.0) * (linesize.Width / 2), 0); + textfont->draw(line.c_str(), size + pos + offset + offs + line_offset, color); + offset.Y += linesize.Height; } break; } case HUD_ELEM_STATBAR: { -- cgit v1.2.3