bug-fix: VTextEdit::visibleBlockRange() may get wrong range before updating document size after preview

This commit is contained in:
Le Tan 2018-05-28 20:34:33 +08:00
parent d3a5642d06
commit 4de97522a1
3 changed files with 24 additions and 0 deletions

View File

@ -590,4 +590,13 @@ void VPreviewManager::relayoutEditor(const OrderedIntSet &p_blocks)
} }
m_editor->relayout(bs); m_editor->relayout(bs);
// We may get the wrong visible block range before relayout() updating the document size.
OrderedIntSet after;
int afterFirst = m_editor->firstVisibleBlockNumber();
for (int i = afterFirst; i < first; ++i) {
after.insert(i, QMapDummyValue());
}
m_editor->relayout(after);
} }

View File

@ -277,6 +277,13 @@ void VTextEdit::updateLineNumberArea()
} }
} }
int VTextEdit::firstVisibleBlockNumber() const
{
VTextDocumentLayout *layout = getLayout();
Q_ASSERT(layout);
return layout->findBlockByPosition(QPointF(0, -contentOffsetY()));
}
QTextBlock VTextEdit::firstVisibleBlock() const QTextBlock VTextEdit::firstVisibleBlock() const
{ {
VTextDocumentLayout *layout = getLayout(); VTextDocumentLayout *layout = getLayout();
@ -317,6 +324,8 @@ void VTextEdit::clearBlockImages()
void VTextEdit::relayout(const OrderedIntSet &p_blocks) void VTextEdit::relayout(const OrderedIntSet &p_blocks)
{ {
getLayout()->relayout(p_blocks); getLayout()->relayout(p_blocks);
updateLineNumberArea();
} }
void VTextEdit::relayoutVisibleBlocks() void VTextEdit::relayoutVisibleBlocks()
@ -330,6 +339,8 @@ void VTextEdit::relayoutVisibleBlocks()
} }
getLayout()->relayout(blocks); getLayout()->relayout(blocks);
updateLineNumberArea();
} }
bool VTextEdit::containsImage(const QString &p_imageName) const bool VTextEdit::containsImage(const QString &p_imageName) const
@ -419,6 +430,8 @@ void VTextEdit::setCursorLineBlockBg(const QColor &p_bg)
void VTextEdit::relayout() void VTextEdit::relayout()
{ {
getLayout()->relayout(); getLayout()->relayout();
updateLineNumberArea();
} }
void VTextEdit::setDisplayScaleFactor(qreal p_factor) void VTextEdit::setDisplayScaleFactor(qreal p_factor)

View File

@ -33,6 +33,8 @@ public:
void setLineNumberColor(const QColor &p_foreground, const QColor &p_background); void setLineNumberColor(const QColor &p_foreground, const QColor &p_background);
int firstVisibleBlockNumber() const;
QTextBlock firstVisibleBlock() const; QTextBlock firstVisibleBlock() const;
QTextBlock lastVisibleBlock() const; QTextBlock lastVisibleBlock() const;