mirror of
https://github.com/mudita/MuditaOS.git
synced 2026-02-02 02:13:02 -05:00
90 lines
2.6 KiB
C++
90 lines
2.6 KiB
C++
// Copyright (c) 2017-2024, Mudita Sp. z.o.o. All rights reserved.
|
|
// For licensing, see https://github.com/mudita/MuditaOS/blob/master/LICENSE.md
|
|
|
|
#include "Font.hpp"
|
|
#include "FontManager.hpp"
|
|
#include "RawFont.hpp"
|
|
#include <Utils.hpp>
|
|
|
|
namespace gui
|
|
{
|
|
Font::Font(const std::string &name, unsigned size, Weight weight)
|
|
{
|
|
setFont(name, size, weight);
|
|
}
|
|
|
|
Font::Font(unsigned size, Weight weight) : Font(FontManager::getInstance().getDefaultFontFamilyName(), size, weight)
|
|
{}
|
|
|
|
Font::Font(RawFont *rawFont)
|
|
{
|
|
if (rawFont == nullptr) {
|
|
rawFont = FontManager::getInstance().getFont(""); // Get default
|
|
}
|
|
|
|
auto rawFontName = rawFont->getName();
|
|
auto parse = [&]() {
|
|
const auto pos = rawFontName.rfind('_');
|
|
auto val = rawFontName.substr(pos + 1, rawFontName.length());
|
|
rawFontName.erase(pos);
|
|
return val;
|
|
};
|
|
|
|
const auto rawFontSize = utils::toNumeric(parse());
|
|
const auto rawFontWeight = toWeight(parse());
|
|
setFont(rawFontName, rawFontSize, rawFontWeight);
|
|
}
|
|
|
|
auto Font::setFont(std::string newName, unsigned newSize, Weight newWeight) -> void
|
|
{
|
|
bool update = false;
|
|
auto set = [&](auto &val, auto &new_val) {
|
|
if (val != new_val) {
|
|
val = new_val;
|
|
update = true;
|
|
}
|
|
};
|
|
set(name, newName);
|
|
set(size, newSize);
|
|
set(weight, newWeight);
|
|
if (update) {
|
|
const auto &rawFontName = newName + "_" + c_str(newWeight) + "_" + std::to_string(newSize);
|
|
font = FontManager::getInstance().getFontByName(rawFontName);
|
|
}
|
|
}
|
|
|
|
auto Font::setFont(unsigned newSize, Weight newWeight) -> void
|
|
{
|
|
setFont((FontManager::getInstance().getDefaultFontFamilyName()), newSize, newWeight);
|
|
}
|
|
|
|
auto Font::setSize(unsigned newSize) -> void
|
|
{
|
|
setFont(name, newSize, weight);
|
|
}
|
|
|
|
auto Font::setWeight(Weight newWeight) -> void
|
|
{
|
|
setFont(name, size, newWeight);
|
|
}
|
|
|
|
auto Font::raw() -> RawFont *
|
|
{
|
|
return font;
|
|
}
|
|
|
|
auto Font::toWeight(const std::string &val) -> Font::Weight
|
|
{
|
|
if (val == c_str(Font::Weight::Regular)) {
|
|
return Font::Weight::Regular;
|
|
}
|
|
else if (val == c_str(Font::Weight::Bold)) {
|
|
return Font::Weight::Bold;
|
|
}
|
|
else if (val == c_str(Font::Weight::Light)) {
|
|
return Font::Weight::Light;
|
|
}
|
|
return Font::Weight::Regular;
|
|
}
|
|
} // namespace gui
|