Coverage Report

Created: 2026-08-25 06:40

next uncovered line (L), next uncovered region (R), next uncovered branch (B)
/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 = nullptr;
29
0
        if (FcPatternGetCharSet(matchPattern, FC_CHARSET, 0, &charSet) == FcResultMatch
30
0
            && charSet != nullptr) {
31
0
            charSetHasChar = FcCharSetHasChar(charSet, ucs4);
32
0
        }
33
0
    }
34
35
0
    return charSetHasChar;
36
0
}
37
38
39
FcPattern * QFontEngineMultiFontConfig::getMatchPatternForFallback(int fallBackIndex) const
40
0
{
41
0
    Q_ASSERT(fallBackIndex < fallbackFamilyCount());
42
0
    if (fallbackFamilyCount() > cachedMatchPatterns.size())
43
0
        cachedMatchPatterns.resize(fallbackFamilyCount());
44
0
    FcPattern *ret = cachedMatchPatterns.at(fallBackIndex);
45
0
    if (ret)
46
0
        return ret;
47
0
    FcPattern *requestPattern = FcPatternCreate();
48
0
    FcValue value;
49
0
    value.type = FcTypeString;
50
0
    QByteArray cs = fallbackFamilyAt(fallBackIndex).toUtf8();
51
0
    value.u.s = reinterpret_cast<const FcChar8 *>(cs.data());
52
    FcPatternAdd(requestPattern, FC_FAMILY, value, true);
53
0
    FcResult result;
54
0
    ret = FcFontMatch(nullptr, requestPattern, &result);
55
0
    cachedMatchPatterns.insert(fallBackIndex, ret);
56
0
    FcPatternDestroy(requestPattern);
57
0
    return ret;
58
0
}
59
60
QT_END_NAMESPACE