Add ability to scale HUD text (#9814)

Add 'size' property to HUD text elements that is used for relative font size calculations.
This commit is contained in:
LoneWolfHT 2020-05-19 10:10:39 -07:00 committed by GitHub
parent 0fc51db772
commit 7d3972a504
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 9 additions and 2 deletions

@ -1356,6 +1356,8 @@ Displays text on the HUD.
text. Specify `0xFFFFFF` for white text, `0xFF0000` for red, and so on. text. Specify `0xFFFFFF` for white text, `0xFF0000` for red, and so on.
* `alignment`: The alignment of the text. * `alignment`: The alignment of the text.
* `offset`: offset in pixels from position. * `offset`: offset in pixels from position.
* `size`: size of the text.
The player-set font size is multiplied by size.x (y value isn't used).
### `statbar` ### `statbar`

@ -319,16 +319,21 @@ void Hud::drawLuaElements(const v3s16 &camera_offset)
floor(e->pos.Y * (float) m_screensize.Y + 0.5)); floor(e->pos.Y * (float) m_screensize.Y + 0.5));
switch (e->type) { switch (e->type) {
case HUD_ELEM_TEXT: { case HUD_ELEM_TEXT: {
irr::gui::IGUIFont *textfont = font;
if (e->size.X > 0)
textfont = g_fontengine->getFont(
e->size.X * g_fontengine->getDefaultFontSize());
video::SColor color(255, (e->number >> 16) & 0xFF, video::SColor color(255, (e->number >> 16) & 0xFF,
(e->number >> 8) & 0xFF, (e->number >> 8) & 0xFF,
(e->number >> 0) & 0xFF); (e->number >> 0) & 0xFF);
core::rect<s32> size(0, 0, e->scale.X, text_height * e->scale.Y); core::rect<s32> size(0, 0, e->scale.X, text_height * e->scale.Y);
std::wstring text = unescape_translate(utf8_to_wide(e->text)); std::wstring text = unescape_translate(utf8_to_wide(e->text));
core::dimension2d<u32> textsize = font->getDimension(text.c_str()); core::dimension2d<u32> textsize = textfont->getDimension(text.c_str());
v2s32 offset((e->align.X - 1.0) * (textsize.Width / 2), v2s32 offset((e->align.X - 1.0) * (textsize.Width / 2),
(e->align.Y - 1.0) * (textsize.Height / 2)); (e->align.Y - 1.0) * (textsize.Height / 2));
v2s32 offs(e->offset.X, e->offset.Y); v2s32 offs(e->offset.X, e->offset.Y);
font->draw(text.c_str(), size + pos + offset + offs, color); textfont->draw(text.c_str(), size + pos + offset + offs, color);
break; } break; }
case HUD_ELEM_STATBAR: { case HUD_ELEM_STATBAR: {
v2s32 offs(e->offset.X, e->offset.Y); v2s32 offs(e->offset.X, e->offset.Y);