From 4da2d288d877390e42181643b55bb3451b400521 Mon Sep 17 00:00:00 2001 From: David Schulz Date: Tue, 20 Jun 2023 15:00:08 +0200 Subject: [PATCH] Editor: avoid relayouting of annotation text for each paint event Change-Id: Icabf033a43922bb9ebafd1a7973dcac851e9369e Reviewed-by: Christian Stenger --- src/plugins/texteditor/textmark.cpp | 4 +++- src/plugins/texteditor/textmark.h | 2 ++ 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/src/plugins/texteditor/textmark.cpp b/src/plugins/texteditor/textmark.cpp index 6f30ac233ba..b817541b019 100644 --- a/src/plugins/texteditor/textmark.cpp +++ b/src/plugins/texteditor/textmark.cpp @@ -138,6 +138,8 @@ void TextMark::paintAnnotation(QPainter &painter, painter.fontMetrics(), fadeInOffset, fadeOutOffset); + if (m_staticAnnotationText.text() != rects.text) + m_staticAnnotationText.setText(rects.text); annotationRect->setRight(rects.fadeOutRect.right()); const QRectF eventRectF(eventRect); if (!(rects.fadeInRect.intersects(eventRectF) || rects.annotationRect.intersects(eventRectF) @@ -161,7 +163,7 @@ void TextMark::paintAnnotation(QPainter &painter, painter.fillRect(rects.annotationRect, colors.rectColor); painter.setPen(colors.textColor); paintIcon(&painter, rects.iconRect.toAlignedRect()); - painter.drawText(rects.textRect, Qt::AlignLeft, rects.text); + painter.drawStaticText(rects.textRect.topLeft(), m_staticAnnotationText); if (rects.fadeOutRect.isValid()) { grad = QLinearGradient(rects.fadeOutRect.topLeft() - contentOffset, rects.fadeOutRect.topRight() - contentOffset); diff --git a/src/plugins/texteditor/textmark.h b/src/plugins/texteditor/textmark.h index 7603dae5d6d..b04e98ba5c3 100644 --- a/src/plugins/texteditor/textmark.h +++ b/src/plugins/texteditor/textmark.h @@ -11,6 +11,7 @@ #include #include +#include #include #include @@ -139,6 +140,7 @@ private: bool m_visible = false; TextMarkCategory m_category; QString m_lineAnnotation; + mutable QStaticText m_staticAnnotationText; QString m_toolTip; std::function m_toolTipProvider; QString m_defaultToolTip;