diff options
Diffstat (limited to 'src/gui/text')
-rw-r--r-- | src/gui/text/qfontsubset.cpp | 18 | ||||
-rw-r--r-- | src/gui/text/qfontsubset_p.h | 1 | ||||
-rw-r--r-- | src/gui/text/qtextlayout.cpp | 15 |
3 files changed, 14 insertions, 20 deletions
diff --git a/src/gui/text/qfontsubset.cpp b/src/gui/text/qfontsubset.cpp index d56516fa04..75639ee525 100644 --- a/src/gui/text/qfontsubset.cpp +++ b/src/gui/text/qfontsubset.cpp @@ -112,24 +112,6 @@ QByteArray QFontSubset::glyphName(unsigned short unicode, bool symbol) return buffer; } -QByteArray QFontSubset::glyphName(unsigned int glyph, const QVector<int> &reverseMap) const -{ - uint glyphIndex = glyph_indices[glyph]; - - if (glyphIndex == 0) - return "/.notdef"; - - QByteArray ba; - QPdf::ByteStream s(&ba); - if (reverseMap[glyphIndex] && reverseMap[glyphIndex] < 0x10000) { - s << '/' << glyphName(reverseMap[glyphIndex], false); - } else { - s << "/gl" << (int)glyphIndex; - } - return ba; -} - - QByteArray QFontSubset::widthArray() const { Q_ASSERT(!widths.isEmpty()); diff --git a/src/gui/text/qfontsubset_p.h b/src/gui/text/qfontsubset_p.h index e7c6053beb..5b605aac59 100644 --- a/src/gui/text/qfontsubset_p.h +++ b/src/gui/text/qfontsubset_p.h @@ -77,7 +77,6 @@ public: QByteArray widthArray() const; QByteArray createToUnicodeMap() const; QVector<int> getReverseMap() const; - QByteArray glyphName(unsigned int glyph, const QVector<int> &reverseMap) const; static QByteArray glyphName(unsigned short unicode, bool symbol); diff --git a/src/gui/text/qtextlayout.cpp b/src/gui/text/qtextlayout.cpp index d4f0a5efdc..30f07ba69b 100644 --- a/src/gui/text/qtextlayout.cpp +++ b/src/gui/text/qtextlayout.cpp @@ -1350,7 +1350,20 @@ void QTextLayout::drawCursor(QPainter *p, const QPointF &pos, int cursorPosition QPainter::CompositionMode origCompositionMode = p->compositionMode(); if (p->paintEngine()->hasFeature(QPaintEngine::RasterOpModes)) p->setCompositionMode(QPainter::RasterOp_NotDestination); - p->fillRect(QRectF(x, y, qreal(width), (base + descent).toReal()), p->pen().brush()); + const QTransform &deviceTransform = p->deviceTransform(); + const qreal xScale = deviceTransform.m11(); + if (deviceTransform.type() != QTransform::TxScale || std::trunc(xScale) == xScale) { + p->fillRect(QRectF(x, y, qreal(width), (base + descent).toReal()), p->pen().brush()); + } else { + // Ensure consistently rendered cursor width under fractional scaling + const QPen origPen = p->pen(); + QPen pen(origPen.brush(), qRound(width * xScale), Qt::SolidLine, Qt::FlatCap); + pen.setCosmetic(true); + const qreal center = x + qreal(width) / 2; + p->setPen(pen); + p->drawLine(QPointF(center, y), QPointF(center, y + (base + descent).toReal())); + p->setPen(origPen); + } p->setCompositionMode(origCompositionMode); if (toggleAntialiasing) p->setRenderHint(QPainter::Antialiasing, false); |