aboutsummaryrefslogtreecommitdiff
path: root/src/FontLoader.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/FontLoader.cpp')
-rw-r--r--src/FontLoader.cpp52
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 &noto_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