summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/gui/text/qfontengine_p.h12
-rw-r--r--src/gui/text/qfontmetrics.cpp6
-rw-r--r--src/gui/text/qrawfont.cpp10
-rw-r--r--src/gui/text/qrawfont.h2
4 files changed, 19 insertions, 11 deletions
diff --git a/src/gui/text/qfontengine_p.h b/src/gui/text/qfontengine_p.h
index 4741de3000..bcf763d5d9 100644
--- a/src/gui/text/qfontengine_p.h
+++ b/src/gui/text/qfontengine_p.h
@@ -225,6 +225,18 @@ public:
virtual const char *name() const = 0;
virtual bool canRender(const QChar *string, int len) = 0;
+ inline bool canRender(uint ucs4) {
+ QChar utf16[2];
+ int utf16len = 1;
+ if (QChar::requiresSurrogates(ucs4)) {
+ utf16[0] = QChar::highSurrogate(ucs4);
+ utf16[1] = QChar::lowSurrogate(ucs4);
+ ++utf16len;
+ } else {
+ utf16[0] = QChar(ucs4);
+ }
+ return canRender(utf16, utf16len);
+ }
virtual Type type() const = 0;
diff --git a/src/gui/text/qfontmetrics.cpp b/src/gui/text/qfontmetrics.cpp
index 83d51e2e71..e5ddcb80d5 100644
--- a/src/gui/text/qfontmetrics.cpp
+++ b/src/gui/text/qfontmetrics.cpp
@@ -413,8 +413,7 @@ 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());
+ return engine->canRender(ucs4);
}
/*!
@@ -1274,8 +1273,7 @@ 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());
+ return engine->canRender(ucs4);
}
/*!
diff --git a/src/gui/text/qrawfont.cpp b/src/gui/text/qrawfont.cpp
index 3bd4d88872..ae14f1c798 100644
--- a/src/gui/text/qrawfont.cpp
+++ b/src/gui/text/qrawfont.cpp
@@ -620,17 +620,15 @@ bool QRawFont::supportsCharacter(QChar character) const
}
/*!
+ \overload
+
Returns true if the font has a glyph that corresponds to the UCS-4 encoded character \a ucs4.
\sa supportedWritingSystems()
*/
-bool QRawFont::supportsCharacter(quint32 ucs4) const
+bool QRawFont::supportsCharacter(uint ucs4) const
{
- if (!d->isValid())
- return false;
-
- QString str = QString::fromUcs4(&ucs4, 1);
- return d->fontEngine->canRender(str.constData(), str.size());
+ return d->isValid() && d->fontEngine->canRender(ucs4);
}
// qfontdatabase.cpp
diff --git a/src/gui/text/qrawfont.h b/src/gui/text/qrawfont.h
index bc5f6621c8..870e714340 100644
--- a/src/gui/text/qrawfont.h
+++ b/src/gui/text/qrawfont.h
@@ -126,7 +126,7 @@ public:
qreal pixelSize,
QFont::HintingPreference hintingPreference);
- bool supportsCharacter(quint32 ucs4) const;
+ bool supportsCharacter(uint ucs4) const;
bool supportsCharacter(QChar character) const;
QList<QFontDatabase::WritingSystem> supportedWritingSystems() const;