18#include <QtGui/private/qtguiglobal_p.h>
19#include "QtCore/qatomic.h"
20#include <QtCore/qvarlengtharray.h>
21#include <QtCore/qhashfunctions.h>
22#include "private/qtextengine_p.h"
23#include "private/qfont_p.h"
32#define MAKE_TAG(ch1, ch2, ch3, ch4) (\
33 (((quint32)(ch1)) << 24) | \
34 (((quint32)(ch2)) << 16) | \
35 (((quint32)(ch3)) << 8) | \
72 TestFontEngine = 0x1000
77 Format_Render = Format_None,
85 DesignMetrics = 0x0002,
86 GlyphIndicesOnly = 0x0004
94 short linearAdvance = 0;
103 Q_DISABLE_COPY(
Glyph)
138 SynthesizedItalic = 0x1,
139 SynthesizedBold = 0x2,
140 SynthesizedStretch = 0x4
145 return supportsHorizontalSubPixelPositions() || supportsVerticalSubPixelPositions();
161 virtual void doKerning(
QGlyphLayout *, ShaperFlags)
const;
187 return boundingBox(glyph,
matrix);
190 virtual void removeGlyphFromCache(
glyph_t);
197 virtual QFixed ascent()
const;
199 virtual QFixed descent()
const;
200 virtual QFixed leading()
const;
201 virtual QFixed xHeight()
const;
202 virtual QFixed averageCharWidth()
const;
204 virtual QFixed lineThickness()
const;
205 virtual QFixed underlinePosition()
const;
208 virtual qreal minLeftBearing()
const;
209 virtual qreal minRightBearing()
const;
211 virtual void getGlyphBearings(
glyph_t glyph,
qreal *leftBearing =
nullptr,
qreal *rightBearing =
nullptr);
214 virtual bool canRender(
const QChar *
str,
int len)
const;
218 virtual int glyphCount()
const;
225 void *harfbuzzFont()
const;
226 void *harfbuzzFace()
const;
237 void clearGlyphCache(
const void *
key);
241 static const uchar *getCMap(
const uchar *
table,
uint tableSize,
bool *isSymbolFont,
int *cmapSize);
242 static quint32 getTrueTypeGlyphIndex(
const uchar *cmap,
int cmapSize,
uint unicode);
246 virtual bool hasUnreliableGlyphOutline()
const;
247 virtual bool expectsGammaCorrectedBlending()
const;
280 :
ptr(std::exchange(
other.ptr,
nullptr)),
281 destroy_func(std::exchange(
other.destroy_func,
nullptr))
284 QT_MOVE_ASSIGNMENT_OPERATOR_IMPL_VIA_PURE_SWAP(
Holder)
292 void *
get() const noexcept {
return ptr; }
296 destroy_func =
nullptr;
323 return left_right <
other.left_right;
327 void loadKerningPairs(
QFixed scalingFactor);
338 QFixed calculatedCapHeight()
const;
345 virtual void initializeHeightMetrics()
const;
346 bool processHheaTable()
const;
347 bool processOS2Table()
const;
350 struct GlyphCacheEntry {
352 GlyphCacheEntry(
const GlyphCacheEntry &);
355 GlyphCacheEntry &operator=(
const GlyphCacheEntry &);
360 typedef std::list<GlyphCacheEntry> GlyphCaches;
364 mutable qreal m_minLeftBearing;
365 mutable qreal m_minRightBearing;
373 return f1.index == f2.index && f1.encoding == f2.encoding && f1.filename == f2.filename && f1.uuid == f2.uuid;
377 noexcept(noexcept(
qHash(
f.filename)))
415 inline int size()
const {
return _size; }
431 virtual glyph_t glyphIndex(
uint ucs4)
const override;
437 virtual void recalcAdvances(
QGlyphLayout *, ShaperFlags)
const override;
438 virtual void doKerning(
QGlyphLayout *, ShaperFlags)
const override;
440 virtual void getGlyphBearings(
glyph_t glyph,
qreal *leftBearing =
nullptr,
qreal *rightBearing =
nullptr)
override;
442 virtual QFixed ascent()
const override;
443 virtual QFixed capHeight()
const override;
444 virtual QFixed descent()
const override;
445 virtual QFixed leading()
const override;
446 virtual QFixed xHeight()
const override;
447 virtual QFixed averageCharWidth()
const override;
454 virtual QFixed lineThickness()
const override;
455 virtual QFixed underlinePosition()
const override;
456 virtual qreal maxCharWidth()
const override;
457 virtual qreal minLeftBearing()
const override;
458 virtual qreal minRightBearing()
const override;
460 virtual bool canRender(
const QChar *
string,
int len)
const override;
465 void setFallbackFamiliesList(
const QStringList &fallbackFamilies);
470 {
Q_ASSERT(
at < m_engines.size());
return m_engines.at(
at); }
472 void ensureEngineAt(
int at);
477 virtual void ensureFallbackFamiliesQueried();
478 virtual bool shouldLoadFontEngineForCharacter(
int at,
uint ucs4)
const;
485 bool m_fallbackFamiliesQueried;
The QColor class provides colors based on RGB, HSV or CMYK values.
void draw(QPaintEngine *p, qreal x, qreal y, const QTextItemInt &si)
virtual QImage alphaMapForGlyph(glyph_t) override
virtual qreal maxCharWidth() const override
virtual QFontEngine * cloneWithSize(qreal pixelSize) const override
virtual qreal minLeftBearing() const override
virtual QFixed leading() const override
virtual bool canRender(const QChar *string, int len) const override
virtual glyph_t glyphIndex(uint ucs4) const override
virtual QFixed descent() const override
virtual bool stringToCMap(const QChar *str, int len, QGlyphLayout *glyphs, int *nglyphs, ShaperFlags flags) const override
virtual void recalcAdvances(QGlyphLayout *, ShaperFlags) const override
virtual glyph_metrics_t boundingBox(const QGlyphLayout &glyphs) override
virtual void addOutlineToPath(qreal x, qreal y, const QGlyphLayout &glyphs, QPainterPath *path, QTextItem::RenderFlags flags) override
virtual QFixed ascent() const override
virtual QFixed capHeight() const override
virtual qreal minRightBearing() const override
QString fallbackFamilyAt(int at) const
int fallbackFamilyCount() const
QFontEngine * engine(int at) const
qt_destroy_func_t get_deleter() const noexcept
void * get() const noexcept
Holder(void *p, qt_destroy_func_t d)
void swap(Holder &other) noexcept
bool operator!() const noexcept
void * release() noexcept
Holder(Holder &&other) noexcept
virtual bool supportsHorizontalSubPixelPositions() const
virtual QFixed capHeight() const =0
virtual glyph_metrics_t boundingBox(glyph_t glyph)=0
virtual glyph_metrics_t alphaMapBoundingBox(glyph_t glyph, const QFixedPoint &, const QTransform &matrix, GlyphFormat)
int m_subPixelPositionCount
bool m_heightMetricsQueried
virtual FaceId faceId() const
virtual qreal maxCharWidth() const =0
virtual int glyphMargin(GlyphFormat format)
virtual QFontEngine * cloneWithSize(qreal) const
bool canRender(uint ucs4) const
virtual void setDefaultHintStyle(HintStyle)
virtual bool supportsVerticalSubPixelPositions() const
static bool scriptRequiresOpenType(QChar::Script script)
virtual glyph_t glyphIndex(uint ucs4) const =0
bool supportsSubPixelPositions() const
QFixed subPixelPositionForX(QFixed x) const
virtual void recalcAdvances(QGlyphLayout *, ShaperFlags) const
QList< KernPair > kerning_pairs
virtual int synthesized() const
virtual bool hasInternalCaching() const
virtual bool stringToCMap(const QChar *str, int len, QGlyphLayout *glyphs, int *nglyphs, ShaperFlags flags) const =0
virtual QFixed emSquareSize() const
\inmodule QtCore\reentrant
\macro QT_RESTRICTED_CAST_FROM_ASCII
const QChar at(qsizetype i) const
Returns the character at the given index position in the string.
QCache< int, Employee > cache
[0]
Combined button and popup list for selecting options.
AudioChannelLayoutTag tag
static const QCssKnownValue positions[NumKnownPositionModes - 1]
static const QCssKnownValue properties[NumProperties - 1]
DBusConnection const char DBusError DBusBusType DBusError return DBusConnection DBusHandleMessageFunction void DBusFreeFunction return DBusConnection return DBusConnection return const char DBusError return DBusConnection DBusMessage dbus_uint32_t return DBusConnection dbus_bool_t DBusConnection DBusAddWatchFunction DBusRemoveWatchFunction DBusWatchToggledFunction void DBusFreeFunction return DBusConnection DBusDispatchStatusFunction void DBusFreeFunction DBusTimeout return DBusTimeout return DBusWatch return DBusWatch unsigned int return DBusError const DBusError return const DBusMessage return DBusMessage return DBusMessage return DBusMessage return DBusMessage return DBusMessage return DBusMessageIter int const void return DBusMessageIter DBusMessageIter return DBusMessageIter void DBusMessageIter void int return DBusMessage DBusMessageIter return DBusMessageIter return DBusMessageIter DBusMessageIter const char const char const char const char return DBusMessage return DBusMessage const char return DBusMessage dbus_bool_t return DBusMessage dbus_uint32_t return DBusMessage void
DBusConnection const char DBusError DBusBusType DBusError return DBusConnection DBusHandleMessageFunction void * user_data
#define Q_DECLARE_FLAGS(Flags, Enum)
#define Q_DECLARE_OPERATORS_FOR_FLAGS(Flags)
bool(* qt_get_font_table_func_t)(void *user_data, uint tag, uchar *buffer, uint *length)
void(* qt_destroy_func_t)(void *user_data)
size_t qHash(const QFontEngine::FaceId &f, size_t seed=0) noexcept(noexcept(qHash(f.filename)))
@ Err_Invalid_SubTable_Format
constexpr QtPrivate::QHashMultiReturnType< T... > qHashMulti(size_t seed, const T &... args) noexcept(std::conjunction_v< QtPrivate::QNothrowHashable< T >... >)
static ControlElement< T > * ptr(QWidget *widget)
GLuint64 GLenum void * handle
GLint GLint GLint GLint GLint x
[0]
GLint GLsizei GLsizei height
GLenum GLuint GLintptr GLsizeiptr size
[1]
GLenum GLuint GLenum GLsizei length
GLsizei GLenum const void GLuint GLsizei GLfloat * metrics
GLint GLsizei GLsizei GLenum GLenum GLsizei void * data
GLint GLsizei GLsizei GLenum format
GLuint GLenum GLenum transform
GLsizei const GLchar *const * path
GLenum GLenum GLsizei void * table
static qreal position(const QQuickItem *item, QQuickAnchors::Anchor anchorLine)
static Q_CONSTINIT QBasicAtomicInteger< unsigned > seed
bool operator==(const QRandomGenerator &rng1, const QRandomGenerator &rng2)
#define Q_DECLARE_TYPEINFO(TYPE, FLAGS)
qt_get_font_table_func_t get_font_table
bool operator<(const KernPair &other) const
QByteArray postscriptName