Qt
Internal/Contributor docs for the Qt SDK. Note: These are NOT official API docs; those are found at https://doc.qt.io/
Loading...
Searching...
No Matches
qcoretextfontdatabase_p.h
Go to the documentation of this file.
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#ifndef QCORETEXTFONTDATABASE_H
5#define QCORETEXTFONTDATABASE_H
6
7//
8// W A R N I N G
9// -------------
10//
11// This file is not part of the Qt API. It exists purely as an
12// implementation detail. This header file may change from version to
13// version without notice, or even be removed.
14//
15// We mean it.
16//
17
18#include <qglobal.h>
19
20#include <qpa/qplatformfontdatabase.h>
21#include <qpa/qplatformtheme.h>
22#include <private/qcore_mac_p.h>
23
26
27QT_DECL_METATYPE_EXTERN_TAGGED(QCFType<CGFontRef>, QCFType_CGFontRef, Q_GUI_EXPORT)
28QT_DECL_METATYPE_EXTERN_TAGGED(QCFType<CFURLRef>, QCFType_CFURLRef, Q_GUI_EXPORT)
29
30QT_BEGIN_NAMESPACE
31
32class Q_GUI_EXPORT QCoreTextFontDatabase : public QPlatformFontDatabase
33{
34public:
35 QCoreTextFontDatabase();
36 ~QCoreTextFontDatabase();
37 void populateFontDatabase() override;
38 bool populateFamilyAliases(const QString &missingFamily) override;
39 void populateFamily(const QString &familyName) override;
40 void invalidate() override;
41
42 QStringList fallbacksForFamily(const QString &family, QFont::Style style, QFont::StyleHint styleHint, QFontDatabasePrivate::ExtendedScript script) const override;
43 QStringList addApplicationFont(const QByteArray &fontData, const QString &fileName, QFontDatabasePrivate::ApplicationFont *applicationFont = nullptr) override;
44 void releaseHandle(void *handle) override;
45 bool isPrivateFontFamily(const QString &family) const override;
46 QFont defaultFont() const override;
47 bool fontsAlwaysScalable() const override;
48 QList<int> standardSizes() const override;
49 bool supportsVariableApplicationFonts() const override;
50 bool supportsColrv0Fonts() const override;
51
52 // For iOS and macOS platform themes
53 QFont *themeFont(QPlatformTheme::Font) const;
54
55protected:
56 virtual bool shouldForceColorFont(CTFontDescriptorRef descriptor) const = 0;
57
58private:
59 void populateThemeFonts();
60 enum class PopulateDescriptorFlag : quint8 { None = 0, ForceColorFont = 0x1 };
61 void populateFromDescriptor(CTFontDescriptorRef font,
62 const QString &familyName = QString(),
63 QFontDatabasePrivate::ApplicationFont *applicationFont = nullptr,
64 PopulateDescriptorFlag = PopulateDescriptorFlag::None);
65 static CFArrayRef fallbacksForFamily(const QString &family);
66 QStringList fallbacksForScript(QFontDatabasePrivate::ExtendedScript script) const;
67
68 QHash<QPlatformTheme::Font, QFont *> m_themeFonts;
69 QHash<QString, QList<QCFType<CTFontDescriptorRef>>> m_systemFontDescriptors;
70 QHash<QChar::Script, QString> m_hardcodedFallbackFonts;
71 mutable QSet<QString> m_privateFamilies;
72
73 bool m_hasPopulatedAliases;
74
75#if defined(Q_OS_MACOS)
76 QMacNotificationObserver m_fontSetObserver;
77#endif
78};
79
80// Split out into separate template class so that the compiler doesn't have
81// to generate code for each override in QCoreTextFontDatabase for each T.
82
83template <class T>
84class Q_GUI_EXPORT QCoreTextFontDatabaseEngineFactory : public QCoreTextFontDatabase
85{
86public:
87 QFontEngine *fontEngine(const QFontDef &fontDef, void *handle) override;
88 QFontEngine *fontEngine(const QByteArray &fontData, qreal pixelSize, QFont::HintingPreference hintingPreference) override;
89
90protected:
91 bool shouldForceColorFont(CTFontDescriptorRef descriptor) const override;
92};
93
94QT_END_NAMESPACE
95
96#endif // QCORETEXTFONTDATABASE_H
Combined button and popup list for selecting options.
CFArrayRef fallbacksForDescriptor(CTFontDescriptorRef descriptor)
CGAffineTransform qt_transform_from_fontdef(const QFontDef &fontDef)
static NSString *const kQtFontDataAttribute
static Q_DECL_UNUSED QDebug operator<<(QDebug debug, const FontDescription &fd)
CTFontDescriptorRef descriptorForFamily(const QString &familyName)
static void getFontDescription(CTFontDescriptorRef font, FontDescription *fd)
static CTFontUIFontType fontTypeFromTheme(QPlatformTheme::Font f)
static CTFontDescriptorRef fontDescriptorFromTheme(QPlatformTheme::Font f)
CTFontDescriptorRef descriptorForFamily(const char *familyName)
static NSString *const kQtFontInstanceIndexAttribute
CTFontDescriptorRef descriptorForFontType(CTFontUIFontType uiType)
T * descriptorAttribute(CTFontDescriptorRef descriptor, CFStringRef name)
CTFontDescriptorRef descriptorForStyle(QFont::StyleHint styleHint)
Q_FORWARD_DECLARE_CF_TYPE(CTFont)
Q_FORWARD_DECLARE_CF_TYPE(CTFontDescriptor)
QSupportedWritingSystems writingSystems