2025-07-06 20:43:53 +03:00
|
|
|
#include "FontData.hpp"
|
2025-11-11 19:52:45 +03:00
|
|
|
#include <include/ports/SkFontMgr_directory.h>
|
2025-07-06 20:43:53 +03:00
|
|
|
#include <include/ports/SkFontMgr_empty.h>
|
|
|
|
|
#include <include/core/SkFontMetrics.h>
|
|
|
|
|
#include <include/core/SkTextBlob.h>
|
|
|
|
|
#include <iostream>
|
|
|
|
|
|
2025-10-12 18:24:59 +03:00
|
|
|
#ifdef __EMSCRIPTEN__
|
|
|
|
|
#elif _WIN32
|
|
|
|
|
#include <include/ports/SkTypeface_win.h>
|
|
|
|
|
#elif __APPLE__
|
|
|
|
|
#include <include/ports/SkFontMgr_mac_ct.h>
|
|
|
|
|
#elif __linux__
|
|
|
|
|
#include <include/ports/SkFontMgr_fontconfig.h>
|
|
|
|
|
#include <include/ports/SkFontScanner_FreeType.h>
|
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
|
FontData::FontData()
|
2025-07-06 20:43:53 +03:00
|
|
|
{
|
2025-10-12 18:24:59 +03:00
|
|
|
#ifdef __EMSCRIPTEN__
|
2025-11-11 19:52:45 +03:00
|
|
|
localFontMgr = SkFontMgr_New_Custom_Empty();
|
2025-10-12 18:24:59 +03:00
|
|
|
#elif _WIN32
|
2025-11-11 19:52:45 +03:00
|
|
|
localFontMgr = SkFontMgr_New_GDI();
|
2025-10-12 18:24:59 +03:00
|
|
|
#elif __APPLE__
|
2025-11-11 19:52:45 +03:00
|
|
|
localFontMgr = SkFontMgr_New_Custom_Empty();
|
2025-10-12 18:24:59 +03:00
|
|
|
#elif __linux__
|
2025-11-11 19:52:45 +03:00
|
|
|
localFontMgr = SkFontMgr_New_FontConfig(nullptr, SkFontScanner_Make_FreeType());
|
2025-10-12 18:24:59 +03:00
|
|
|
#else
|
2025-11-11 19:52:45 +03:00
|
|
|
localFontMgr = SkFontMgr_New_Custom_Empty();
|
2025-10-12 18:24:59 +03:00
|
|
|
#endif
|
2025-11-11 19:52:45 +03:00
|
|
|
|
|
|
|
|
defaultFontMgr = SkFontMgr_New_Custom_Directory("data/fonts");
|
|
|
|
|
|
|
|
|
|
map["Roboto"] = defaultFontMgr->makeFromFile("data/fonts/Roboto-variable.ttf");
|
|
|
|
|
|
2025-10-15 16:33:24 +03:00
|
|
|
collection = sk_make_sp<skia::textlayout::FontCollection>();
|
2025-11-11 19:52:45 +03:00
|
|
|
collection->setDefaultFontManager(defaultFontMgr, {SkString{"Roboto"}});
|
|
|
|
|
collection->setDynamicFontManager(localFontMgr);
|
2025-07-06 20:43:53 +03:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
FontData::~FontData() {
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
Vector2f get_str_font_bounds(const SkFont& font, const std::string& str) {
|
|
|
|
|
SkFontMetrics metrics;
|
|
|
|
|
font.getMetrics(&metrics);
|
|
|
|
|
float nextText = font.measureText(str.data(), str.length(), SkTextEncoding::kUTF8, nullptr);
|
|
|
|
|
return Vector2f{nextText, - metrics.fAscent + metrics.fDescent};
|
|
|
|
|
}
|