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"
65 TestFontEngine = 0x1000
70 Format_Render = Format_None,
78 DesignMetrics = 0x0002,
79 GlyphIndicesOnly = 0x0004,
80 FullStringFallback = 0x008
88 short linearAdvance = 0;
134 SynthesizedItalic = 0x1,
135 SynthesizedBold = 0x2,
136 SynthesizedStretch = 0x4
141 return supportsHorizontalSubPixelPositions() || supportsVerticalSubPixelPositions();
154 return ucs4 == QChar::LineSeparator
155 || ucs4 == QChar::LineFeed
156 || ucs4 == QChar::CarriageReturn
157 || ucs4 == QChar::ParagraphSeparator
158 || QChar::category(ucs4) == QChar::Other_Control;
167 virtual void doKerning(
QGlyphLayout *, ShaperFlags)
const;
173 QVarLengthArray<glyph_t> &glyphs_out, QVarLengthArray<QFixedPoint> &
positions);
193 return boundingBox(glyph,
matrix);
196 virtual void removeGlyphFromCache(
glyph_t);
203 virtual QFixed ascent()
const;
205 virtual QFixed descent()
const;
206 virtual QFixed leading()
const;
207 virtual QFixed xHeight()
const;
208 virtual QFixed averageCharWidth()
const;
210 virtual QFixed lineThickness()
const;
211 virtual QFixed underlinePosition()
const;
214 virtual qreal minLeftBearing()
const;
215 virtual qreal minRightBearing()
const;
217 virtual void getGlyphBearings(
glyph_t glyph,
qreal *leftBearing =
nullptr,
qreal *rightBearing =
nullptr);
220 virtual bool canRender(
const QChar *
str,
int len)
const;
224 virtual int glyphCount()
const;
231 void *harfbuzzFont()
const;
232 void *harfbuzzFace()
const;
233 bool supportsScript(QChar::Script script)
const;
237 return ((script >= QChar::Script_Syriac && script <= QChar::Script_Sinhala)
238 || script == QChar::Script_Khmer || script == QChar::Script_Nko);
243 void clearGlyphCache(
const void *
key);
247 static const uchar *getCMap(
const uchar *
table,
uint tableSize,
bool *isSymbolFont,
int *cmapSize);
248 static quint32 getTrueTypeGlyphIndex(
const uchar *cmap,
int cmapSize,
uint unicode);
252 virtual bool hasUnreliableGlyphOutline()
const;
253 virtual bool expectsGammaCorrectedBlending()
const;
286 :
ptr(std::exchange(
other.ptr,
nullptr)),
287 destroy_func(std::exchange(
other.destroy_func,
nullptr))
290 QT_MOVE_ASSIGNMENT_OPERATOR_IMPL_VIA_PURE_SWAP(
Holder)
298 void *
get() const noexcept {
return ptr; }
302 destroy_func =
nullptr;
329 return left_right <
other.left_right;
333 void loadKerningPairs(
QFixed scalingFactor);
344 QFixed calculatedCapHeight()
const;
351 virtual void initializeHeightMetrics()
const;
352 bool processHheaTable()
const;
353 bool processOS2Table()
const;
356 struct GlyphCacheEntry {
358 GlyphCacheEntry(
const GlyphCacheEntry &);
361 GlyphCacheEntry &operator=(
const GlyphCacheEntry &);
363 QExplicitlySharedDataPointer<QFontEngineGlyphCache>
cache;
366 typedef std::list<GlyphCacheEntry> GlyphCaches;
367 mutable QHash<const void *, GlyphCaches> m_glyphCaches;
370 mutable qreal m_minLeftBearing;
371 mutable qreal m_minRightBearing;
379 return f1.index == f2.index
380 && f1.encoding == f2.encoding
381 && f1.filename == f2.filename
382 && f1.uuid == f2.uuid
383 && f1.instanceIndex == f2.instanceIndex
384 && f1.variableAxes == f2.variableAxes;
388 noexcept(noexcept(
qHash(
f.filename)))
390 return qHashMulti(
seed,
f.filename,
f.uuid,
f.index,
f.instanceIndex,
f.encoding,
f.variableAxes.keys(),
f.variableAxes.values());
426 inline int size()
const {
return _size; }
442 virtual glyph_t glyphIndex(
uint ucs4)
const override;
448 virtual void recalcAdvances(
QGlyphLayout *, ShaperFlags)
const override;
449 virtual void doKerning(
QGlyphLayout *, ShaperFlags)
const override;
451 virtual void getGlyphBearings(
glyph_t glyph,
qreal *leftBearing =
nullptr,
qreal *rightBearing =
nullptr)
override;
453 virtual QFixed ascent()
const override;
454 virtual QFixed capHeight()
const override;
455 virtual QFixed descent()
const override;
456 virtual QFixed leading()
const override;
457 virtual QFixed xHeight()
const override;
458 virtual QFixed averageCharWidth()
const override;
465 virtual QFixed lineThickness()
const override;
466 virtual QFixed underlinePosition()
const override;
467 virtual qreal maxCharWidth()
const override;
468 virtual qreal minLeftBearing()
const override;
469 virtual qreal minRightBearing()
const override;
471 virtual bool canRender(
const QChar *
string,
int len)
const override;
476 void setFallbackFamiliesList(
const QStringList &fallbackFamilies);
481 {
Q_ASSERT(
at < m_engines.size());
return m_engines.at(
at); }
483 void ensureEngineAt(
int at);
488 virtual void ensureFallbackFamiliesQueried();
489 virtual bool shouldLoadFontEngineForCharacter(
int at,
uint ucs4)
const;
493 QList<QFontEngine *> m_engines;
496 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 int stringToCMap(const QChar *str, int len, QGlyphLayout *glyphs, int *nglyphs, ShaperFlags flags) 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 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
virtual int stringToCMap(const QChar *str, int len, QGlyphLayout *glyphs, int *nglyphs, ShaperFlags flags) const =0
bool m_heightMetricsQueried
virtual FaceId faceId() const
static bool isIgnorableChar(char32_t ucs4)
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 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.
QTestFontEngine(int size)
QCache< int, Employee > cache
[0]
Combined button and popup list for selecting options.
QList< QString > QStringList
Constructs a string list that contains the given string, str.
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
GLint GLsizei GLsizei GLenum GLenum GLsizei void * data
GLsizei GLenum const void GLuint GLsizei GLfloat * metrics
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)
QT_BEGIN_NAMESPACE constexpr void qSwap(T &value1, T &value2) noexcept(std::is_nothrow_swappable_v< T >)
#define Q_DECLARE_TYPEINFO(TYPE, FLAGS)
qt_get_font_table_func_t get_font_table
QMap< QFont::Tag, float > variableAxes
bool operator<(const KernPair &other) const
QByteArray postscriptName