diff options
Diffstat (limited to 'src/gui/text/qtextengine_p.h')
-rw-r--r-- | src/gui/text/qtextengine_p.h | 76 |
1 files changed, 23 insertions, 53 deletions
diff --git a/src/gui/text/qtextengine_p.h b/src/gui/text/qtextengine_p.h index 6ae3196963..c01d3a0711 100644 --- a/src/gui/text/qtextengine_p.h +++ b/src/gui/text/qtextengine_p.h @@ -1,41 +1,5 @@ -/**************************************************************************** -** -** Copyright (C) 2016 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the QtGui module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** 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 https://www.qt.io/terms-conditions. For further -** information use the contact form at https://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 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or (at your option) the GNU General -** Public license version 3 or any later version approved by the KDE Free -** Qt Foundation. The licenses are as published by the Free Software -** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 -** included in the packaging of this file. Please review the following -** information to ensure the GNU General Public License requirements will -** be met: https://www.gnu.org/licenses/gpl-2.0.html and -** https://www.gnu.org/licenses/gpl-3.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ +// Copyright (C) 2016 The Qt Company Ltd. +// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only #ifndef QTEXTENGINE_P_H #define QTEXTENGINE_P_H @@ -62,6 +26,7 @@ #include "QtCore/qlist.h" #include "QtCore/qnamespace.h" #include "QtCore/qset.h" +#include <QtCore/qspan.h> #include "QtCore/qstring.h" #include "QtCore/qvarlengtharray.h" @@ -194,10 +159,8 @@ Q_DECLARE_TYPEINFO(QGlyphAttributes, Q_PRIMITIVE_TYPE); struct QGlyphLayout { - enum { - SpaceNeeded = sizeof(glyph_t) + sizeof(QFixed) + sizeof(QFixedPoint) - + sizeof(QGlyphAttributes) + sizeof(QGlyphJustification) - }; + static constexpr qsizetype SpaceNeeded = sizeof(glyph_t) + sizeof(QFixed) + sizeof(QFixedPoint) + + sizeof(QGlyphAttributes) + sizeof(QGlyphJustification); // init to 0 not needed, done when shaping QFixedPoint *offsets; // 8 bytes per element @@ -213,7 +176,7 @@ struct QGlyphLayout inline explicit QGlyphLayout(char *address, int totalGlyphs) { offsets = reinterpret_cast<QFixedPoint *>(address); - int offset = totalGlyphs * sizeof(QFixedPoint); + qsizetype offset = totalGlyphs * sizeof(QFixedPoint); glyphs = reinterpret_cast<glyph_t *>(address + offset); offset += totalGlyphs * sizeof(glyph_t); advances = reinterpret_cast<QFixed *>(address + offset); @@ -246,7 +209,7 @@ struct QGlyphLayout last = numGlyphs; if (first == 0 && last == numGlyphs && reinterpret_cast<char *>(offsets + numGlyphs) == reinterpret_cast<char *>(glyphs)) { - memset(static_cast<void *>(offsets), 0, (numGlyphs * SpaceNeeded)); + memset(static_cast<void *>(offsets), 0, qsizetype(numGlyphs) * SpaceNeeded); } else { const int num = last - first; memset(static_cast<void *>(offsets + first), 0, num * sizeof(QFixedPoint)); @@ -261,6 +224,7 @@ struct QGlyphLayout return reinterpret_cast<char *>(offsets); } + void copy(QGlyphLayout *other); void grow(char *address, int totalGlyphs); }; @@ -407,12 +371,12 @@ public: LayoutFailed }; struct Q_GUI_EXPORT LayoutData { - LayoutData(const QString &str, void **stack_memory, int mem_size); + LayoutData(const QString &str, void **stack_memory, qsizetype mem_size); LayoutData(); ~LayoutData(); mutable QScriptItemArray items; - int allocated; - int available_glyphs; + qsizetype allocated; + qsizetype available_glyphs; void **memory; unsigned short *logClustersPtr; QGlyphLayout glyphLayout; @@ -421,6 +385,7 @@ public: uint layoutState : 2; uint memory_on_stack : 1; uint haveCharAttributes : 1; + QFixed currentMaxWidth; QString string; bool reallocate(int totalGlyphs); }; @@ -470,14 +435,14 @@ public: const QScriptItem &si = layoutData->items[item]; int from = si.position; item++; - return (item < layoutData->items.size() ? layoutData->items[item].position : layoutData->string.length()) - from; + return (item < layoutData->items.size() ? layoutData->items[item].position : layoutData->string.size()) - from; } int length(const QScriptItem *si) const { int end; if (si + 1 < layoutData->items.constData()+ layoutData->items.size()) end = (si+1)->position; else - end = layoutData->string.length(); + end = layoutData->string.size(); return end - si->position; } @@ -622,7 +587,7 @@ private: public: bool atWordSeparator(int position) const; - QString elidedText(Qt::TextElideMode mode, const QFixed &width, int flags = 0, int from = 0, int count = -1) const; + QString elidedText(Qt::TextElideMode mode, QFixed width, int flags = 0, int from = 0, int count = -1) const; void shapeLine(const QScriptLine &line); QFixed leadingSpaceWidth(const QScriptLine &line); @@ -656,9 +621,14 @@ private: void addRequiredBoundaries() const; void shapeText(int item) const; #if QT_CONFIG(harfbuzz) - int shapeTextWithHarfbuzzNG(const QScriptItem &si, const ushort *string, int itemLength, - QFontEngine *fontEngine, const QList<uint> &itemBoundaries, - bool kerningEnabled, bool hasLetterSpacing) const; + int shapeTextWithHarfbuzzNG(const QScriptItem &si, + const ushort *string, + int itemLength, + QFontEngine *fontEngine, + QSpan<uint> itemBoundaries, + bool kerningEnabled, + bool hasLetterSpacing, + const QHash<QFont::Tag, quint32> &features) const; #endif int endOfLine(int lineNum); |