diff options
author | Morten Sørvig <morten.sorvig@qt.io> | 2023-08-25 10:02:55 +0200 |
---|---|---|
committer | Morten Sørvig <morten.sorvig@qt.io> | 2023-12-18 23:07:03 +0100 |
commit | 37b3cc65499fb9332f9b9ed539bb279217682b1d (patch) | |
tree | 31d17095359ab1af0e5c9875cff94c591c87c8a2 /src/plugins/platforms/wasm | |
parent | ea0ca7b295500b68a604618268fc3491aba28ab4 (diff) |
wasm: Add FontData class
This makes the code easier to follow since it is now
implemented in terms of the generic "val" type, and
also allows moving string conversions to behind the
family() etc accessors.
Change-Id: I17364de7f56bc14826e048ce70644c1e14508752
Reviewed-by: Piotr Wierciński <piotr.wiercinski@qt.io>
Reviewed-by: Lorn Potter <lorn.potter@gmail.com>
Diffstat (limited to 'src/plugins/platforms/wasm')
-rw-r--r-- | src/plugins/platforms/wasm/qwasmfontdatabase.cpp | 59 |
1 files changed, 46 insertions, 13 deletions
diff --git a/src/plugins/platforms/wasm/qwasmfontdatabase.cpp b/src/plugins/platforms/wasm/qwasmfontdatabase.cpp index c0833a65ca..83eee06ac0 100644 --- a/src/plugins/platforms/wasm/qwasmfontdatabase.cpp +++ b/src/plugins/platforms/wasm/qwasmfontdatabase.cpp @@ -23,6 +23,41 @@ using namespace Qt::StringLiterals; namespace { +class FontData +{ +public: + FontData(val fontData) + :m_fontData(fontData) {} + + QString family() const + { + return QString::fromStdString(m_fontData["family"].as<std::string>()); + } + + QString fullName() const + { + return QString::fromStdString(m_fontData["fullName"].as<std::string>()); + } + + QString postscriptName() const + { + return QString::fromStdString(m_fontData["postscriptName"].as<std::string>()); + } + + QString style() const + { + return QString::fromStdString(m_fontData["style"].as<std::string>()); + } + + val value() const + { + return m_fontData; + } + +private: + val m_fontData; +}; + bool isLocalFontsAPISupported() { return val::global("window")["queryLocalFonts"].isUndefined() == false; @@ -35,13 +70,11 @@ val makeObject(const char *key, const char *value) return obj; } -std::multimap<QString, emscripten::val> makeFontFamilyMap(const QList<val> &fonts) +std::multimap<QString, FontData> makeFontFamilyMap(const QList<FontData> &fonts) { - std::multimap<QString, emscripten::val> fontFamilies; - for (auto font : fonts) { - QString family = QString::fromStdString(font["family"].as<std::string>()); - fontFamilies.insert(std::make_pair(family, font)); - } + std::multimap<QString, FontData> fontFamilies; + for (auto font : fonts) + fontFamilies.insert(std::make_pair(font.family(), font)); return fontFamilies; } @@ -71,16 +104,16 @@ void checkFontAccessPermitted(std::function<void()> callback) }, makeObject("name", "local-fonts")); } -void queryLocalFonts(std::function<void(const QList<val> &)> callback) +void queryLocalFonts(std::function<void(const QList<FontData> &)> callback) { emscripten::val window = emscripten::val::global("window"); qstdweb::Promise::make(window, "queryLocalFonts", { .thenFunc = [callback](emscripten::val fontArray) { - QList<val> fonts; + QList<FontData> fonts; const int count = fontArray["length"].as<int>(); fonts.reserve(count); for (int i = 0; i < count; ++i) - fonts.append(fontArray.call<emscripten::val>("at", i)); + fonts.append(FontData(fontArray.call<emscripten::val>("at", i))); callback(fonts); }, .catchFunc = printError @@ -98,9 +131,9 @@ void readBlob(val blob, std::function<void(const QByteArray &)> callback) }); } -void readFont(val font, std::function<void(const QByteArray &)> callback) +void readFont(FontData font, std::function<void(const QByteArray &)> callback) { - qstdweb::Promise::make(font, "blob", { + qstdweb::Promise::make(font.value(), "blob", { .thenFunc = [callback](val blob) { readBlob(blob, [callback](const QByteArray &data) { callback(data); @@ -122,7 +155,7 @@ void QWasmFontDatabase::populateLocalfonts() // starting up and should not display a permission request dialog at // this point. checkFontAccessPermitted([](){ - queryLocalFonts([](const QList<val> &fonts){ + queryLocalFonts([](const QList<FontData> &fonts){ auto fontFamilies = makeFontFamilyMap(fonts); // Populate some font families. We can't populate _all_ fonts as in-memory fonts, // since that would require several gigabytes of memory. Instead, populate @@ -133,7 +166,7 @@ void QWasmFontDatabase::populateLocalfonts() QFreeTypeFontDatabase::registerFontFamily(family); for (auto it = fontsRange.first; it != fontsRange.second; ++it) { - const val font = it->second; + const FontData &font = it->second; readFont(font, [](const QByteArray &fontData){ QFreeTypeFontDatabase::addTTFile(fontData, QByteArray()); QWasmFontDatabase::notifyFontsChanged(); |