TextEditor: update scrollbar after adding annotation between lines

Emit documentSizeChanged after resizing the block boundaries because of
an annotation between lines.

Task-number: QTCREATORBUG-19790
Change-Id: If468ec003a43f37fdcb182344992e4094b269c92
Reviewed-by: Christian Stenger <christian.stenger@qt.io>
This commit is contained in:
David Schulz
2018-02-22 12:50:36 +01:00
parent 912d4616f5
commit dc358dc841

View File

@@ -436,7 +436,7 @@ struct PaintEventData
const QRect eventRect;
qreal rightMargin = -1;
const QTextDocument *doc;
const TextDocumentLayout *documentLayout;
TextDocumentLayout *documentLayout;
const int documentWidth;
const QTextCursor textCursor;
const QTextBlock textCursorBlock;
@@ -503,7 +503,8 @@ public:
bool expanded,
bool active,
bool hovered) const;
bool updateAnnotationBounds(TextBlockUserData *blockUserData, bool annotationsVisible);
bool updateAnnotationBounds(TextBlockUserData *blockUserData, TextDocumentLayout *layout,
bool annotationsVisible);
void updateLineAnnotation(const PaintEventData &data, const PaintEventBlockData &blockData,
QPainter &painter);
void paintRightMarginArea(PaintEventData &data, QPainter &painter) const;
@@ -4020,7 +4021,9 @@ QRectF TextEditorWidgetPrivate::getLastLineLineRect(const QTextBlock &block)
return line.naturalTextRect().translated(contentOffset.x(), top).adjusted(0, 0, -1, -1);
}
bool TextEditorWidgetPrivate::updateAnnotationBounds(TextBlockUserData *blockUserData, bool annotationsVisible)
bool TextEditorWidgetPrivate::updateAnnotationBounds(TextBlockUserData *blockUserData,
TextDocumentLayout *layout,
bool annotationsVisible)
{
const bool additionalHeightNeeded = annotationsVisible
&& m_displaySettings.m_annotationAlignment == AnnotationAlignment::BetweenLines;
@@ -4029,6 +4032,7 @@ bool TextEditorWidgetPrivate::updateAnnotationBounds(TextBlockUserData *blockUse
return false;
blockUserData->setAdditionalAnnotationHeight(additionalHeight);
q->viewport()->update();
layout->emitDocumentSizeChanged();
return true;
}
@@ -4051,8 +4055,10 @@ void TextEditorWidgetPrivate::updateLineAnnotation(const PaintEventData &data,
return !mark->lineAnnotation().isEmpty();
});
if (updateAnnotationBounds(blockUserData, annotationsVisible) || !annotationsVisible)
if (updateAnnotationBounds(blockUserData, data.documentLayout, annotationsVisible)
|| !annotationsVisible) {
return;
}
const QRectF lineRect = getLastLineLineRect(data.block);
if (lineRect.isNull())