diff options
Diffstat (limited to 'src/FontLoader.cpp')
-rw-r--r-- | src/FontLoader.cpp | 52 |
1 files changed, 52 insertions, 0 deletions
diff --git a/src/FontLoader.cpp b/src/FontLoader.cpp new file mode 100644 index 0000000..ca33377 --- /dev/null +++ b/src/FontLoader.cpp @@ -0,0 +1,52 @@ +#include "../include/FontLoader.hpp" +#include <SFML/Graphics/Font.hpp> +#include <array> +#include <assert.h> + +static std::array<std::unique_ptr<sf::Font>, 3> font_cache; + +namespace QuickMedia::FontLoader { + sf::Font* get_font(FontType font_type) { + sf::Font *font = font_cache[(size_t)font_type].get(); + if(!font) { + auto new_font = std::make_unique<sf::Font>(); + std::vector<std::string> noto_directories; + std::string font_file_name; + switch(font_type) { + case FontType::LATIN: { + noto_directories.push_back("/usr/share/fonts/noto"); + noto_directories.push_back("/usr/share/fonts/truetype/noto"); + font_file_name = "NotoSans-Regular.ttf"; + break; + } + case FontType::LATIN_BOLD: { + noto_directories.push_back("/usr/share/fonts/noto"); + noto_directories.push_back("/usr/share/fonts/truetype/noto"); + font_file_name = "NotoSans-Bold.ttf"; + break; + } + case FontType::CJK: { + noto_directories.push_back("/usr/share/fonts/noto-cjk"); + noto_directories.push_back("/usr/share/fonts/truetype/noto-cjk"); + font_file_name = "NotoSansCJK-Regular.ttc"; + break; + } + case FontType::EMOJI: { + noto_directories.push_back("/usr/share/fonts/noto"); + noto_directories.push_back("/usr/share/fonts/truetype/noto"); + font_file_name = "NotoColorEmoji.ttf"; + break; + } + } + + for(const std::string ¬o_dir : noto_directories) { + if(new_font->loadFromFile(noto_dir + "/" + font_file_name)) + break; + } + + font_cache[(size_t)font_type] = std::move(new_font); + font = font_cache[(size_t)font_type].get(); + } + return font; + } +}
\ No newline at end of file |