Fix right-to-left text with DirectWrite engine + QPainterPath

When QPainterPath was used for RTL text, either directly or because
the target text size exceeds 64 pixels, we would pass true for
"isRightToLeft" to DirectWrite, causing it to do adaptation internally
for this. But the RTL layout had already been handled by Qt, so we
would essentially reverse the layout twice and also move the text
to negative X coordinates.

Passing false instead fixes this, as it will then just use the
positions we pass in blindly.

Fixes: QTBUG-94175
Change-Id: Ie9a47e56e97fc867ede10ab21ac5e3f003ddcacb
Reviewed-by: Lars Knoll <lars.knoll@qt.io>
(cherry picked from commit 30399fb95cf8b528ac4b45766ac55c6f0a16e2f4)
Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
This commit is contained in:
Eskil Abrahamsen Blomfeldt 2021-06-17 13:37:51 +02:00 committed by Qt Cherry-pick Bot
parent 3eab20ad38
commit 247bd54fd2

View File

@ -517,6 +517,7 @@ void QWindowsFontEngineDirectWrite::recalcAdvances(QGlyphLayout *glyphs, QFontEn
void QWindowsFontEngineDirectWrite::addGlyphsToPath(glyph_t *glyphs, QFixedPoint *positions, int nglyphs,
QPainterPath *path, QTextItem::RenderFlags flags)
{
Q_UNUSED(flags);
QVarLengthArray<UINT16> glyphIndices(nglyphs);
QVarLengthArray<DWRITE_GLYPH_OFFSET> glyphOffsets(nglyphs);
QVarLengthArray<FLOAT> glyphAdvances(nglyphs);
@ -536,7 +537,7 @@ void QWindowsFontEngineDirectWrite::addGlyphsToPath(glyph_t *glyphs, QFixedPoint
glyphOffsets.data(),
nglyphs,
false,
flags & QTextItem::RightToLeft,
false,
&geometrySink
);