diff options
author | Paul Olav Tvete <paul.tvete@theqtcompany.com> | 2015-06-09 13:59:07 +0200 |
---|---|---|
committer | Paul Olav Tvete <paul.tvete@theqtcompany.com> | 2015-06-09 13:59:07 +0200 |
commit | 0963be63ce741ef6c7585358c3f3b1cb806b66e8 (patch) | |
tree | 6f4964c196b8a52cb15e9efc0388b6a549574460 /src/gui/text | |
parent | 9e6a1351823b3ee3d7e380248f6ef42ff383b014 (diff) | |
parent | eacfbbf64ef90dad8c5cb6b2c812ad64c1100779 (diff) |
Merge remote-tracking branch 'qt/dev' into dev-highdpi
Conflicts:
src/gui/kernel/qsimpledrag.cpp
src/gui/kernel/qwindowsysteminterface.cpp
src/gui/kernel/qwindowsysteminterface_p.h
src/plugins/platforms/xcb/qxcbwindow.cpp
Change-Id: Icd887552ade61d6a2b2527383970f7145aa00faf
Diffstat (limited to 'src/gui/text')
26 files changed, 167 insertions, 87 deletions
diff --git a/src/gui/text/qabstracttextdocumentlayout.cpp b/src/gui/text/qabstracttextdocumentlayout.cpp index 70be92535d..7735fd6b46 100644 --- a/src/gui/text/qabstracttextdocumentlayout.cpp +++ b/src/gui/text/qabstracttextdocumentlayout.cpp @@ -40,6 +40,15 @@ QT_BEGIN_NAMESPACE +QAbstractTextDocumentLayoutPrivate::~QAbstractTextDocumentLayoutPrivate() +{ +} + +QTextObjectInterface::~QTextObjectInterface() +{ + // must be empty until ### Qt 6 +} + /*! \class QAbstractTextDocumentLayout \reentrant diff --git a/src/gui/text/qabstracttextdocumentlayout.h b/src/gui/text/qabstracttextdocumentlayout.h index 27135b0476..68e7a0e4e9 100644 --- a/src/gui/text/qabstracttextdocumentlayout.h +++ b/src/gui/text/qabstracttextdocumentlayout.h @@ -126,7 +126,7 @@ private: class Q_GUI_EXPORT QTextObjectInterface { public: - virtual ~QTextObjectInterface() {} + virtual ~QTextObjectInterface(); virtual QSizeF intrinsicSize(QTextDocument *doc, int posInDocument, const QTextFormat &format) = 0; virtual void drawObject(QPainter *painter, const QRectF &rect, QTextDocument *doc, int posInDocument, const QTextFormat &format) = 0; }; diff --git a/src/gui/text/qabstracttextdocumentlayout_p.h b/src/gui/text/qabstracttextdocumentlayout_p.h index 505135fa4b..a7f28ebf96 100644 --- a/src/gui/text/qabstracttextdocumentlayout_p.h +++ b/src/gui/text/qabstracttextdocumentlayout_p.h @@ -58,13 +58,14 @@ struct QTextObjectHandler }; typedef QHash<int, QTextObjectHandler> HandlerHash; -class QAbstractTextDocumentLayoutPrivate : public QObjectPrivate +class Q_GUI_EXPORT QAbstractTextDocumentLayoutPrivate : public QObjectPrivate { public: Q_DECLARE_PUBLIC(QAbstractTextDocumentLayout) inline QAbstractTextDocumentLayoutPrivate() : paintDevice(0) {} + ~QAbstractTextDocumentLayoutPrivate(); inline void setDocument(QTextDocument *doc) { document = doc; diff --git a/src/gui/text/qfont.h b/src/gui/text/qfont.h index cc78ea7f45..72e4197fc5 100644 --- a/src/gui/text/qfont.h +++ b/src/gui/text/qfont.h @@ -237,7 +237,7 @@ public: operator QVariant() const; bool isCopyOf(const QFont &) const; #ifdef Q_COMPILER_RVALUE_REFS - inline QFont &operator=(QFont &&other) + inline QFont &operator=(QFont &&other) Q_DECL_NOEXCEPT { qSwap(d, other.d); qSwap(resolve_mask, other.resolve_mask); return *this; } #endif diff --git a/src/gui/text/qfontdatabase.cpp b/src/gui/text/qfontdatabase.cpp index 126f0bf3ec..dae4d560a8 100644 --- a/src/gui/text/qfontdatabase.cpp +++ b/src/gui/text/qfontdatabase.cpp @@ -121,6 +121,8 @@ static int getFontWeight(const QString &weightString) return QFont::DemiBold; return QFont::Bold; } + if (s.contains(QLatin1String("thin"))) + return QFont::Thin; if (s.contains(QLatin1String("light"))) return QFont::Light; if (s.contains(QLatin1String("black"))) @@ -346,7 +348,6 @@ struct QtFontFamily populated(false), fixedPitch(false), name(n), count(0), foundries(0) - , askedForFallback(false) { memset(writingSystems, 0, sizeof(writingSystems)); } @@ -364,8 +365,6 @@ struct QtFontFamily int count; QtFontFoundry **foundries; - QStringList fallbackFamilies; - bool askedForFallback; unsigned char writingSystems[QFontDatabase::WritingSystemsCount]; bool matchesFamilyName(const QString &familyName) const; @@ -630,6 +629,7 @@ static void initFontDef(const QtFontDesc &desc, const QFontDef &request, QFontDe } else { fontDef->pixelSize = desc.size->pixelSize; } + fontDef->pointSize = request.pointSize; fontDef->styleHint = request.styleHint; fontDef->styleStrategy = request.styleStrategy; @@ -758,6 +758,7 @@ QString qt_resolveFontFamilyAlias(const QString &alias) static QStringList fallbackFamilies(const QString &family, QFont::Style style, QFont::StyleHint styleHint, QChar::Script script) { + // make sure that the db has all fallback families QStringList retList = QGuiApplicationPrivate::platformIntegration()->fontDatabase()->fallbacksForFamily(family,style,styleHint,script); QFontDatabasePrivate *db = privateDb(); @@ -883,20 +884,13 @@ QFontEngine *loadEngine(int script, const QFontDef &request, QFontEngine *engine = loadSingleEngine(script, request, family, foundry, style, size); Q_ASSERT(!engine || engine->type() != QFontEngine::Multi); if (engine && !(request.styleStrategy & QFont::NoFontMerging) && !engine->symbol) { - // make sure that the db has all fallback families - if (family && !family->askedForFallback) { - QFont::Style fontStyle = QFont::Style(style->key.style); - QFont::StyleHint styleHint = QFont::StyleHint(request.styleHint); - if (styleHint == QFont::AnyStyle && request.fixedPitch) - styleHint = QFont::TypeWriter; - family->fallbackFamilies = fallbackFamilies(family->name, fontStyle, styleHint, QChar::Script(script)); + QStringList fallbacks = request.fallBackFamilies; - family->askedForFallback = true; - } + QFont::StyleHint styleHint = QFont::StyleHint(request.styleHint); + if (styleHint == QFont::AnyStyle && request.fixedPitch) + styleHint = QFont::TypeWriter; - QStringList fallbacks = request.fallBackFamilies; - if (family) - fallbacks += family->fallbackFamilies; + fallbacks += fallbackFamilies(family->name, QFont::Style(style->key.style), styleHint, QChar::Script(script)); QPlatformFontDatabase *pfdb = QGuiApplicationPrivate::platformIntegration()->fontDatabase(); QFontEngineMulti *pfMultiEngine = pfdb->fontEngineMulti(engine, QChar::Script(script)); @@ -2505,9 +2499,7 @@ bool QFontDatabase::supportsThreadedFontRendering() /*! \internal */ -QFontEngine * -QFontDatabase::findFont(int script, const QFontPrivate *fp, - const QFontDef &request, bool multi) +QFontEngine *QFontDatabase::findFont(const QFontDef &request, int script) { QMutexLocker locker(fontDatabaseMutex()); @@ -2515,6 +2507,11 @@ QFontDatabase::findFont(int script, const QFontPrivate *fp, initializeDb(); QFontEngine *engine; + + // Until we specifically asked not to, try looking for Multi font engine + // first, the last '1' indicates that we want Multi font engine instead + // of single ones + bool multi = !(request.styleStrategy & QFont::NoFontMerging); QFontCache::Key key(request, script, multi ? 1 : 0); engine = QFontCache::instance()->findEngine(key); if (engine) { @@ -2529,6 +2526,7 @@ QFontDatabase::findFont(int script, const QFontPrivate *fp, if (qt_enable_test_font && request.family == QLatin1String("__Qt__Box__Engine__")) { engine =new QTestFontEngine(request.pixelSize); engine->fontDef = request; + return engine; } QtFontDesc desc; @@ -2536,24 +2534,14 @@ QFontDatabase::findFont(int script, const QFontPrivate *fp, int index = match(script, request, family_name, foundry_name, &desc, blackListed); if (index >= 0) { engine = loadEngine(script, request, desc.family, desc.foundry, desc.style, desc.size); - if (!engine) + if (engine) + initFontDef(desc, request, &engine->fontDef, multi); + else blackListed.append(index); } else { FM_DEBUG(" NO MATCH FOUND\n"); } - if (engine && engine->type() != QFontEngine::TestFontEngine) { - initFontDef(desc, request, &engine->fontDef, engine->type() == QFontEngine::Multi); - - if (fp) { - QFontDef def = request; - if (def.family.isEmpty()) { - def.family = fp->request.family; - def.family = def.family.left(def.family.indexOf(QLatin1Char(','))); - } - } - } - if (!engine) { if (!request.family.isEmpty()) { QFont::StyleHint styleHint = QFont::StyleHint(request.styleHint); @@ -2583,7 +2571,7 @@ QFontDatabase::findFont(int script, const QFontPrivate *fp, loadDef.family = desc.family->name; engine = loadEngine(script, loadDef, desc.family, desc.foundry, desc.style, desc.size); if (engine) - initFontDef(desc, loadDef, &engine->fontDef, engine->type() == QFontEngine::Multi); + initFontDef(desc, loadDef, &engine->fontDef, multi); else blackListed.append(index); } @@ -2598,12 +2586,6 @@ QFontDatabase::findFont(int script, const QFontPrivate *fp, FM_DEBUG("returning box engine"); } - if (fp && fp->dpi > 0) { - engine->fontDef.pointSize = qreal(double((engine->fontDef.pixelSize * 72) / fp->dpi)); - } else { - engine->fontDef.pointSize = request.pointSize; - } - return engine; } @@ -2671,12 +2653,16 @@ void QFontDatabase::load(const QFontPrivate *d, int script) for (; !fe && it != end; ++it) { req.family = *it; - fe = QFontDatabase::findFont(script, d, req, multi); - if (fe && (fe->type()==QFontEngine::Box) && !req.family.isEmpty()) { - if (fe->ref.load() == 0) - delete fe; - - fe = 0; + fe = QFontDatabase::findFont(req, script); + if (fe) { + if (fe->type() == QFontEngine::Box && !req.family.isEmpty()) { + if (fe->ref.load() == 0) + delete fe; + fe = 0; + } else { + if (d->dpi > 0) + fe->fontDef.pointSize = qreal(double((fe->fontDef.pixelSize * 72) / d->dpi)); + } } // No need to check requested fallback families again diff --git a/src/gui/text/qfontdatabase.h b/src/gui/text/qfontdatabase.h index 6d738d96be..02bc8e8a08 100644 --- a/src/gui/text/qfontdatabase.h +++ b/src/gui/text/qfontdatabase.h @@ -153,7 +153,7 @@ private: static void createDatabase(); static void parseFontName(const QString &name, QString &foundry, QString &family); static QString resolveFontFamilyAlias(const QString &family); - static QFontEngine *findFont(int script, const QFontPrivate *fp, const QFontDef &request, bool multi = false); + static QFontEngine *findFont(const QFontDef &request, int script); static void load(const QFontPrivate *d, int script); friend struct QFontDef; diff --git a/src/gui/text/qfontengine.cpp b/src/gui/text/qfontengine.cpp index b028d868b9..87e6c30afe 100644 --- a/src/gui/text/qfontengine.cpp +++ b/src/gui/text/qfontengine.cpp @@ -1641,7 +1641,7 @@ QFontEngine *QFontEngineMulti::loadEngine(int at) request.styleStrategy |= QFont::NoFontMerging; request.family = fallbackFamilyAt(at - 1); - if (QFontEngine *engine = QFontDatabase::findFont(m_script, /*fontprivate = */0, request, /*multi = */false)) { + if (QFontEngine *engine = QFontDatabase::findFont(request, m_script)) { engine->fontDef = request; return engine; } diff --git a/src/gui/text/qfontengine_ft.cpp b/src/gui/text/qfontengine_ft.cpp index 931c71dc63..37be0afccf 100644 --- a/src/gui/text/qfontengine_ft.cpp +++ b/src/gui/text/qfontengine_ft.cpp @@ -115,7 +115,7 @@ public: QtFreetypeData::~QtFreetypeData() { - for (QHash<QFontEngine::FaceId, QFreetypeFace *>::ConstIterator iter = faces.begin(); iter != faces.end(); ++iter) + for (QHash<QFontEngine::FaceId, QFreetypeFace *>::ConstIterator iter = faces.cbegin(); iter != faces.cend(); ++iter) iter.value()->cleanup(); faces.clear(); FT_Done_FreeType(library); diff --git a/src/gui/text/qfontengine_qpf2.cpp b/src/gui/text/qfontengine_qpf2.cpp index 7e16983b6c..a678b4c8ea 100644 --- a/src/gui/text/qfontengine_qpf2.cpp +++ b/src/gui/text/qfontengine_qpf2.cpp @@ -49,7 +49,7 @@ QT_BEGIN_NAMESPACE //#define DEBUG_HEADER //#define DEBUG_FONTENGINE -static QFontEngineQPF2::TagType tagTypes[QFontEngineQPF2::NumTags] = { +static const QFontEngineQPF2::TagType tagTypes[QFontEngineQPF2::NumTags] = { QFontEngineQPF2::StringType, // FontName QFontEngineQPF2::StringType, // FileName QFontEngineQPF2::UInt32Type, // FileIndex diff --git a/src/gui/text/qfontengineglyphcache.cpp b/src/gui/text/qfontengineglyphcache.cpp new file mode 100644 index 0000000000..f6fdfa3ce3 --- /dev/null +++ b/src/gui/text/qfontengineglyphcache.cpp @@ -0,0 +1,43 @@ +/**************************************************************************** +** +** Copyright (C) 2015 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the QtGui module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL21$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 or version 3 as published by the Free +** Software Foundation and appearing in the file LICENSE.LGPLv21 and +** LICENSE.LGPLv3 included in the packaging of this file. Please review the +** following information to ensure the GNU Lesser General Public License +** requirements will be met: https://www.gnu.org/licenses/lgpl.html and +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** As a special exception, The Qt Company gives you certain additional +** rights. These rights are described in The Qt Company LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include <private/qfontengineglyphcache_p.h> + +QT_BEGIN_NAMESPACE + +// out-of-line to avoid vtable duplication, breaking e.g. RTTI +QFontEngineGlyphCache::~QFontEngineGlyphCache() +{ +} + +QT_END_NAMESPACE diff --git a/src/gui/text/qfontengineglyphcache_p.h b/src/gui/text/qfontengineglyphcache_p.h index 6cf4d2f1ba..def42c22a3 100644 --- a/src/gui/text/qfontengineglyphcache_p.h +++ b/src/gui/text/qfontengineglyphcache_p.h @@ -56,7 +56,7 @@ QT_BEGIN_NAMESPACE -class QFontEngineGlyphCache: public QSharedData +class Q_GUI_EXPORT QFontEngineGlyphCache: public QSharedData { public: QFontEngineGlyphCache(QFontEngine::GlyphFormat format, const QTransform &matrix) : m_format(format), m_transform(matrix) @@ -64,7 +64,7 @@ public: Q_ASSERT(m_format != QFontEngine::Format_None); } - virtual ~QFontEngineGlyphCache() { } + virtual ~QFontEngineGlyphCache(); QFontEngine::GlyphFormat glyphFormat() const { return m_format; } const QTransform &transform() const { return m_transform; } diff --git a/src/gui/text/qfontmetrics.h b/src/gui/text/qfontmetrics.h index 12aa2dadb4..65ec219a99 100644 --- a/src/gui/text/qfontmetrics.h +++ b/src/gui/text/qfontmetrics.h @@ -58,11 +58,12 @@ public: QFontMetrics &operator=(const QFontMetrics &); #ifdef Q_COMPILER_RVALUE_REFS - inline QFontMetrics &operator=(QFontMetrics &&other) + inline QFontMetrics &operator=(QFontMetrics &&other) Q_DECL_NOEXCEPT { qSwap(d, other.d); return *this; } #endif - void swap(QFontMetrics &other) { qSwap(d, other.d); } + void swap(QFontMetrics &other) Q_DECL_NOEXCEPT + { qSwap(d, other.d); } int ascent() const; int descent() const; diff --git a/src/gui/text/qglyphrun.cpp b/src/gui/text/qglyphrun.cpp index e6d6863134..642313d340 100644 --- a/src/gui/text/qglyphrun.cpp +++ b/src/gui/text/qglyphrun.cpp @@ -49,7 +49,6 @@ QT_BEGIN_NAMESPACE \ingroup text \ingroup shared - \mainclass When Qt displays a string of text encoded in Unicode, it will first convert the Unicode points into a list of glyph indexes and a list of positions based on one or more fonts. The Unicode diff --git a/src/gui/text/qrawfont.cpp b/src/gui/text/qrawfont.cpp index 2631cf8d17..d5567e173d 100644 --- a/src/gui/text/qrawfont.cpp +++ b/src/gui/text/qrawfont.cpp @@ -55,7 +55,6 @@ QT_BEGIN_NAMESPACE \ingroup text \ingroup shared - \mainclass \note QRawFont is a low level class. For most purposes QFont is a more appropriate class. diff --git a/src/gui/text/qstatictext.cpp b/src/gui/text/qstatictext.cpp index 38d83c485c..f03895a16e 100644 --- a/src/gui/text/qstatictext.cpp +++ b/src/gui/text/qstatictext.cpp @@ -39,6 +39,10 @@ QT_BEGIN_NAMESPACE +QStaticTextUserData::~QStaticTextUserData() +{ +} + /*! \class QStaticText \brief The QStaticText class enables optimized drawing of text when the text and its layout @@ -49,7 +53,6 @@ QT_BEGIN_NAMESPACE \ingroup multimedia \ingroup text \ingroup shared - \mainclass QStaticText provides a way to cache layout data for a block of text so that it can be drawn more efficiently than by using QPainter::drawText() in which the layout information is diff --git a/src/gui/text/qstatictext_p.h b/src/gui/text/qstatictext_p.h index 088e49e2fc..49ca24d51c 100644 --- a/src/gui/text/qstatictext_p.h +++ b/src/gui/text/qstatictext_p.h @@ -52,7 +52,8 @@ QT_BEGIN_NAMESPACE -class QStaticTextUserData +// ### Qt 6: Unexport again, if QOpenGLStaticTextUserData (the one from QtOpenGL) is gone by then +class Q_GUI_EXPORT QStaticTextUserData { public: enum Type { @@ -61,7 +62,7 @@ public: }; QStaticTextUserData(Type t) : ref(0), type(t) {} - virtual ~QStaticTextUserData() {} + virtual ~QStaticTextUserData(); QAtomicInt ref; Type type; diff --git a/src/gui/text/qsyntaxhighlighter.cpp b/src/gui/text/qsyntaxhighlighter.cpp index 162c646a98..f180a839b7 100644 --- a/src/gui/text/qsyntaxhighlighter.cpp +++ b/src/gui/text/qsyntaxhighlighter.cpp @@ -90,13 +90,13 @@ void QSyntaxHighlighterPrivate::applyFormatChanges() QTextLayout *layout = currentBlock.layout(); - QList<QTextLayout::FormatRange> ranges = layout->additionalFormats(); + QVector<QTextLayout::FormatRange> ranges = layout->formats(); const int preeditAreaStart = layout->preeditAreaPosition(); const int preeditAreaLength = layout->preeditAreaText().length(); if (preeditAreaLength != 0) { - QList<QTextLayout::FormatRange>::Iterator it = ranges.begin(); + QVector<QTextLayout::FormatRange>::Iterator it = ranges.begin(); while (it != ranges.end()) { if (it->start >= preeditAreaStart && it->start + it->length <= preeditAreaStart + preeditAreaLength) { @@ -142,7 +142,7 @@ void QSyntaxHighlighterPrivate::applyFormatChanges() } if (formatsChanged) { - layout->setAdditionalFormats(ranges); + layout->setFormats(ranges); doc->markContentsDirty(currentBlock.position(), currentBlock.length()); } } @@ -329,7 +329,7 @@ void QSyntaxHighlighter::setDocument(QTextDocument *doc) QTextCursor cursor(d->doc); cursor.beginEditBlock(); for (QTextBlock blk = d->doc->begin(); blk.isValid(); blk = blk.next()) - blk.layout()->clearAdditionalFormats(); + blk.layout()->clearFormats(); cursor.endEditBlock(); } d->doc = doc; diff --git a/src/gui/text/qtextdocument.cpp b/src/gui/text/qtextdocument.cpp index d3b70aaf26..3d248f4afc 100644 --- a/src/gui/text/qtextdocument.cpp +++ b/src/gui/text/qtextdocument.cpp @@ -1949,7 +1949,7 @@ void QTextDocument::print(QPagedPaintDevice *printer) const for (QTextBlock srcBlock = firstBlock(), dstBlock = clonedDoc->firstBlock(); srcBlock.isValid() && dstBlock.isValid(); srcBlock = srcBlock.next(), dstBlock = dstBlock.next()) { - dstBlock.layout()->setAdditionalFormats(srcBlock.layout()->additionalFormats()); + dstBlock.layout()->setFormats(srcBlock.layout()->formats()); } QAbstractTextDocumentLayout *layout = doc->documentLayout(); diff --git a/src/gui/text/qtextdocumentlayout.cpp b/src/gui/text/qtextdocumentlayout.cpp index db8a792be7..5864ca0b1a 100644 --- a/src/gui/text/qtextdocumentlayout.cpp +++ b/src/gui/text/qtextdocumentlayout.cpp @@ -504,8 +504,6 @@ public: void layoutBlock(const QTextBlock &bl, int blockPosition, const QTextBlockFormat &blockFormat, QTextLayoutStruct *layoutStruct, int layoutFrom, int layoutTo, const QTextBlockFormat *previousBlockFormat); void layoutFlow(QTextFrame::Iterator it, QTextLayoutStruct *layoutStruct, int layoutFrom, int layoutTo, QFixed width = 0); - void pageBreakInsideTable(QTextTable *table, QTextLayoutStruct *layoutStruct); - void floatMargins(const QFixed &y, const QTextLayoutStruct *layoutStruct, QFixed *left, QFixed *right) const; QFixed findY(QFixed yFrom, const QTextLayoutStruct *layoutStruct, QFixed requiredWidth) const; diff --git a/src/gui/text/qtextengine.cpp b/src/gui/text/qtextengine.cpp index 67a19804a3..187ffa5be7 100644 --- a/src/gui/text/qtextengine.cpp +++ b/src/gui/text/qtextengine.cpp @@ -2571,7 +2571,7 @@ void QTextEngine::setPreeditArea(int position, const QString &preeditText) clearLineData(); } -void QTextEngine::setFormats(const QList<QTextLayout::FormatRange> &formats) +void QTextEngine::setFormats(const QVector<QTextLayout::FormatRange> &formats) { if (formats.isEmpty()) { if (!specialData) @@ -2946,17 +2946,17 @@ QFixed QTextEngine::calculateTabWidth(int item, QFixed x) const namespace { class FormatRangeComparatorByStart { - const QList<QTextLayout::FormatRange> &list; + const QVector<QTextLayout::FormatRange> &list; public: - FormatRangeComparatorByStart(const QList<QTextLayout::FormatRange> &list) : list(list) { } + FormatRangeComparatorByStart(const QVector<QTextLayout::FormatRange> &list) : list(list) { } bool operator()(int a, int b) { return list.at(a).start < list.at(b).start; } }; class FormatRangeComparatorByEnd { - const QList<QTextLayout::FormatRange> &list; + const QVector<QTextLayout::FormatRange> &list; public: - FormatRangeComparatorByEnd(const QList<QTextLayout::FormatRange> &list) : list(list) { } + FormatRangeComparatorByEnd(const QVector<QTextLayout::FormatRange> &list) : list(list) { } bool operator()(int a, int b) { return list.at(a).start + list.at(a).length < list.at(b).start + list.at(b).length; } diff --git a/src/gui/text/qtextengine_p.h b/src/gui/text/qtextengine_p.h index 39b9e0cb5a..3590c6da07 100644 --- a/src/gui/text/qtextengine_p.h +++ b/src/gui/text/qtextengine_p.h @@ -570,9 +570,9 @@ public: inline bool hasFormats() const { return block.docHandle() || (specialData && !specialData->formats.isEmpty()); } - inline QList<QTextLayout::FormatRange> formats() const - { return specialData ? specialData->formats : QList<QTextLayout::FormatRange>(); } - void setFormats(const QList<QTextLayout::FormatRange> &formats); + inline QVector<QTextLayout::FormatRange> formats() const + { return specialData ? specialData->formats : QVector<QTextLayout::FormatRange>(); } + void setFormats(const QVector<QTextLayout::FormatRange> &formats); private: static void init(QTextEngine *e); @@ -580,7 +580,7 @@ private: struct SpecialData { int preeditPosition; QString preeditText; - QList<QTextLayout::FormatRange> formats; + QVector<QTextLayout::FormatRange> formats; QVector<QTextCharFormat> resolvedFormats; // only used when no docHandle is available QScopedPointer<QTextFormatCollection> formatCollection; diff --git a/src/gui/text/qtextlayout.cpp b/src/gui/text/qtextlayout.cpp index 7da3e84041..c42054c07c 100644 --- a/src/gui/text/qtextlayout.cpp +++ b/src/gui/text/qtextlayout.cpp @@ -69,7 +69,7 @@ QT_BEGIN_NAMESPACE for a specified area in the text layout's content. \inmodule QtGui - \sa QTextLayout::setAdditionalFormats(), QTextLayout::draw() + \sa QTextLayout::setFormats(), QTextLayout::draw() */ /*! @@ -485,7 +485,6 @@ QString QTextLayout::preeditAreaText() const return d->preeditAreaText(); } - /*! Sets the additional formats supported by the text layout to \a formatList. The formats are applied with preedit area text in place. @@ -494,7 +493,20 @@ QString QTextLayout::preeditAreaText() const */ void QTextLayout::setAdditionalFormats(const QList<FormatRange> &formatList) { - d->setFormats(formatList); + setFormats(formatList.toVector()); +} + +/*! + \since 5.6 + + Sets the additional formats supported by the text layout to \a formats. + The formats are applied with preedit area text in place. + + \sa formats(), clearFormats() +*/ +void QTextLayout::setFormats(const QVector<FormatRange> &formats) +{ + d->setFormats(formats); if (d->block.docHandle()) d->block.docHandle()->documentChange(d->block.position(), d->block.length()); @@ -507,6 +519,18 @@ void QTextLayout::setAdditionalFormats(const QList<FormatRange> &formatList) */ QList<QTextLayout::FormatRange> QTextLayout::additionalFormats() const { + return formats().toList(); +} + +/*! + \since 5.6 + + Returns the list of additional formats supported by the text layout. + + \sa setFormats(), clearFormats() +*/ +QVector<QTextLayout::FormatRange> QTextLayout::formats() const +{ return d->formats(); } @@ -517,7 +541,19 @@ QList<QTextLayout::FormatRange> QTextLayout::additionalFormats() const */ void QTextLayout::clearAdditionalFormats() { - setAdditionalFormats(QList<FormatRange>()); + clearFormats(); +} + +/*! + \since 5.6 + + Clears the list of additional formats supported by the text layout. + + \sa formats(), setFormats() +*/ +void QTextLayout::clearFormats() +{ + setFormats(QVector<FormatRange>()); } /*! diff --git a/src/gui/text/qtextlayout.h b/src/gui/text/qtextlayout.h index 47dcd388e2..9709af4fd1 100644 --- a/src/gui/text/qtextlayout.h +++ b/src/gui/text/qtextlayout.h @@ -125,10 +125,18 @@ public: int start; int length; QTextCharFormat format; + + friend bool operator==(const FormatRange &lhs, const FormatRange &rhs) + { return lhs.start == rhs.start && lhs.length == rhs.length && lhs.format == rhs.format; } + friend bool operator!=(const FormatRange &lhs, const FormatRange &rhs) + { return !operator==(lhs, rhs); } }; void setAdditionalFormats(const QList<FormatRange> &overrides); QList<FormatRange> additionalFormats() const; void clearAdditionalFormats(); + void setFormats(const QVector<FormatRange> &overrides); + QVector<FormatRange> formats() const; + void clearFormats(); void setCacheEnabled(bool enable); bool cacheEnabled() const; diff --git a/src/gui/text/qtexttable.cpp b/src/gui/text/qtexttable.cpp index e5acccb55b..a75a1aae54 100644 --- a/src/gui/text/qtexttable.cpp +++ b/src/gui/text/qtexttable.cpp @@ -1264,12 +1264,6 @@ int QTextTable::columns() const return d->nCols; } -#if 0 -void QTextTable::mergeCells(const QTextCursor &selection) -{ -} -#endif - /*! \fn QTextCursor QTextTable::rowStart(const QTextCursor &cursor) const diff --git a/src/gui/text/qzip.cpp b/src/gui/text/qzip.cpp index 9f561dcb02..edd3447357 100644 --- a/src/gui/text/qzip.cpp +++ b/src/gui/text/qzip.cpp @@ -670,7 +670,7 @@ void QZipReaderPrivate::scanFiles() void QZipWriterPrivate::addEntry(EntryType type, const QString &fileName, const QByteArray &contents/*, QFile::Permissions permissions, QZip::Method m*/) { #ifndef NDEBUG - static const char *entryTypes[] = { + static const char *const entryTypes[] = { "directory", "file ", "symlink " }; diff --git a/src/gui/text/text.pri b/src/gui/text/text.pri index 61e239f678..be60ba72cc 100644 --- a/src/gui/text/text.pri +++ b/src/gui/text/text.pri @@ -21,6 +21,7 @@ HEADERS += \ text/qtextdocument_p.h \ text/qtexthtmlparser_p.h \ text/qabstracttextdocumentlayout.h \ + text/qabstracttextdocumentlayout_p.h \ text/qtextdocumentlayout_p.h \ text/qtextcursor.h \ text/qtextcursor_p.h \ @@ -47,6 +48,7 @@ HEADERS += \ SOURCES += \ text/qfont.cpp \ text/qfontengine.cpp \ + text/qfontengineglyphcache.cpp \ text/qfontsubset.cpp \ text/qfontmetrics.cpp \ text/qfontdatabase.cpp \ |