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();
151 bool preferTypoLineMetrics()
const;
155 return ucs4 == QChar::LineSeparator
156 || ucs4 == QChar::LineFeed
157 || ucs4 == QChar::CarriageReturn
158 || ucs4 == QChar::ParagraphSeparator
159 || QChar::category(ucs4) == QChar::Other_Control;
168 virtual void doKerning(
QGlyphLayout *, ShaperFlags)
const;
174 QVarLengthArray<glyph_t> &glyphs_out, QVarLengthArray<QFixedPoint> &
positions);
194 return boundingBox(glyph,
matrix);
197 virtual void removeGlyphFromCache(
glyph_t);
204 virtual QFixed ascent()
const;
206 virtual QFixed descent()
const;
207 virtual QFixed leading()
const;
208 virtual QFixed xHeight()
const;
209 virtual QFixed averageCharWidth()
const;
211 virtual QFixed lineThickness()
const;
212 virtual QFixed underlinePosition()
const;
215 virtual qreal minLeftBearing()
const;
216 virtual qreal minRightBearing()
const;
218 virtual void getGlyphBearings(
glyph_t glyph,
qreal *leftBearing =
nullptr,
qreal *rightBearing =
nullptr);
221 virtual bool canRender(
const QChar *
str,
int len)
const;
225 virtual int glyphCount()
const;
232 void *harfbuzzFont()
const;
233 void *harfbuzzFace()
const;
234 bool supportsScript(QChar::Script script)
const;
238 return ((script >= QChar::Script_Syriac && script <= QChar::Script_Sinhala)
239 || script == QChar::Script_Khmer || script == QChar::Script_Nko);
244 void clearGlyphCache(
const void *
key);
248 static const uchar *getCMap(
const uchar *
table,
uint tableSize,
bool *isSymbolFont,
int *cmapSize);
249 static quint32 getTrueTypeGlyphIndex(
const uchar *cmap,
int cmapSize,
uint unicode);
253 virtual bool hasUnreliableGlyphOutline()
const;
254 virtual bool expectsGammaCorrectedBlending()
const;
287 :
ptr(std::exchange(
other.ptr,
nullptr)),
288 destroy_func(std::exchange(
other.destroy_func,
nullptr))
291 QT_MOVE_ASSIGNMENT_OPERATOR_IMPL_VIA_PURE_SWAP(
Holder)
299 void *
get() const noexcept {
return ptr; }
303 destroy_func =
nullptr;
330 return left_right <
other.left_right;
334 void loadKerningPairs(
QFixed scalingFactor);
345 QFixed calculatedCapHeight()
const;
352 virtual void initializeHeightMetrics()
const;
353 bool processHheaTable()
const;
354 bool processOS2Table()
const;
357 struct GlyphCacheEntry {
359 GlyphCacheEntry(
const GlyphCacheEntry &);
362 GlyphCacheEntry &operator=(
const GlyphCacheEntry &);
364 QExplicitlySharedDataPointer<QFontEngineGlyphCache>
cache;
367 typedef std::list<GlyphCacheEntry> GlyphCaches;
368 mutable QHash<const void *, GlyphCaches> m_glyphCaches;
371 mutable qreal m_minLeftBearing;
372 mutable qreal m_minRightBearing;
380 return f1.index == f2.index
381 && f1.encoding == f2.encoding
382 && f1.filename == f2.filename
383 && f1.uuid == f2.uuid
384 && f1.instanceIndex == f2.instanceIndex
385 && f1.variableAxes == f2.variableAxes;
389 noexcept(noexcept(
qHash(
f.filename)))
391 return qHashMulti(
seed,
f.filename,
f.uuid,
f.index,
f.instanceIndex,
f.encoding,
f.variableAxes.keys(),
f.variableAxes.values());
427 inline int size()
const {
return _size; }
443 virtual glyph_t glyphIndex(
uint ucs4)
const override;
449 virtual void recalcAdvances(
QGlyphLayout *, ShaperFlags)
const override;
450 virtual void doKerning(
QGlyphLayout *, ShaperFlags)
const override;
452 virtual void getGlyphBearings(
glyph_t glyph,
qreal *leftBearing =
nullptr,
qreal *rightBearing =
nullptr)
override;
454 virtual QFixed ascent()
const override;
455 virtual QFixed capHeight()
const override;
456 virtual QFixed descent()
const override;
457 virtual QFixed leading()
const override;
458 virtual QFixed xHeight()
const override;
459 virtual QFixed averageCharWidth()
const override;
466 virtual QFixed lineThickness()
const override;
467 virtual QFixed underlinePosition()
const override;
468 virtual qreal maxCharWidth()
const override;
469 virtual qreal minLeftBearing()
const override;
470 virtual qreal minRightBearing()
const override;
472 virtual bool canRender(
const QChar *
string,
int len)
const override;
477 void setFallbackFamiliesList(
const QStringList &fallbackFamilies);
482 {
Q_ASSERT(
at < m_engines.size());
return m_engines.at(
at); }
484 void ensureEngineAt(
int at);
489 virtual void ensureFallbackFamiliesQueried();
490 virtual bool shouldLoadFontEngineForCharacter(
int at,
uint ucs4)
const;
494 QList<QFontEngine *> m_engines;
497 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.
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