OSDN Git Service

optimize QFontMetrics::inFontUcs4() and QFontMetricsF::inFontUcs4()
authorIvailo Monev <xakepa10@gmail.com>
Sat, 8 Aug 2020 02:20:30 +0000 (05:20 +0300)
committerIvailo Monev <xakepa10@gmail.com>
Sat, 8 Aug 2020 02:20:30 +0000 (05:20 +0300)
upstream commit:
https://github.com/qt/qtbase/commit/09bc8e2cb8238d8dee79a0f22b26efcc05ce6a52

Signed-off-by: Ivailo Monev <xakepa10@gmail.com>
src/gui/text/qfontmetrics.cpp

index d674426..246c1fe 100644 (file)
@@ -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);
 }
 
 /*!