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 QRAWFONT_H
5#define QRAWFONT_H
6
7#include <QtGui/qtguiglobal.h>
8#include <QtCore/qstring.h>
9#include <QtCore/qiodevice.h>
10#include <QtCore/qglobal.h>
11#include <QtCore/qobject.h>
12#include <QtCore/qpoint.h>
13#include <QtGui/qfont.h>
14#include <QtGui/qtransform.h>
15#include <QtGui/qfontdatabase.h>
16
17#if !defined(QT_NO_RAWFONT)
18
19QT_BEGIN_NAMESPACE
20
21
22class QRawFontPrivate;
23class Q_GUI_EXPORT QRawFont
24{
25public:
26 enum AntialiasingType {
27 PixelAntialiasing,
28 SubPixelAntialiasing
29 };
30
31 enum LayoutFlag {
32 SeparateAdvances = 0,
33 KernedAdvances = 1,
34 UseDesignMetrics = 2
35 };
36 Q_DECLARE_FLAGS(LayoutFlags, LayoutFlag)
37
38 QRawFont();
39 QRawFont(const QString &fileName,
40 qreal pixelSize,
41 QFont::HintingPreference hintingPreference = QFont::PreferDefaultHinting);
42 QRawFont(const QByteArray &fontData,
43 qreal pixelSize,
44 QFont::HintingPreference hintingPreference = QFont::PreferDefaultHinting);
45 QRawFont(const QRawFont &other);
46 QT_MOVE_ASSIGNMENT_OPERATOR_IMPL_VIA_PURE_SWAP(QRawFont)
47 QRawFont &operator=(const QRawFont &other);
48 ~QRawFont();
49
50 void swap(QRawFont &other) noexcept { d.swap(other&: other.d); }
51
52 bool isValid() const;
53
54 bool operator==(const QRawFont &other) const;
55 inline bool operator!=(const QRawFont &other) const
56 { return !operator==(other); }
57
58 QString familyName() const;
59 QString styleName() const;
60
61 QFont::Style style() const;
62 int weight() const;
63
64 QList<quint32> glyphIndexesForString(const QString &text) const;
65 inline QList<QPointF> advancesForGlyphIndexes(const QList<quint32> &glyphIndexes) const;
66 inline QList<QPointF> advancesForGlyphIndexes(const QList<quint32> &glyphIndexes,
67 LayoutFlags layoutFlags) const;
68 bool glyphIndexesForChars(const QChar *chars, int numChars, quint32 *glyphIndexes, int *numGlyphs) const;
69 bool advancesForGlyphIndexes(const quint32 *glyphIndexes, QPointF *advances, int numGlyphs) const;
70 bool advancesForGlyphIndexes(const quint32 *glyphIndexes, QPointF *advances, int numGlyphs, LayoutFlags layoutFlags) const;
71
72 QImage alphaMapForGlyph(quint32 glyphIndex,
73 AntialiasingType antialiasingType = SubPixelAntialiasing,
74 const QTransform &transform = QTransform()) const;
75 QPainterPath pathForGlyph(quint32 glyphIndex) const;
76 QRectF boundingRect(quint32 glyphIndex) const;
77
78 void setPixelSize(qreal pixelSize);
79 qreal pixelSize() const;
80
81 QFont::HintingPreference hintingPreference() const;
82
83 qreal ascent() const;
84 qreal capHeight() const;
85 qreal descent() const;
86 qreal leading() const;
87 qreal xHeight() const;
88 qreal averageCharWidth() const;
89 qreal maxCharWidth() const;
90 qreal lineThickness() const;
91 qreal underlinePosition() const;
92
93 qreal unitsPerEm() const;
94
95 void loadFromFile(const QString &fileName,
96 qreal pixelSize,
97 QFont::HintingPreference hintingPreference);
98
99 void loadFromData(const QByteArray &fontData,
100 qreal pixelSize,
101 QFont::HintingPreference hintingPreference);
102
103 bool supportsCharacter(uint ucs4) const;
104 bool supportsCharacter(QChar character) const;
105 QList<QFontDatabase::WritingSystem> supportedWritingSystems() const;
106
107 QByteArray fontTable(const char *tagName) const;
108
109 static QRawFont fromFont(const QFont &font,
110 QFontDatabase::WritingSystem writingSystem = QFontDatabase::Any);
111
112private:
113 friend class QRawFontPrivate;
114 friend class QTextLayout;
115 friend class QTextEngine;
116
117 QExplicitlySharedDataPointer<QRawFontPrivate> d;
118};
119
120Q_DECLARE_SHARED(QRawFont)
121
122Q_DECLARE_OPERATORS_FOR_FLAGS(QRawFont::LayoutFlags)
123
124Q_GUI_EXPORT size_t qHash(const QRawFont &font, size_t seed = 0) noexcept;
125
126inline QList<QPointF> QRawFont::advancesForGlyphIndexes(const QList<quint32> &glyphIndexes,
127 QRawFont::LayoutFlags layoutFlags) const
128{
129 QList<QPointF> advances(glyphIndexes.size());
130 if (advancesForGlyphIndexes(glyphIndexes: glyphIndexes.constData(), advances: advances.data(), numGlyphs: int(glyphIndexes.size()), layoutFlags))
131 return advances;
132 return QList<QPointF>();
133}
134
135inline QList<QPointF> QRawFont::advancesForGlyphIndexes(const QList<quint32> &glyphIndexes) const
136{
137 return advancesForGlyphIndexes(glyphIndexes, layoutFlags: QRawFont::SeparateAdvances);
138}
139
140QT_END_NAMESPACE
141
142#endif // QT_NO_RAWFONT
143
144#endif // QRAWFONT_H
145

source code of qtbase/src/gui/text/qrawfont.h