1
0
Fork 0
mirror of https://github.com/luanti-org/luanti.git synced 2025-10-05 19:31:04 +00:00

Add FormSpec font styling options (#9763)

* Add FormSpec font styling options

* Change multiplication to stof

* Remove extraneous check
This commit is contained in:
v-rob 2020-07-12 00:48:50 -07:00 committed by GitHub
parent 1dd6c8ed7f
commit 2bec83eec0
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
7 changed files with 105 additions and 11 deletions

View file

@ -18,9 +18,11 @@ with this program; if not, write to the Free Software Foundation, Inc.,
*/
#include "client/tile.h" // ITextureSource
#include "client/fontengine.h"
#include "debug.h"
#include "irrlichttypes_extrabloated.h"
#include "util/string.h"
#include <algorithm>
#include <array>
#pragma once
@ -46,6 +48,8 @@ public:
ALPHA,
CONTENT_OFFSET,
PADDING,
FONT,
FONT_SIZE,
NUM_PROPERTIES,
NONE
};
@ -98,6 +102,10 @@ public:
return CONTENT_OFFSET;
} else if (name == "padding") {
return PADDING;
} else if (name == "font") {
return FONT;
} else if (name == "font_size") {
return FONT_SIZE;
} else {
return NONE;
}
@ -225,6 +233,47 @@ public:
return vec;
}
gui::IGUIFont *getFont() const
{
FontSpec spec(FONT_SIZE_UNSPECIFIED, FM_Standard, false, false);
const std::string &font = properties[FONT];
const std::string &size = properties[FONT_SIZE];
if (font.empty() && size.empty())
return nullptr;
std::vector<std::string> modes = split(font, ',');
for (size_t i = 0; i < modes.size(); i++) {
if (modes[i] == "normal")
spec.mode = FM_Standard;
else if (modes[i] == "mono")
spec.mode = FM_Mono;
else if (modes[i] == "bold")
spec.bold = true;
else if (modes[i] == "italic")
spec.italic = true;
}
if (!size.empty()) {
int calc_size = 1;
if (size[0] == '*') {
std::string new_size = size.substr(1); // Remove '*' (invalid for stof)
calc_size = stof(new_size) * g_fontengine->getFontSize(spec.mode);
} else if (size[0] == '+' || size[0] == '-') {
calc_size = stoi(size) + g_fontengine->getFontSize(spec.mode);
} else {
calc_size = stoi(size);
}
spec.size = (unsigned)std::min(std::max(calc_size, 1), 999);
}
return g_fontengine->getFont(spec);
}
video::ITexture *getTexture(Property prop, ISimpleTextureSource *tsrc,
video::ITexture *def) const
{