From d638a6092bd6291c983490ba3f966162c7ca06c2 Mon Sep 17 00:00:00 2001 From: dec05eba Date: Sat, 31 Oct 2020 09:46:32 +0100 Subject: Load fonts on demand --- src/FontLoader.cpp | 52 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 52 insertions(+) create mode 100644 src/FontLoader.cpp (limited to 'src/FontLoader.cpp') 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 +#include +#include + +static std::array, 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(); + std::vector 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 -- cgit v1.2.3