diff options
Diffstat (limited to 'src/quick/items/qquicktextnodeengine.cpp')
| -rw-r--r-- | src/quick/items/qquicktextnodeengine.cpp | 19 |
1 files changed, 18 insertions, 1 deletions
diff --git a/src/quick/items/qquicktextnodeengine.cpp b/src/quick/items/qquicktextnodeengine.cpp index 3358ae1ba6..cd641a742d 100644 --- a/src/quick/items/qquicktextnodeengine.cpp +++ b/src/quick/items/qquicktextnodeengine.cpp @@ -58,6 +58,8 @@ QT_BEGIN_NAMESPACE +Q_DECLARE_LOGGING_CATEGORY(lcSgText) + QQuickTextNodeEngine::BinaryTreeNodeKey::BinaryTreeNodeKey(BinaryTreeNode *node) : fontEngine(QRawFontPrivate::get(node->glyphRun.rawFont())->fontEngine) , clipNode(node->clipNode) @@ -980,7 +982,17 @@ void QQuickTextNodeEngine::mergeFormats(QTextLayout *textLayout, QVarLengthArray } -void QQuickTextNodeEngine::addTextBlock(QTextDocument *textDocument, const QTextBlock &block, const QPointF &position, const QColor &textColor, const QColor &anchorColor, int selectionStart, int selectionEnd) +/*! + \internal + Adds the \a block from the \a textDocument at \a position if its + \l {QAbstractTextDocumentLayout::blockBoundingRect()}{bounding rect} + intersects the \a viewport, or if \c viewport is not valid + (i.e. use a default-constructed QRectF to skip the viewport check). + + \sa QQuickItem::clipRect() + */ +void QQuickTextNodeEngine::addTextBlock(QTextDocument *textDocument, const QTextBlock &block, const QPointF &position, + const QColor &textColor, const QColor &anchorColor, int selectionStart, int selectionEnd, const QRectF &viewport) { Q_ASSERT(textDocument); #if QT_CONFIG(im) @@ -995,6 +1007,11 @@ void QQuickTextNodeEngine::addTextBlock(QTextDocument *textDocument, const QText const QTextCharFormat charFormat = block.charFormat(); const QRectF blockBoundingRect = textDocument->documentLayout()->blockBoundingRect(block).translated(position); + if (viewport.isValid()) { + if (!blockBoundingRect.intersects(viewport)) + return; + qCDebug(lcSgText) << "adding block with length" << block.length() << ':' << blockBoundingRect << "in viewport" << viewport; + } if (charFormat.background().style() != Qt::NoBrush) m_backgrounds.append(qMakePair(blockBoundingRect, charFormat.background().color())); |
