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:
parent
1dd6c8ed7f
commit
2bec83eec0
7 changed files with 105 additions and 11 deletions
|
@ -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
|
||||
{
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue