From: Ivailo Monev Date: Sun, 23 Jan 2022 22:24:54 +0000 (+0200) Subject: use QPointF instead of QTransform as argument for QFontEngine::getGlyphPositions() X-Git-Tag: 4.12.0~1089 X-Git-Url: http://git.osdn.net/view?a=commitdiff_plain;h=738c766af23425282425750d4aaed2dc91b5e9c7;p=kde%2FKatie.git use QPointF instead of QTransform as argument for QFontEngine::getGlyphPositions() Signed-off-by: Ivailo Monev --- diff --git a/src/gui/painting/qpdf.cpp b/src/gui/painting/qpdf.cpp index fbbffb69f..17c759bb0 100644 --- a/src/gui/painting/qpdf.cpp +++ b/src/gui/painting/qpdf.cpp @@ -1767,8 +1767,7 @@ void QPdfBaseEnginePrivate::drawTextItem(const QPointF &p, const QTextItemInt &t const qreal size = ti.fontEngine->fontDef.pixelSize; QVarLengthArray glyphs; QVarLengthArray positions; - const QTransform m = QTransform::fromTranslate(p.x(), p.y()); - ti.fontEngine->getGlyphPositions(ti.glyphs, m, glyphs, positions); + ti.fontEngine->getGlyphPositions(ti.glyphs, p, glyphs, positions); if (glyphs.size() == 0) return; const int synthesized = ti.fontEngine->synthesized(); diff --git a/src/gui/text/qfontengine.cpp b/src/gui/text/qfontengine.cpp index 41b7ac7e1..f8319ed21 100644 --- a/src/gui/text/qfontengine.cpp +++ b/src/gui/text/qfontengine.cpp @@ -88,49 +88,25 @@ QFixed QFontEngine::averageCharWidth() const } -void QFontEngine::getGlyphPositions(const QGlyphLayout &glyphs, const QTransform &matrix, +void QFontEngine::getGlyphPositions(const QGlyphLayout &glyphs, const QPointF &point, QVarLengthArray &glyphs_out, QVarLengthArray &positions) { - QFixed xpos; - QFixed ypos; - - const bool transform = matrix.m11() != 1. - || matrix.m12() != 0. - || matrix.m21() != 0. - || matrix.m22() != 1.; - if (!transform) { - xpos = QFixed::fromReal(matrix.dx()); - ypos = QFixed::fromReal(matrix.dy()); - } + QFixed xpos = QFixed::fromReal(point.x()); + QFixed ypos = QFixed::fromReal(point.y()); int current = 0; positions.resize(glyphs.numGlyphs); glyphs_out.resize(glyphs.numGlyphs); int i = 0; - if (!transform) { - while (i < glyphs.numGlyphs) { - if (!glyphs.attributes[i].dontPrint) { - positions[current].x = xpos; - positions[current].y = ypos; - glyphs_out[current] = glyphs.glyphs[i]; - xpos += glyphs.advances_x[i]; - ++current; - } - ++i; - } - } else { - while (i < glyphs.numGlyphs) { - if (!glyphs.attributes[i].dontPrint) { - QPointF gpos(xpos.toReal(), ypos.toReal()); - gpos = gpos * matrix; - positions[current].x = QFixed::fromReal(gpos.x()); - positions[current].y = QFixed::fromReal(gpos.y()); - glyphs_out[current] = glyphs.glyphs[i]; - xpos += glyphs.advances_x[i]; - ++current; - } - ++i; + while (i < glyphs.numGlyphs) { + if (!glyphs.attributes[i].dontPrint) { + positions[current].x = xpos; + positions[current].y = ypos; + glyphs_out[current] = glyphs.glyphs[i]; + xpos += glyphs.advances_x[i]; + ++current; } + ++i; } positions.resize(current); glyphs_out.resize(current); @@ -154,7 +130,7 @@ void QFontEngine::addOutlineToPath(qreal x, qreal y, const QGlyphLayout &glyphs, QVarLengthArray positions; QVarLengthArray positioned_glyphs; - getGlyphPositions(glyphs, QTransform::fromTranslate(x, y), positioned_glyphs, positions); + getGlyphPositions(glyphs, QPointF(x, y), positioned_glyphs, positions); addGlyphsToPath(positioned_glyphs.data(), positions.data(), positioned_glyphs.size(), path); } @@ -368,7 +344,7 @@ void QFontEngineBox::addOutlineToPath(qreal x, qreal y, const QGlyphLayout &glyp QVarLengthArray positions; QVarLengthArray positioned_glyphs; - getGlyphPositions(glyphs, QTransform::fromTranslate(x, y - _size), positioned_glyphs, positions); + getGlyphPositions(glyphs, QPointF(x, y - _size), positioned_glyphs, positions); const QSize s(_size - 3, _size - 3); for (int k = 0; k < positions.size(); k++) { diff --git a/src/gui/text/qfontengine_p.h b/src/gui/text/qfontengine_p.h index ad9688bf5..c9c1dce0a 100644 --- a/src/gui/text/qfontengine_p.h +++ b/src/gui/text/qfontengine_p.h @@ -111,7 +111,7 @@ public: virtual void addGlyphsToPath(glyph_t *glyphs, QFixedPoint *positions, int nglyphs, QPainterPath *path) = 0; - void getGlyphPositions(const QGlyphLayout &glyphs, const QTransform &matrix, + void getGlyphPositions(const QGlyphLayout &glyphs, const QPointF &point, QVarLengthArray &glyphs_out, QVarLengthArray &positions); virtual void addOutlineToPath(qreal, qreal, const QGlyphLayout &, QPainterPath *);