/src/qtbase/src/gui/text/unix/qfontenginemultifontconfig.cpp
Line | Count | Source |
1 | | // Copyright (C) 2016 The Qt Company Ltd. |
2 | | // SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only |
3 | | |
4 | | #include "qfontenginemultifontconfig_p.h" |
5 | | |
6 | | #include <QtGui/private/qfontengine_ft_p.h> |
7 | | |
8 | | QT_BEGIN_NAMESPACE |
9 | | |
10 | | QFontEngineMultiFontConfig::QFontEngineMultiFontConfig(QFontEngine *fe, int script) |
11 | 0 | : QFontEngineMulti(fe, script) |
12 | 0 | { |
13 | 0 | } |
14 | | |
15 | | QFontEngineMultiFontConfig::~QFontEngineMultiFontConfig() |
16 | 0 | { |
17 | 0 | for (FcPattern *pattern : std::as_const(cachedMatchPatterns)) { |
18 | 0 | if (pattern) |
19 | 0 | FcPatternDestroy(pattern); |
20 | 0 | } |
21 | 0 | } |
22 | | |
23 | | bool QFontEngineMultiFontConfig::shouldLoadFontEngineForCharacter(int at, uint ucs4) const |
24 | 0 | { |
25 | 0 | bool charSetHasChar = true; |
26 | 0 | FcPattern *matchPattern = getMatchPatternForFallback(at - 1); |
27 | 0 | if (matchPattern != nullptr) { |
28 | 0 | FcCharSet *charSet; |
29 | 0 | FcPatternGetCharSet(matchPattern, FC_CHARSET, 0, &charSet); |
30 | 0 | charSetHasChar = FcCharSetHasChar(charSet, ucs4); |
31 | 0 | } |
32 | |
|
33 | 0 | return charSetHasChar; |
34 | 0 | } |
35 | | |
36 | | |
37 | | FcPattern * QFontEngineMultiFontConfig::getMatchPatternForFallback(int fallBackIndex) const |
38 | 0 | { |
39 | 0 | Q_ASSERT(fallBackIndex < fallbackFamilyCount()); |
40 | 0 | if (fallbackFamilyCount() > cachedMatchPatterns.size()) |
41 | 0 | cachedMatchPatterns.resize(fallbackFamilyCount()); |
42 | 0 | FcPattern *ret = cachedMatchPatterns.at(fallBackIndex); |
43 | 0 | if (ret) |
44 | 0 | return ret; |
45 | 0 | FcPattern *requestPattern = FcPatternCreate(); |
46 | 0 | FcValue value; |
47 | 0 | value.type = FcTypeString; |
48 | 0 | QByteArray cs = fallbackFamilyAt(fallBackIndex).toUtf8(); |
49 | 0 | value.u.s = reinterpret_cast<const FcChar8 *>(cs.data()); |
50 | | FcPatternAdd(requestPattern, FC_FAMILY, value, true); |
51 | 0 | FcResult result; |
52 | 0 | ret = FcFontMatch(nullptr, requestPattern, &result); |
53 | 0 | cachedMatchPatterns.insert(fallBackIndex, ret); |
54 | 0 | FcPatternDestroy(requestPattern); |
55 | 0 | return ret; |
56 | 0 | } |
57 | | |
58 | | QT_END_NAMESPACE |