7#include <QtCore/private/qcore_ohos_p.h>
8#include <QtGui/qfont.h>
9#include <QtGui/private/qfonticonengine_p.h>
11#include <QtCore/qhash.h>
12#include <QtCore/private/qnapi_p.h>
13#include <QtCore/private/qohoslogger_p.h>
19using namespace Qt::StringLiterals;
23std::optional<
char32_t> tryGetOhosSymbolCodepoint(QOhosJsState &jsState,
const char *ohosSymbolName)
26 return jsState.eval<QNapi::Number>(
27 "@ohos.resourceManager.getSysResourceManager().getSymbolByName(*)",
28 {ohosSymbolName}).Uint32Value();
29 }
catch (
const Napi::Error &error) {
31 "%s: getSymbolByName('%s') failed: %s",
32 Q_FUNC_INFO, ohosSymbolName, error.what());
37const QHash<QString,
char32_t> &getThemeIconCodepoints()
40 static constexpr struct {
41 QLatin1StringView qtThemeIconName;
42 const char *ohosSymbolName;
43 } themeIconToOhosSymbolMapping[] = {
44 {
"computer"_L1,
"computer"},
45 {
"user-desktop"_L1,
"desktop"},
46 {
"user-trash"_L1,
"trash"},
47 {
"network-workgroup"_L1,
"dot_radiowaves_left_and_right"},
48 {
"drive-harddisk"_L1,
"externaldrive"},
49 {
"folder"_L1,
"folder"},
50 {
"text-x-generic"_L1,
"doc"},
51 {
"go-down"_L1,
"chevron_down"},
52 {
"go-up"_L1,
"chevron_up"},
53 {
"go-previous"_L1,
"chevron_left"},
54 {
"go-next"_L1,
"chevron_right"},
57 static const QHash<QString,
char32_t> codepoints = QOhosJsThreadGateway::eval(
58 [](QOhosJsState &jsState) {
59 QHash<QString,
char32_t> codepoints;
60 for (
const auto &entry : themeIconToOhosSymbolMapping) {
61 const auto optCodepoint = tryGetOhosSymbolCodepoint(jsState, entry.ohosSymbolName);
63 codepoints.insert(entry.qtThemeIconName, *optCodepoint);
74 QFont font(
"HM Symbol"_L1);
75 font.setStyleStrategy(QFont::NoFontMerging);
79std::optional<QString> tryGetGlyphForThemeIcon(
const QString &iconName)
81 const QHash<QString,
char32_t> &codepoints = getThemeIconCodepoints();
82 const auto codepointIt = codepoints.constFind(iconName);
83 if (codepointIt == codepoints.cend())
86 const char32_t ucs4 = *codepointIt;
88 return QString::fromUcs4(&ucs4, 1);
91class QOhosIconEngine :
public QFontIconEngine
94 explicit QOhosIconEngine(
const QString &iconName,
const QString &glyphString);
96 QIconEngine *clone()
const override;
97 QString key()
const override;
100 QString string()
const override;
101 glyph_t glyph()
const override;
104 QString m_glyphString;
107QOhosIconEngine::QOhosIconEngine(
const QString &iconName,
const QString &glyphString)
108 : QFontIconEngine(iconName, ohosSymbolFont())
109 , m_glyphString(glyphString)
113QIconEngine *QOhosIconEngine::clone()
const
115 auto *constThis =
const_cast<QOhosIconEngine *>(
this);
116 return new QOhosIconEngine(constThis->iconName(), m_glyphString);
119QString QOhosIconEngine::key()
const
121 return "QOhosIconEngine"_L1;
124QString QOhosIconEngine::string()
const
126 return m_glyphString;
129glyph_t QOhosIconEngine::glyph()
const
138 auto optGlyphString = tryGetGlyphForThemeIcon(iconName);
142 return new QOhosIconEngine(iconName, *optGlyphString);
QIconEngine * tryCreateQOhosIconEngine(const QString &iconName)