From ddc3af4962a2839b9a10d7c4b191ae04f3bdfdb9 Mon Sep 17 00:00:00 2001 From: Ivailo Monev Date: Tue, 4 Jan 2022 21:42:35 +0200 Subject: [PATCH] calculate bounding rectangles via QTextLayout from QFontMetrics/QFontMetricsF Signed-off-by: Ivailo Monev --- src/gui/text/qfontmetrics.cpp | 27 +++++++++++++++++---------- 1 file changed, 17 insertions(+), 10 deletions(-) diff --git a/src/gui/text/qfontmetrics.cpp b/src/gui/text/qfontmetrics.cpp index 44e9a3176..f57bd6b23 100644 --- a/src/gui/text/qfontmetrics.cpp +++ b/src/gui/text/qfontmetrics.cpp @@ -560,13 +560,17 @@ int QFontMetrics::width(QChar ch) const */ QRect QFontMetrics::boundingRect(const QString &text) const { - if (text.length() == 0) + if (text.isEmpty()) return QRect(); - QTextEngine layout(text, d.data()); - layout.itemize(); - glyph_metrics_t gm = layout.boundingBox(); - return QRect(qRound(gm.x), qRound(gm.y), qRound(gm.width), qRound(gm.height)); + QTextLayout textlayout(text, d.data()); + textlayout.beginLayout(); + QTextLine textline = textlayout.createLine(); + while (textline.isValid()) { + textline = textlayout.createLine(); + } + textlayout.endLayout(); + return textlayout.boundingRect().toRect(); } /*! @@ -1325,11 +1329,14 @@ QRectF QFontMetricsF::boundingRect(const QString &text) const if (text.isEmpty()) return QRectF(); - QTextEngine layout(text, d.data()); - layout.itemize(); - glyph_metrics_t gm = layout.boundingBox(); - return QRectF(gm.x.toReal(), gm.y.toReal(), - gm.width.toReal(), gm.height.toReal()); + QTextLayout textlayout(text, d.data()); + textlayout.beginLayout(); + QTextLine textline = textlayout.createLine(); + while (textline.isValid()) { + textline = textlayout.createLine(); + } + textlayout.endLayout(); + return textlayout.boundingRect(); } /*!