From bcd73f38527c4420fe3cd50346a867702ceaeb60 Mon Sep 17 00:00:00 2001 From: Ivailo Monev Date: Sat, 8 Aug 2020 05:20:30 +0300 Subject: [PATCH] optimize QFontMetrics::inFontUcs4() and QFontMetricsF::inFontUcs4() upstream commit: https://github.com/qt/qtbase/commit/09bc8e2cb8238d8dee79a0f22b26efcc05ce6a52 Signed-off-by: Ivailo Monev --- src/gui/text/qfontmetrics.cpp | 20 ++++++++++++++++---- 1 file changed, 16 insertions(+), 4 deletions(-) diff --git a/src/gui/text/qfontmetrics.cpp b/src/gui/text/qfontmetrics.cpp index d67442614..246c1fe19 100644 --- a/src/gui/text/qfontmetrics.cpp +++ b/src/gui/text/qfontmetrics.cpp @@ -419,8 +419,14 @@ bool QFontMetrics::inFontUcs4(uint ucs4) const Q_ASSERT(engine != 0); if (engine->type() == QFontEngine::Box) return false; - QString utf16 = QString::fromUcs4(&ucs4, 1); - return engine->canRender(utf16.data(), utf16.length()); + if (QChar::requiresSurrogates(ucs4)) { + QChar utf16[2]; + utf16[0] = QChar::highSurrogate(ucs4); + utf16[1] = QChar::lowSurrogate(ucs4); + return engine->canRender(utf16, 2); + } + QChar utf16(ucs4); + return engine->canRender(&utf16, 1); } /*! @@ -1285,8 +1291,14 @@ bool QFontMetricsF::inFontUcs4(uint ucs4) const Q_ASSERT(engine != 0); if (engine->type() == QFontEngine::Box) return false; - QString utf16 = QString::fromUcs4(&ucs4, 1); - return engine->canRender(utf16.data(), utf16.length()); + if (QChar::requiresSurrogates(ucs4)) { + QChar utf16[2]; + utf16[0] = QChar::highSurrogate(ucs4); + utf16[1] = QChar::lowSurrogate(ucs4); + return engine->canRender(utf16, 2); + } + QChar utf16(ucs4); + return engine->canRender(&utf16, 1); } /*! -- 2.11.0