From 8ed1f02c0ca4626ddb2e9262aad4459ff3474630 Mon Sep 17 00:00:00 2001 From: Ritt Konstantin Date: Fri, 22 Jul 2011 13:16:41 +0200 Subject: optimize QRawFont::supportsCharacter() a single UCS-4-encoded codepoint could morph into 1 or 2 UCS-2-encoded codepoints only; thus, allocating QString just to parse it could be avoided and the well-defined UCS-4 to UCS-2 arithmetic could be used instead Merge-request: 1305 Reviewed-by: Jiang Jiang --- src/gui/text/qrawfont.cpp | 17 ++++++++++++++--- src/gui/text/qrawfont.h | 2 +- 2 files changed, 15 insertions(+), 4 deletions(-) diff --git a/src/gui/text/qrawfont.cpp b/src/gui/text/qrawfont.cpp index 2c60b14..e3e5c57 100644 --- a/src/gui/text/qrawfont.cpp +++ b/src/gui/text/qrawfont.cpp @@ -624,7 +624,7 @@ QList QRawFont::supportedWritingSystems() const \sa supportedWritingSystems() */ -bool QRawFont::supportsCharacter(const QChar &character) const +bool QRawFont::supportsCharacter(QChar character) const { if (!isValid()) return false; @@ -633,6 +633,7 @@ bool QRawFont::supportsCharacter(const QChar &character) const } /*! + \overload Returns true if the font has a glyph that corresponds to the UCS-4 encoded character \a ucs4. \sa supportedWritingSystems() @@ -642,8 +643,18 @@ bool QRawFont::supportsCharacter(quint32 ucs4) const if (!isValid()) return false; - QString str = QString::fromUcs4(&ucs4, 1); - return d->fontEngine->canRender(str.constData(), str.size()); + QChar str[2]; + int len; + if (!QChar::requiresSurrogates(ucs4)) { + str[0] = QChar(ucs4); + len = 1; + } else { + str[0] = QChar(QChar::highSurrogate(ucs4)); + str[1] = QChar(QChar::lowSurrogate(ucs4)); + len = 2; + } + + return d->fontEngine->canRender(str, len); } // qfontdatabase.cpp diff --git a/src/gui/text/qrawfont.h b/src/gui/text/qrawfont.h index 88ec6cb..d5b5680 100644 --- a/src/gui/text/qrawfont.h +++ b/src/gui/text/qrawfont.h @@ -122,7 +122,7 @@ public: QFont::HintingPreference hintingPreference); bool supportsCharacter(quint32 ucs4) const; - bool supportsCharacter(const QChar &character) const; + bool supportsCharacter(QChar character) const; QList supportedWritingSystems() const; QByteArray fontTable(const char *tagName) const; -- cgit v0.12