Qt: handle newlines in TextBuffer print()

This commit is contained in:
Adam Higerd 2024-10-11 19:50:05 -05:00 committed by Vicki Pfau
parent a114207828
commit b272968969
1 changed files with 16 additions and 17 deletions

View File

@ -51,26 +51,25 @@ void ScriptingTextBuffer::setBufferName(const QString& name) {
void ScriptingTextBuffer::print(const QString& text) { void ScriptingTextBuffer::print(const QString& text) {
QMutexLocker locker(&m_mutex); QMutexLocker locker(&m_mutex);
QString split(text); for (QString split : text.split('\n')) {
m_shim.cursor.beginEditBlock(); while (m_shim.cursor.positionInBlock() + split.length() > m_dims.width()) {
while (m_shim.cursor.positionInBlock() + split.length() > m_dims.width()) { int cut = m_dims.width() - m_shim.cursor.positionInBlock();
int cut = m_dims.width() - m_shim.cursor.positionInBlock(); if (!m_shim.cursor.atBlockEnd()) {
m_shim.cursor.movePosition(QTextCursor::EndOfBlock, QTextCursor::KeepAnchor);
}
m_shim.cursor.insertText(split.left(cut));
if (m_shim.cursor.atEnd()) {
m_shim.cursor.insertBlock();
} else {
m_shim.cursor.movePosition(QTextCursor::NextBlock, QTextCursor::MoveAnchor, 1);
}
split = split.mid(cut);
}
if (!m_shim.cursor.atBlockEnd()) { if (!m_shim.cursor.atBlockEnd()) {
m_shim.cursor.movePosition(QTextCursor::EndOfBlock, QTextCursor::KeepAnchor); m_shim.cursor.movePosition(QTextCursor::NextCharacter, QTextCursor::KeepAnchor, split.length());
} }
m_shim.cursor.insertText(split.left(cut)); m_shim.cursor.insertText(split);
if (m_shim.cursor.atEnd()) {
m_shim.cursor.insertBlock();
} else {
m_shim.cursor.movePosition(QTextCursor::NextBlock, QTextCursor::MoveAnchor, 1);
}
split = split.mid(cut);
} }
if (!m_shim.cursor.atBlockEnd()) {
m_shim.cursor.movePosition(QTextCursor::NextCharacter, QTextCursor::KeepAnchor, split.length());
}
m_shim.cursor.insertText(split);
m_shim.cursor.endEditBlock();
} }
void ScriptingTextBuffer::clear() { void ScriptingTextBuffer::clear() {