Coverage Report

Created: 2026-08-11 07:29

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;
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