summaryrefslogtreecommitdiffstats
path: root/src/gui/text
diff options
context:
space:
mode:
authorLars Knoll <lars.knoll@nokia.com>2012-04-16 12:04:34 +0200
committerLars Knoll <lars.knoll@nokia.com>2012-04-16 12:04:34 +0200
commit9bd032355163d92cda5e7e59ecd21214b131f187 (patch)
tree002fa12558505683143c7eb08949a3d225bf0712 /src/gui/text
parentd037d25c3d5236623371cf051aaf6a9e59792ba7 (diff)
parent41673c45dde2eb95ee21dd918235218399f2be2c (diff)
Merge remote-tracking branch 'origin/master' into api_changes
Conflicts: configure src/corelib/io/qurl.cpp src/gui/kernel/qwindow.cpp src/tools/moc/generator.cpp src/widgets/kernel/qwidget_qpa.cpp src/widgets/styles/qstyle.h src/widgets/widgets/qtabbar.cpp tests/auto/corelib/codecs/utf8/tst_utf8.cpp Change-Id: Ia457228d6f684ec8184e13e8fcc9d25857b1751e
Diffstat (limited to 'src/gui/text')
-rw-r--r--src/gui/text/qfont_qpa.cpp35
-rw-r--r--src/gui/text/qfontdatabase.cpp22
-rw-r--r--src/gui/text/qfontdatabase.h5
-rw-r--r--src/gui/text/qfontdatabase_qpa.cpp6
-rw-r--r--src/gui/text/qplatformfontdatabase_qpa.cpp29
-rw-r--r--src/gui/text/qplatformfontdatabase_qpa.h2
-rw-r--r--src/gui/text/qtextengine.cpp2
-rw-r--r--src/gui/text/qtextformat.cpp2
-rw-r--r--src/gui/text/qtexthtmlparser.cpp2
-rw-r--r--src/gui/text/qtextoption.cpp4
-rw-r--r--src/gui/text/qtextoption.h4
11 files changed, 59 insertions, 54 deletions
diff --git a/src/gui/text/qfont_qpa.cpp b/src/gui/text/qfont_qpa.cpp
index 6576f237c4..b73b03025b 100644
--- a/src/gui/text/qfont_qpa.cpp
+++ b/src/gui/text/qfont_qpa.cpp
@@ -75,35 +75,12 @@ void QFont::setRawName(const QString &)
QString QFont::defaultFamily() const
{
- QString familyName;
- switch(d->request.styleHint) {
- case QFont::SansSerif:
- familyName = QString::fromLatin1("sans-serif");
- break;
- case QFont::Serif:
- familyName = QString::fromLatin1("serif");
- break;
- case QFont::TypeWriter:
- case QFont::Monospace:
- familyName = QString::fromLatin1("monospace");
- break;
- case QFont::Cursive:
- familyName = QString::fromLatin1("cursive");
- break;
- case QFont::Fantasy:
- familyName = QString::fromLatin1("fantasy");
- break;
- case QFont::Decorative:
- familyName = QString::fromLatin1("decorative");
- break;
- case QFont::System:
- default:
- familyName = QString();
- break;
- }
-
- return QGuiApplicationPrivate::platformIntegration()->fontDatabase()->resolveFontFamilyAlias(familyName);
-
+ QPlatformFontDatabase *fontDB = QGuiApplicationPrivate::platformIntegration()->fontDatabase();
+ const QStringList fallbacks = fontDB->fallbacksForFamily(QString(), QFont::StyleNormal
+ , QFont::StyleHint(d->request.styleHint), QUnicodeTables::Common);
+ if (!fallbacks.isEmpty())
+ return fallbacks.first();
+ return QString();
}
QString QFont::lastResortFamily() const
diff --git a/src/gui/text/qfontdatabase.cpp b/src/gui/text/qfontdatabase.cpp
index 468d029cf2..a1af856992 100644
--- a/src/gui/text/qfontdatabase.cpp
+++ b/src/gui/text/qfontdatabase.cpp
@@ -735,12 +735,13 @@ static void initFontDef(const QtFontDesc &desc, const QFontDef &request, QFontDe
fontDef->family += QLatin1Char(']');
}
- if (desc.style->smoothScalable)
+ if (desc.style->smoothScalable
+ || QGuiApplicationPrivate::platformIntegration()->fontDatabase()->fontsAlwaysScalable()
+ || (desc.style->bitmapScalable && (request.styleStrategy & QFont::PreferMatch))) {
fontDef->pixelSize = request.pixelSize;
- else if ((desc.style->bitmapScalable && (request.styleStrategy & QFont::PreferMatch)))
- fontDef->pixelSize = request.pixelSize;
- else
+ } else {
fontDef->pixelSize = desc.size->pixelSize;
+ }
fontDef->styleHint = request.styleHint;
fontDef->styleStrategy = request.styleStrategy;
@@ -1534,6 +1535,9 @@ bool QFontDatabase::isScalable(const QString &family,
QList<int> QFontDatabase::pointSizes(const QString &family,
const QString &styleName)
{
+ if (QGuiApplicationPrivate::platformIntegration()->fontDatabase()->fontsAlwaysScalable())
+ return standardSizes();
+
bool smoothScalable = false;
QString familyName, foundryName;
parseFontName(family, foundryName, familyName);
@@ -1634,6 +1638,9 @@ QFont QFontDatabase::font(const QString &family, const QString &style,
QList<int> QFontDatabase::smoothSizes(const QString &family,
const QString &styleName)
{
+ if (QGuiApplicationPrivate::platformIntegration()->fontDatabase()->fontsAlwaysScalable())
+ return standardSizes();
+
bool smoothScalable = false;
QString familyName, foundryName;
parseFontName(family, foundryName, familyName);
@@ -1689,12 +1696,7 @@ QList<int> QFontDatabase::smoothSizes(const QString &family,
*/
QList<int> QFontDatabase::standardSizes()
{
- QList<int> ret;
- static const unsigned short standard[] =
- { 6, 7, 8, 9, 10, 11, 12, 14, 16, 18, 20, 22, 24, 26, 28, 36, 48, 72, 0 };
- const unsigned short *sizes = standard;
- while (*sizes) ret << *sizes++;
- return ret;
+ return QGuiApplicationPrivate::platformIntegration()->fontDatabase()->standardSizes();
}
diff --git a/src/gui/text/qfontdatabase.h b/src/gui/text/qfontdatabase.h
index b30f7da48d..f0830f2a41 100644
--- a/src/gui/text/qfontdatabase.h
+++ b/src/gui/text/qfontdatabase.h
@@ -46,8 +46,6 @@
#include <QtCore/qstring.h>
#include <QtGui/qfont.h>
-class tst_QFont;
-
QT_BEGIN_HEADER
QT_BEGIN_NAMESPACE
@@ -162,9 +160,6 @@ private:
friend class QFontEngineMultiXLFD;
friend class QFontEngineMultiQWS;
friend class QFontEngineMultiQPA;
-#ifdef QT_BUILD_INTERNAL
- friend class ::tst_QFont;
-#endif
QFontDatabasePrivate *d;
};
diff --git a/src/gui/text/qfontdatabase_qpa.cpp b/src/gui/text/qfontdatabase_qpa.cpp
index 0014efc450..c2a3aa9722 100644
--- a/src/gui/text/qfontdatabase_qpa.cpp
+++ b/src/gui/text/qfontdatabase_qpa.cpp
@@ -161,9 +161,12 @@ QFontEngine *loadSingleEngine(int script,
Q_UNUSED(foundry);
Q_ASSERT(size);
+ QPlatformFontDatabase *pfdb = QGuiApplicationPrivate::platformIntegration()->fontDatabase();
int pixelSize = size->pixelSize;
- if (!pixelSize || (style->smoothScalable && pixelSize == SMOOTH_SCALABLE))
+ if (!pixelSize || (style->smoothScalable && pixelSize == SMOOTH_SCALABLE)
+ || pfdb->fontsAlwaysScalable()) {
pixelSize = request.pixelSize;
+ }
QFontDef def = request;
def.pixelSize = pixelSize;
@@ -171,7 +174,6 @@ QFontEngine *loadSingleEngine(int script,
QFontCache::Key key(def,script);
QFontEngine *engine = QFontCache::instance()->findEngine(key);
if (!engine) {
- QPlatformFontDatabase *pfdb = QGuiApplicationPrivate::platformIntegration()->fontDatabase();
engine = pfdb->fontEngine(def,QUnicodeTables::Script(script),size->handle);
if (engine) {
QFontCache::Key key(def,script);
diff --git a/src/gui/text/qplatformfontdatabase_qpa.cpp b/src/gui/text/qplatformfontdatabase_qpa.cpp
index 6af0398f00..f6d82802f7 100644
--- a/src/gui/text/qplatformfontdatabase_qpa.cpp
+++ b/src/gui/text/qplatformfontdatabase_qpa.cpp
@@ -385,6 +385,35 @@ QString QPlatformFontDatabase::resolveFontFamilyAlias(const QString &family) con
}
/*!
+ Return true if all fonts are considered scalable when using this font database.
+ Defaults to false.
+
+ \since 5.0
+ */
+
+bool QPlatformFontDatabase::fontsAlwaysScalable() const
+{
+ return false;
+}
+
+/*!
+ Return list of standard font sizes when using this font database.
+
+ \since 5.0
+ */
+
+ QList<int> QPlatformFontDatabase::standardSizes() const
+{
+ QList<int> ret;
+ static const unsigned short standard[] =
+ { 6, 7, 8, 9, 10, 11, 12, 14, 16, 18, 20, 22, 24, 26, 28, 36, 48, 72, 0 };
+ ret.reserve(int(sizeof(standard) / sizeof(standard[0])));
+ const unsigned short *sizes = standard;
+ while (*sizes) ret << *sizes++;
+ return ret;
+}
+
+/*!
\class QPlatformFontDatabase
\brief The QPlatformFontDatabase class makes it possible to customize how fonts
are discovered and how they are rendered
diff --git a/src/gui/text/qplatformfontdatabase_qpa.h b/src/gui/text/qplatformfontdatabase_qpa.h
index 3810b75dbf..9fe3b0380d 100644
--- a/src/gui/text/qplatformfontdatabase_qpa.h
+++ b/src/gui/text/qplatformfontdatabase_qpa.h
@@ -102,6 +102,8 @@ public:
virtual QFont defaultFont() const;
virtual QString resolveFontFamilyAlias(const QString &family) const;
+ virtual bool fontsAlwaysScalable() const;
+ virtual QList<int> standardSizes() const;
//callback
static void registerQPF2Font(const QByteArray &dataArray, void *handle);
diff --git a/src/gui/text/qtextengine.cpp b/src/gui/text/qtextengine.cpp
index c5c6b2e621..793ea4aa9e 100644
--- a/src/gui/text/qtextengine.cpp
+++ b/src/gui/text/qtextengine.cpp
@@ -2185,7 +2185,7 @@ int QTextEngine::formatIndex(const QScriptItem *si) const
int pos = si->position;
if (specialData && si->position >= specialData->preeditPosition) {
if (si->position < specialData->preeditPosition + specialData->preeditText.length())
- pos = qMax(specialData->preeditPosition - 1, 0);
+ pos = qMax(qMin(block.length(), specialData->preeditPosition) - 1, 0);
else
pos -= specialData->preeditText.length();
}
diff --git a/src/gui/text/qtextformat.cpp b/src/gui/text/qtextformat.cpp
index a7e68a41c2..9a38b1f0b2 100644
--- a/src/gui/text/qtextformat.cpp
+++ b/src/gui/text/qtextformat.cpp
@@ -3010,7 +3010,6 @@ QTextImageFormat::QTextImageFormat(const QTextFormat &fmt)
*/
-// ### Qt5 qreal replace with a QTextLength
/*!
\fn qreal QTextImageFormat::width() const
@@ -3029,7 +3028,6 @@ QTextImageFormat::QTextImageFormat(const QTextFormat &fmt)
*/
-// ### Qt5 qreal replace with a QTextLength
/*!
\fn qreal QTextImageFormat::height() const
diff --git a/src/gui/text/qtexthtmlparser.cpp b/src/gui/text/qtexthtmlparser.cpp
index da08c4e468..7005fca902 100644
--- a/src/gui/text/qtexthtmlparser.cpp
+++ b/src/gui/text/qtexthtmlparser.cpp
@@ -1051,7 +1051,7 @@ void QTextHtmlParserNode::initializeProperties(const QTextHtmlParserNode *parent
&& !attributes.at(i + 1).isEmpty()) {
hasHref = true;
charFormat.setUnderlineStyle(QTextCharFormat::SingleUnderline);
- charFormat.setForeground(Qt::blue); // ### Qt5: QApplication::palette().link());
+ charFormat.setForeground(Qt::blue);
}
}
diff --git a/src/gui/text/qtextoption.cpp b/src/gui/text/qtextoption.cpp
index b3b4c90d79..25760de0dc 100644
--- a/src/gui/text/qtextoption.cpp
+++ b/src/gui/text/qtextoption.cpp
@@ -145,7 +145,7 @@ QTextOption &QTextOption::operator=(const QTextOption &o)
\sa tabArray(), setTabStop(), setTabs()
*/
-void QTextOption::setTabArray(QList<qreal> tabStops) // Qt5: const ref
+void QTextOption::setTabArray(const QList<qreal> &tabStops)
{
if (!d)
d = new QTextOptionPrivate;
@@ -165,7 +165,7 @@ void QTextOption::setTabArray(QList<qreal> tabStops) // Qt5: const ref
\sa tabStops()
*/
-void QTextOption::setTabs(QList<QTextOption::Tab> tabStops) // Qt5: const ref
+void QTextOption::setTabs(const QList<QTextOption::Tab> &tabStops)
{
if (!d)
d = new QTextOptionPrivate;
diff --git a/src/gui/text/qtextoption.h b/src/gui/text/qtextoption.h
index 96a0cdda9b..44dc79e255 100644
--- a/src/gui/text/qtextoption.h
+++ b/src/gui/text/qtextoption.h
@@ -122,10 +122,10 @@ public:
inline void setTabStop(qreal tabStop);
inline qreal tabStop() const { return tab; }
- void setTabArray(QList<qreal> tabStops);
+ void setTabArray(const QList<qreal> &tabStops);
QList<qreal> tabArray() const;
- void setTabs(QList<Tab> tabStops);
+ void setTabs(const QList<Tab> &tabStops);
QList<Tab> tabs() const;
void setUseDesignMetrics(bool b) { design = b; }