7#include <QtCore/QtEndian>
8#include <QtCore/QVarLengthArray>
10#include <private/qstringiterator_p.h>
11#include <QtCore/private/qsystemlibrary_p.h>
12#include <QtCore/private/qwinregistry_p.h>
13#include <QtGui/private/qguiapplication_p.h>
14#include <qpa/qplatformintegration.h>
15#include <QtGui/private/qhighdpiscaling_p.h>
16#include <QtGui/qpainterpath.h>
28#define DESIGN_TO_LOGICAL(DESIGN_UNIT_VALUE) \
29 QFixed::fromReal((qreal(DESIGN_UNIT_VALUE) / qreal(m_unitsPerEm)) * fontDef.pixelSize)
33 class GeometrySink:
public IDWriteGeometrySink
35 Q_DISABLE_COPY_MOVE(GeometrySink)
38 : m_refCount(0), m_path(
path)
42 virtual ~GeometrySink() =
default;
44 IFACEMETHOD_(
void, AddBeziers)(
const D2D1_BEZIER_SEGMENT *beziers, UINT bezierCount)
override;
45 IFACEMETHOD_(
void, AddLines)(
const D2D1_POINT_2F *
points, UINT pointCount)
override;
46 IFACEMETHOD_(
void, BeginFigure)(D2D1_POINT_2F startPoint, D2D1_FIGURE_BEGIN figureBegin)
override;
47 IFACEMETHOD(
Close)()
override;
48 IFACEMETHOD_(
void, EndFigure)(D2D1_FIGURE_END figureEnd)
override;
49 IFACEMETHOD_(
void, SetFillMode)(D2D1_FILL_MODE
fillMode)
override;
50 IFACEMETHOD_(
void, SetSegmentFlags)(D2D1_PATH_SEGMENT vertexFlags)
override;
52 IFACEMETHOD_(
unsigned long, AddRef)()
override;
53 IFACEMETHOD_(
unsigned long, Release)()
override;
54 IFACEMETHOD(QueryInterface)(
IID const &
riid,
void **ppvObject)
override;
57 inline static QPointF fromD2D1_POINT_2F(
const D2D1_POINT_2F &inp)
62 unsigned long m_refCount;
67 void GeometrySink::AddBeziers(
const D2D1_BEZIER_SEGMENT *beziers,
68 UINT bezierCount)
noexcept
70 for (
uint i=0;
i<bezierCount; ++
i) {
71 QPointF c1 = fromD2D1_POINT_2F(beziers[
i].point1);
72 QPointF c2 = fromD2D1_POINT_2F(beziers[
i].point2);
73 QPointF p2 = fromD2D1_POINT_2F(beziers[
i].point3);
75 m_path->cubicTo(c1,
c2,
p2);
79 void GeometrySink::AddLines(
const D2D1_POINT_2F *
points, UINT pointsCount)
noexcept
81 for (
uint i=0;
i<pointsCount; ++
i)
82 m_path->lineTo(fromD2D1_POINT_2F(
points[
i]));
85 void GeometrySink::BeginFigure(D2D1_POINT_2F startPoint,
86 D2D1_FIGURE_BEGIN )
noexcept
88 m_startPoint = fromD2D1_POINT_2F(startPoint);
89 m_path->moveTo(m_startPoint);
92 IFACEMETHODIMP GeometrySink::Close()
noexcept
97 void GeometrySink::EndFigure(D2D1_FIGURE_END figureEnd)
noexcept
99 if (figureEnd == D2D1_FIGURE_END_CLOSED)
100 m_path->closeSubpath();
103 void GeometrySink::SetFillMode(D2D1_FILL_MODE
fillMode)
noexcept
105 m_path->setFillRule(
fillMode == D2D1_FILL_MODE_ALTERNATE
110 void GeometrySink::SetSegmentFlags(D2D1_PATH_SEGMENT )
noexcept
115 IFACEMETHODIMP_(
unsigned long) GeometrySink::AddRef()
noexcept
117 return InterlockedIncrement(&m_refCount);
120 IFACEMETHODIMP_(
unsigned long) GeometrySink::Release()
noexcept
122 unsigned long newCount = InterlockedDecrement(&m_refCount);
132 IFACEMETHODIMP GeometrySink::QueryInterface(
IID const &
riid,
void **ppvObject)
noexcept
134 if (__uuidof(IDWriteGeometrySink) ==
riid) {
136 }
else if (__uuidof(IUnknown) ==
riid) {
151 switch (renderMode) {
152 case DWRITE_RENDERING_MODE_GDI_CLASSIC:
153 return DWRITE_MEASURING_MODE_GDI_CLASSIC;
154 case DWRITE_RENDERING_MODE_GDI_NATURAL:
155 return DWRITE_MEASURING_MODE_GDI_NATURAL;
157 return DWRITE_MEASURING_MODE_NATURAL;
167 hintingPreference = fontDef.
pixelSize > 16.0
172 switch (hintingPreference) {
174 return DWRITE_RENDERING_MODE_CLEARTYPE_NATURAL_SYMMETRIC;
176 return DWRITE_RENDERING_MODE_CLEARTYPE_NATURAL;
178 return DWRITE_RENDERING_MODE_CLEARTYPE_GDI_CLASSIC;
198 , m_fontEngineData(
d)
199 , m_directWriteFontFace(directWriteFontFace)
200 , m_directWriteBitmapRenderTarget(0)
201 , m_lineThickness(-1)
206 qCDebug(lcQpaFonts) << __FUNCTION__ << pixelSize;
210 m_fontEngineData->directWriteFactory->AddRef();
211 m_directWriteFontFace->AddRef();
220 qCDebug(lcQpaFonts) << __FUNCTION__;
222 m_fontEngineData->directWriteFactory->Release();
223 m_directWriteFontFace->Release();
225 if (m_directWriteBitmapRenderTarget != 0)
226 m_directWriteBitmapRenderTarget->Release();
228 if (!m_uniqueFamilyName.
isEmpty()) {
239 return __uuidof(IDWriteLocalFontFileLoader);
244 STDMETHOD(GetFilePathLengthFromKey)(THIS_
void const *, UINT32, UINT32*) PURE;
245 STDMETHOD(GetFilePathFromKey)(THIS_
void const *, UINT32, WCHAR *, UINT32) PURE;
246 STDMETHOD(GetLastWriteTimeFromKey)(THIS_
void const *, UINT32, FILETIME *) PURE;
251 static const UUID
result = { 0xb2d9f3ec, 0xc9fe, 0x4a11, {0xa2, 0xec, 0xd8, 0x62, 0x8, 0xf7, 0xc0, 0xa2}};
256QString QWindowsFontEngineDirectWrite::filenameFromFontFile(IDWriteFontFile *fontFile)
258 IDWriteFontFileLoader *
loader =
nullptr;
268 reinterpret_cast<void **
>(&localLoader));
270 const void *fontFileReferenceKey =
nullptr;
271 UINT32 fontFileReferenceKeySize = 0;
273 hr = fontFile->GetReferenceKey(&fontFileReferenceKey,
274 &fontFileReferenceKeySize);
276 qErrnoWarning(hr,
"%s: GetReferenceKey failed", __FUNCTION__);
279 UINT32 filePathLength = 0;
281 hr = localLoader->GetFilePathLengthFromKey(fontFileReferenceKey,
282 fontFileReferenceKeySize,
289 if (SUCCEEDED(hr) && filePathLength > 0) {
292 hr = localLoader->GetFilePathFromKey(fontFileReferenceKey,
293 fontFileReferenceKeySize,
297 qErrnoWarning(hr,
"%s: GetFilePathFromKey failed", __FUNCTION__);
302 if (localLoader !=
nullptr)
303 localLoader->Release();
312 if (m_fontEngineData ==
nullptr || m_directWriteFontFace ==
nullptr)
316 HRESULT hr = m_fontEngineData->directWriteGdiInterop->ConvertFontFaceToLOGFONT(m_directWriteFontFace,
320 return CreateFontIndirect(&lf);
329 m_directWriteFontFace->GetMetrics(&
metrics);
338void QWindowsFontEngineDirectWrite::collectMetrics()
342 m_directWriteFontFace->GetMetrics(&
metrics);
343 m_unitsPerEm =
metrics.designUnitsPerEm;
350 IDWriteFontFile *fontFile =
nullptr;
351 UINT32 numberOfFiles = 1;
352 if (SUCCEEDED(m_directWriteFontFace->GetFiles(&numberOfFiles, &fontFile))) {
358 const int advanceWidthMaxLocation = 10;
359 if (
table.size() >= advanceWidthMaxLocation +
int(
sizeof(
quint16))) {
360 quint16 advanceWidthMax = qFromBigEndian<quint16>(
table.constData() + advanceWidthMaxLocation);
367 if (m_underlinePosition > 0)
368 return m_underlinePosition;
375 if (m_lineThickness > 0)
376 return m_lineThickness;
385 const void *tableData = 0;
387 void *tableContext = 0;
389 HRESULT hr = m_directWriteFontFace->TryGetFontTable(qbswap<quint32>(
tag),
390 &tableData, &tableSize,
391 &tableContext, &exists);
396 memcpy(
buffer, tableData, tableSize);
400 m_directWriteFontFace->ReleaseFontTable(tableContext);
410 if (m_unitsPerEm > 0)
430 int *nglyphs, QFontEngine::ShaperFlags
flags)
const
433 if (*nglyphs <
len) {
439 int actualLength = 0;
442 codePoints[actualLength++] =
it.next();
445 HRESULT hr = m_directWriteFontFace->GetGlyphIndicesW(codePoints.
data(), actualLength,
446 glyphIndices.
data());
452 for (
int i = 0;
i < actualLength; ++
i)
455 *nglyphs = actualLength;
475 glyphIndices[
i] = UINT16(glyphs->
glyphs[
i]);
481 if (renderMode == DWRITE_RENDERING_MODE_GDI_CLASSIC || renderMode == DWRITE_RENDERING_MODE_GDI_NATURAL) {
482 hr = m_directWriteFontFace->GetGdiCompatibleGlyphMetrics(
float(
fontDef.
pixelSize),
488 glyphMetrics.
data());
490 hr = m_directWriteFontFace->GetDesignGlyphMetrics(glyphIndices.
data(),
492 glyphMetrics.
data());
499 qErrnoWarning(
"%s: GetDesignGlyphMetrics failed", __FUNCTION__);
507 float advance = 0.0f;
509 DWRITE_GLYPH_OFFSET
offset;
511 offset.ascenderOffset = 0;
512 GeometrySink geometrySink(
path);
513 HRESULT hr = m_directWriteFontFace->GetGlyphRunOutline(m_unitsPerEm,
522 qErrnoWarning(
"%s: GetGlyphRunOutline failed", __FUNCTION__);
526 DWRITE_GLYPH_METRICS glyphMetrics;
527 hr = m_directWriteFontFace->GetDesignGlyphMetrics(&
g, 1, &glyphMetrics);
529 qErrnoWarning(
"%s: GetDesignGlyphMetrics failed", __FUNCTION__);
533 QFixed advanceWidth =
QFixed(
int(glyphMetrics.advanceWidth));
534 QFixed leftSideBearing =
QFixed(glyphMetrics.leftSideBearing);
535 QFixed rightSideBearing =
QFixed(glyphMetrics.rightSideBearing);
536 QFixed advanceHeight =
QFixed(
int(glyphMetrics.advanceHeight));
537 QFixed verticalOriginY =
QFixed(glyphMetrics.verticalOriginY);
538 QFixed topSideBearing =
QFixed(glyphMetrics.topSideBearing);
539 QFixed bottomSideBearing =
QFixed(glyphMetrics.bottomSideBearing);
540 QFixed width = advanceWidth - leftSideBearing - rightSideBearing;
541 QFixed height = advanceHeight - topSideBearing - bottomSideBearing;
543 -verticalOriginY + topSideBearing,
558 for (
int i=0;
i<nglyphs; ++
i) {
559 glyphIndices[
i] = glyphs[
i];
560 glyphOffsets[
i].advanceOffset =
positions[
i].x.toReal();
561 glyphOffsets[
i].ascenderOffset = -
positions[
i].y.toReal();
562 glyphAdvances[
i] = 0.0;
565 GeometrySink geometrySink(
path);
566 HRESULT hr = m_directWriteFontFace->GetGlyphRunOutline(
569 glyphAdvances.
data(),
578 qErrnoWarning(
"%s: GetGlyphRunOutline failed", __FUNCTION__);
598 DWRITE_GLYPH_METRICS glyphMetrics;
599 HRESULT hr = m_directWriteFontFace->GetDesignGlyphMetrics(&
glyphIndex, 1, &glyphMetrics);
608 QFixed width = advanceWidth - leftSideBearing - rightSideBearing;
609 QFixed height = advanceHeight - topSideBearing - bottomSideBearing;
611 -verticalOriginY + topSideBearing,
617 qErrnoWarning(
"%s: GetDesignGlyphMetrics failed", __FUNCTION__);
625 if (m_capHeight <= 0)
638 return m_maxAdvanceWidth.
toReal();
675 IDWriteFontFace2 *directWriteFontFace2;
676 if (SUCCEEDED(m_directWriteFontFace->QueryInterface(__uuidof(IDWriteFontFace2),
677 reinterpret_cast<void **
>(&directWriteFontFace2)))) {
679 directWriteFontFace2->GetMetrics(&
metrics);
682 p.emSquare =
metrics.designUnitsPerEm;
691 p.lineWidth =
metrics.underlineThickness;
693 directWriteFontFace2->Release();
707 FLOAT glyphAdvance = 0;
709 DWRITE_GLYPH_OFFSET glyphOffset;
710 glyphOffset.advanceOffset = 0;
711 glyphOffset.ascenderOffset = 0;
713 DWRITE_GLYPH_RUN glyphRun;
714 glyphRun.fontFace = m_directWriteFontFace;
716 glyphRun.glyphCount = 1;
718 glyphRun.glyphAdvances = &glyphAdvance;
719 glyphRun.isSideways =
false;
720 glyphRun.bidiLevel = 0;
721 glyphRun.glyphOffsets = &glyphOffset;
736 DWRITE_MEASURING_MODE measureMode =
740 ? DWRITE_GRID_FIT_MODE_DISABLED
741 : DWRITE_GRID_FIT_MODE_DEFAULT;
743 IDWriteFactory2 *factory2 =
nullptr;
744 HRESULT hr = m_fontEngineData->directWriteFactory->QueryInterface(__uuidof(IDWriteFactory2),
745 reinterpret_cast<void **
>(&factory2));
746 IDWriteGlyphRunAnalysis *glyphAnalysis = NULL;
747 if (!SUCCEEDED(hr)) {
748 qErrnoWarning(hr,
"%s: Failed to query IDWriteFactory2 interface.", __FUNCTION__);
749 hr = m_fontEngineData->directWriteFactory->CreateGlyphRunAnalysis(
759 hr = factory2->CreateGlyphRunAnalysis(
765 DWRITE_TEXT_ANTIALIAS_MODE_CLEARTYPE,
773 glyphAnalysis->GetAlphaTextureBounds(DWRITE_TEXTURE_CLEARTYPE_3x1, &
rect);
781 rect.bottom + margin));
789 IDWriteColorGlyphRunEnumerator *enumerator = 0;
791 hr = factory2->TranslateColorGlyphRun(0.0f,
803 image.fill(0xffffffff);
809 while (SUCCEEDED(hr) &&
ok) {
810 const DWRITE_COLOR_GLYPH_RUN *colorGlyphRun = 0;
811 hr = enumerator->GetCurrentRun(&colorGlyphRun);
813 qErrnoWarning(hr,
"%s: IDWriteColorGlyphRunEnumerator::GetCurrentRun failed", __FUNCTION__);
817 IDWriteGlyphRunAnalysis *colorGlyphsAnalysis = NULL;
818 hr = factory2->CreateGlyphRunAnalysis(
819 &colorGlyphRun->glyphRun,
824 DWRITE_TEXT_ANTIALIAS_MODE_CLEARTYPE,
830 qErrnoWarning(hr,
"%s: CreateGlyphRunAnalysis failed for color run", __FUNCTION__);
835 if (colorGlyphRun->paletteIndex == 0xFFFF) {
837 g = float(
color.greenF());
839 a = float(
color.alphaF());
841 r =
qBound(0.0f, colorGlyphRun->runColor.r, 1.0f);
842 g =
qBound(0.0f, colorGlyphRun->runColor.g, 1.0f);
843 b =
qBound(0.0f, colorGlyphRun->runColor.b, 1.0f);
844 a =
qBound(0.0f, colorGlyphRun->runColor.a, 1.0f);
848 renderGlyphRun(&
image,
856 colorGlyphsAnalysis->Release();
858 hr = enumerator->MoveNext(&
ok);
860 qErrnoWarning(hr,
"%s: IDWriteColorGlyphRunEnumerator::MoveNext failed", __FUNCTION__);
868 g = float(
color.greenF());
870 a = float(
color.alphaF());
875 renderGlyphRun(&
image,
884 glyphAnalysis->Release();
887 qErrnoWarning(hr,
"%s: CreateGlyphRunAnalysis failed", __FUNCTION__);
898 IDWriteGlyphRunAnalysis *glyphAnalysis,
917 BYTE *alphaValues = alphaValueArray.data();
918 memset(alphaValues, 0,
size);
920 HRESULT hr = glyphAnalysis->CreateAlphaTexture(DWRITE_TEXTURE_CLEARTYPE_3x1,
931 float redAlpha =
a * *
src++ / 255.0;
932 float greenAlpha =
a * *
src++ / 255.0;
933 float blueAlpha =
a * *
src++ / 255.0;
934 float averageAlpha = (redAlpha + greenAlpha + blueAlpha) / 3.0;
936 QRgb currentRgb = dest[
x];
937 dest[
x] =
qRgba(
qRound(
qRed(currentRgb) * (1.0 - averageAlpha) + averageAlpha *
r),
938 qRound(
qGreen(currentRgb) * (1.0 - averageAlpha) + averageAlpha *
g),
939 qRound(
qBlue(currentRgb) * (1.0 - averageAlpha) + averageAlpha *
b),
940 qRound(
qAlpha(currentRgb) * (1.0 - averageAlpha) + averageAlpha * 255));
950 dest[
x] = *(
src + 0) << 16
959 qErrnoWarning(
"%s: CreateAlphaTexture failed", __FUNCTION__);
962 glyphAnalysis->Release();
963 qWarning(
"%s: Glyph has no bounds", __FUNCTION__);
976 return mask.depth() == 32
989 if (!m_uniqueFamilyName.
isEmpty()) {
1000 return m_directWriteFontFace;
1018 LR
"(Software\Microsoft\Windows NT\CurrentVersion\FontSubstitutes)")
1020 return substitute.
isEmpty() ? familyName : substitute;
1037 FLOAT glyphAdvance = 0;
1039 DWRITE_GLYPH_OFFSET glyphOffset;
1040 glyphOffset.advanceOffset = 0;
1041 glyphOffset.ascenderOffset = 0;
1043 DWRITE_GLYPH_RUN glyphRun;
1044 glyphRun.fontFace = m_directWriteFontFace;
1046 glyphRun.glyphCount = 1;
1048 glyphRun.glyphAdvances = &glyphAdvance;
1049 glyphRun.isSideways =
false;
1050 glyphRun.bidiLevel = 0;
1051 glyphRun.glyphOffsets = &glyphOffset;
1064 ? DWRITE_GRID_FIT_MODE_DISABLED
1065 : DWRITE_GRID_FIT_MODE_DEFAULT;
1067 IDWriteFactory2 *factory2 =
nullptr;
1068 HRESULT hr = m_fontEngineData->directWriteFactory->QueryInterface(__uuidof(IDWriteFactory2),
1069 reinterpret_cast<void **
>(&factory2));
1071 IDWriteGlyphRunAnalysis *glyphAnalysis = NULL;
1072 if (SUCCEEDED(hr)) {
1073 hr = factory2->CreateGlyphRunAnalysis(
1079 DWRITE_TEXT_ANTIALIAS_MODE_CLEARTYPE,
1084 hr = m_fontEngineData->directWriteFactory->CreateGlyphRunAnalysis(
1095 if (SUCCEEDED(hr)) {
1097 glyphAnalysis->GetAlphaTextureBounds(DWRITE_TEXTURE_CLEARTYPE_3x1, &
rect);
1098 glyphAnalysis->Release();
1107 rect.right -
rect.left + margin * 2,
1108 rect.bottom -
rect.top + margin * 2,
The QColor class provides colors based on RGB, HSV or CMYK values.
static QByteArray encodeName(const QString &fileName)
Converts fileName to an 8-bit encoding that you can use in native APIs.
virtual QFixed descent() const
virtual Properties properties() const
QFixed calculatedCapHeight() const
virtual QFixed ascent() const
virtual int glyphMargin(GlyphFormat format)
QFixed firstLeftBearing(const QGlyphLayout &glyphs)
QByteArray getSfntTable(uint tag) const
virtual void initializeHeightMetrics() const
virtual QFixed lineThickness() const
virtual QFixed underlinePosition() const
virtual glyph_metrics_t boundingBox(const QGlyphLayout &glyphs)
QFixed lastRightBearing(const QGlyphLayout &glyphs)
virtual QFixed emSquareSize() const
static QPlatformIntegration * platformIntegration()
uchar * scanLine(int)
Returns a pointer to the pixel data at the scanline with index i.
int width() const
Returns the width of the image.
int height() const
Returns the height of the image.
@ Format_ARGB32_Premultiplied
const uchar * constScanLine(int) const
Returns a pointer to the pixel data at the scanline with index i.
\inmodule QtCore\reentrant
\inmodule QtCore\reentrant
\inmodule QtCore\reentrant
constexpr qreal bottom() const noexcept
Returns the y-coordinate of the rectangle's bottom edge.
constexpr qreal height() const noexcept
Returns the height of the rectangle.
constexpr qreal width() const noexcept
Returns the width of the rectangle.
constexpr qreal left() const noexcept
Returns the x-coordinate of the rectangle's left edge.
constexpr qreal top() const noexcept
Returns the y-coordinate of the rectangle's top edge.
constexpr qreal right() const noexcept
Returns the x-coordinate of the rectangle's right edge.
\inmodule QtCore\reentrant
\macro QT_RESTRICTED_CAST_FROM_ASCII
bool isEmpty() const
Returns true if the string has no characters; otherwise returns false.
static QString fromWCharArray(const wchar_t *string, qsizetype size=-1)
constexpr size_type size() const noexcept
const T & at(qsizetype idx) const
QString stringValue(QStringView subKey) const
Font database for Windows.
Windows font engine using Direct Write.
Qt::HANDLE handle() const override
void getUnscaledGlyph(glyph_t glyph, QPainterPath *path, glyph_metrics_t *metrics) override
void setUniqueFamilyName(const QString &newName)
bool getSfntTableData(uint tag, uchar *buffer, uint *length) const override
Returns true if the font table idetified by tag exists in the font; returns false otherwise.
void initializeHeightMetrics() const override
Properties properties() const override
glyph_metrics_t boundingBox(const QGlyphLayout &glyphs) override
QFixed lineThickness() const override
QImage alphaMapForGlyph(glyph_t glyph, const QFixedPoint &subPixelPosition) override
QFixed xHeight() const override
glyph_metrics_t alphaMapBoundingBox(glyph_t glyph, const QFixedPoint &, const QTransform &matrix, GlyphFormat) override
HFONT createHFONT() const
~QWindowsFontEngineDirectWrite() override
void initFontInfo(const QFontDef &request, int dpi)
QFontEngine * cloneWithSize(qreal pixelSize) const override
qreal maxCharWidth() const override
glyph_t glyphIndex(uint ucs4) const override
QFixed capHeight() const override
FaceId faceId() const override
static QString fontNameSubstitute(const QString &familyName)
bool supportsHorizontalSubPixelPositions() const override
void recalcAdvances(QGlyphLayout *glyphs, ShaperFlags) const override
QWindowsFontEngineDirectWrite(IDWriteFontFace *directWriteFontFace, qreal pixelSize, const QSharedPointer< QWindowsFontEngineData > &d)
QFixed emSquareSize() const override
QImage alphaRGBMapForGlyph(glyph_t t, const QFixedPoint &subPixelPosition, const QTransform &xform) override
QImage bitmapForGlyph(glyph_t, const QFixedPoint &subPixelPosition, const QTransform &t, const QColor &color) override
void addGlyphsToPath(glyph_t *glyphs, QFixedPoint *positions, int nglyphs, QPainterPath *path, QTextItem::RenderFlags flags) override
bool stringToCMap(const QChar *str, int len, QGlyphLayout *glyphs, int *nglyphs, ShaperFlags flags) const override
QFixed underlinePosition() const override
QSet< QString >::iterator it
void qErrnoWarning(const char *msg,...)
Combined button and popup list for selecting options.
#define QT_WARNING_DISABLE_CLANG(text)
AudioChannelLayoutTag tag
static const QCssKnownValue positions[NumKnownPositionModes - 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 * destination
bool qFuzzyIsNull(qfloat16 f) noexcept
int qRound(qfloat16 d) noexcept
#define MAKE_TAG(ch1, ch2, ch3, ch4)
#define qCDebug(category,...)
constexpr const T & qBound(const T &min, const T &val, const T &max)
GLboolean GLboolean GLboolean b
GLint GLint GLint GLint GLint x
[0]
GLfloat GLfloat GLfloat w
[0]
GLint GLsizei GLsizei height
GLboolean GLboolean GLboolean GLboolean a
[7]
GLenum GLuint GLintptr GLsizeiptr size
[1]
GLenum GLuint GLenum GLsizei length
GLsizei GLenum const void GLuint GLsizei GLfloat * metrics
GLenum GLuint GLintptr offset
GLint GLint GLint GLint GLint GLint GLint GLbitfield mask
GLint GLsizei GLsizei GLenum format
GLuint GLenum GLenum transform
GLfixed GLfixed GLint GLint GLfixed points
GLsizei const GLchar *const * path
GLenum GLenum GLsizei void * table
static const QRectF boundingRect(const QPointF *points, int pointCount)
QT_BEGIN_NAMESPACE typedef unsigned int QRgb
constexpr int qRed(QRgb rgb)
constexpr int qGreen(QRgb rgb)
constexpr int qGray(int r, int g, int b)
constexpr QRgb qRgba(int r, int g, int b, int a)
constexpr int qBlue(QRgb rgb)
constexpr int qAlpha(QRgb rgb)
IUIViewSettingsInterop __RPC__in REFIID riid
static DWRITE_RENDERING_MODE hintingPreferenceToRenderingMode(const QFontDef &fontDef)
static UUID uuidIdWriteLocalFontFileLoader()
IDWriteLocalFontFileLoader QIdWriteLocalFontFileLoader
#define DESIGN_TO_LOGICAL(DESIGN_UNIT_VALUE)
static DWRITE_MEASURING_MODE renderModeToMeasureMode(DWRITE_RENDERING_MODE renderMode)
QNetworkRequest request(url)
constexpr int toInt() const
constexpr qreal toReal() const
QFixed effectiveAdvance(int item) const
virtual HRESULT STDMETHODCALLTYPE Close(void)=0