Editor: Add replacement helper to document layout

More inline with the other text block user data members and cleaner on
the client side. Additionally add some & for const arguments and remove
test function call.

Change-Id: I19e646aa204eedf447c02a2f76b89c3430280169
Reviewed-by: hjk <hjk@qt.io>
This commit is contained in:
David Schulz
2023-02-01 14:21:51 +01:00
parent 8cb654a3ee
commit 6908130c83
5 changed files with 52 additions and 57 deletions

View File

@@ -345,7 +345,7 @@ void TextBlockUserData::setCodeFormatterData(CodeFormatterData *data)
m_codeFormatterData = data;
}
void TextBlockUserData::setReplacement(const QString replacement)
void TextBlockUserData::setReplacement(const QString &replacement)
{
m_replacement.reset(new QTextDocument(replacement));
m_replacement->setDocumentLayout(new TextDocumentLayout(m_replacement.get()));
@@ -528,30 +528,32 @@ QByteArray TextDocumentLayout::expectedRawStringSuffix(const QTextBlock &block)
void TextDocumentLayout::updateReplacmentFormats(const QTextBlock &block,
const FontSettings &fontSettings)
{
if (TextBlockUserData *userData = textUserData(block)) {
if (QTextDocument *replacement = userData->replacement()) {
const QTextCharFormat replacementFormat = fontSettings.toTextCharFormat(
TextStyles{C_TEXT, {C_DISABLED_CODE}});
QTextCursor cursor(replacement);
cursor.select(QTextCursor::Document);
cursor.setCharFormat(fontSettings.toTextCharFormat(C_TEXT));
cursor.setPosition(block.length() - 1);
cursor.movePosition(QTextCursor::End, QTextCursor::KeepAnchor);
cursor.setCharFormat(replacementFormat);
replacement->firstBlock().layout()->setFormats(block.layout()->formats());
}
if (QTextDocument *replacement = replacementDocument(block)) {
const QTextCharFormat replacementFormat = fontSettings.toTextCharFormat(
TextStyles{C_TEXT, {C_DISABLED_CODE}});
QTextCursor cursor(replacement);
cursor.select(QTextCursor::Document);
cursor.setCharFormat(fontSettings.toTextCharFormat(C_TEXT));
cursor.setPosition(block.length() - 1);
cursor.movePosition(QTextCursor::End, QTextCursor::KeepAnchor);
cursor.setCharFormat(replacementFormat);
replacement->firstBlock().layout()->setFormats(block.layout()->formats());
}
}
QString TextDocumentLayout::replacement(const QTextBlock &block)
{
if (TextBlockUserData *userData = textUserData(block)) {
if (QTextDocument *replacement = userData->replacement())
return replacement->toPlainText().mid(block.length() - 1);
}
if (QTextDocument *replacement = replacementDocument(block))
return replacement->toPlainText().mid(block.length() - 1);
return {};
}
QTextDocument *TextDocumentLayout::replacementDocument(const QTextBlock &block)
{
TextBlockUserData *userData = textUserData(block);
return userData ? userData->replacement() : nullptr;
}
void TextDocumentLayout::requestExtraAreaUpdate()
{
emit updateExtraArea();
@@ -682,10 +684,8 @@ static QRectF replacementBoundingRect(const QTextDocument *replacement)
QRectF TextDocumentLayout::blockBoundingRect(const QTextBlock &block) const
{
if (TextBlockUserData *userData = textUserData(block)) {
if (auto replacement = userData->replacement())
return replacementBoundingRect(replacement);
}
if (QTextDocument *replacement = replacementDocument(block))
return replacementBoundingRect(replacement);
QRectF boundingRect = QPlainTextDocumentLayout::blockBoundingRect(block);