diff options
author | David Schulz <david.schulz@qt.io> | 2022-04-27 14:34:08 +0200 |
---|---|---|
committer | David Schulz <david.schulz@qt.io> | 2022-07-04 07:08:59 +0000 |
commit | 9eef4bd2f1194c7e9f0d6876dc01f8686171eb55 (patch) | |
tree | dcf3426cfb98e5d5e5b0f4bd90166e93d87c45b8 /src/plugins | |
parent | 91fb0cf1232850f8cb41840d28689bf6bcfd633c (diff) |
TextEditor: remove mark width factor
Needed to optimize painting of different text mark icons in one line.
Change-Id: Ia7f9dd12020e2a21875b3de54b65257f8ea337d9
Reviewed-by: <github-actions-qt-creator@cristianadam.eu>
Reviewed-by: Christian Stenger <christian.stenger@qt.io>
Diffstat (limited to 'src/plugins')
-rw-r--r-- | src/plugins/texteditor/textdocument.cpp | 28 | ||||
-rw-r--r-- | src/plugins/texteditor/textdocumentlayout.h | 1 | ||||
-rw-r--r-- | src/plugins/texteditor/texteditor.cpp | 8 | ||||
-rw-r--r-- | src/plugins/texteditor/textmark.cpp | 15 | ||||
-rw-r--r-- | src/plugins/texteditor/textmark.h | 6 |
5 files changed, 8 insertions, 50 deletions
diff --git a/src/plugins/texteditor/textdocument.cpp b/src/plugins/texteditor/textdocument.cpp index 195a48f62c6..d01bf4a5680 100644 --- a/src/plugins/texteditor/textdocument.cpp +++ b/src/plugins/texteditor/textdocument.cpp @@ -996,10 +996,8 @@ bool TextDocument::addMark(TextMark *mark) if (!mark->isVisible()) return true; // Update document layout - double newMaxWidthFactor = qMax(mark->widthFactor(), documentLayout->maxMarkWidthFactor); - bool fullUpdate = newMaxWidthFactor > documentLayout->maxMarkWidthFactor || !documentLayout->hasMarks; + bool fullUpdate = !documentLayout->hasMarks; documentLayout->hasMarks = true; - documentLayout->maxMarkWidthFactor = newMaxWidthFactor; if (fullUpdate) documentLayout->requestUpdate(); else @@ -1037,7 +1035,6 @@ void TextDocument::removeMarkFromMarksCache(TextMark *mark) if (d->m_marksCache.isEmpty()) { documentLayout->hasMarks = false; - documentLayout->maxMarkWidthFactor = 1.0; scheduleLayoutUpdate(); return; } @@ -1045,28 +1042,7 @@ void TextDocument::removeMarkFromMarksCache(TextMark *mark) if (!mark->isVisible()) return; - if (documentLayout->maxMarkWidthFactor == 1.0 - || mark->widthFactor() == 1.0 - || mark->widthFactor() < documentLayout->maxMarkWidthFactor) { - // No change in width possible - documentLayout->requestExtraAreaUpdate(); - } else { - double maxWidthFactor = 1.0; - for (const TextMark *mark : qAsConst(d->m_marksCache)) { - if (!mark->isVisible()) - continue; - maxWidthFactor = qMax(mark->widthFactor(), maxWidthFactor); - if (maxWidthFactor == documentLayout->maxMarkWidthFactor) - break; // Still a mark with the maxMarkWidthFactor - } - - if (maxWidthFactor != documentLayout->maxMarkWidthFactor) { - documentLayout->maxMarkWidthFactor = maxWidthFactor; - scheduleLayoutUpdate(); - } else { - documentLayout->requestExtraAreaUpdate(); - } - } + documentLayout->requestExtraAreaUpdate(); } void TextDocument::removeMark(TextMark *mark) diff --git a/src/plugins/texteditor/textdocumentlayout.h b/src/plugins/texteditor/textdocumentlayout.h index 3bed9f7bc5d..21f8800e396 100644 --- a/src/plugins/texteditor/textdocumentlayout.h +++ b/src/plugins/texteditor/textdocumentlayout.h @@ -225,7 +225,6 @@ public: int lastSaveRevision = 0; bool hasMarks = false; - double maxMarkWidthFactor = 1.0; int m_requiredWidth = 0; void setRequiredWidth(int width); diff --git a/src/plugins/texteditor/texteditor.cpp b/src/plugins/texteditor/texteditor.cpp index 9a4b997ffc2..8e6e2c53875 100644 --- a/src/plugins/texteditor/texteditor.cpp +++ b/src/plugins/texteditor/texteditor.cpp @@ -4793,7 +4793,7 @@ int TextEditorWidget::extraAreaWidth(int *markWidthPtr) const int markWidth = 0; if (d->m_marksVisible) { - markWidth += documentLayout->maxMarkWidthFactor * fm.lineSpacing() + 2; + markWidth += fm.lineSpacing() + 2; // if (documentLayout->doubleMarkCount) // markWidth += fm.lineSpacing() / 3; @@ -4919,8 +4919,7 @@ void TextEditorWidgetPrivate::paintTextMarks(QPainter &painter, const ExtraAreaP if (!mark->isVisible() && !mark->icon().isNull()) continue; const int height = data.lineSpacing - 1; - const int width = int(.5 + height * mark->widthFactor()); - const QRect r(xoffset, int(blockBoundingRect.top()), width, height); + const QRect r(xoffset, int(blockBoundingRect.top()), height, height); mark->paintIcon(&painter, r); xoffset += 2; } @@ -5698,8 +5697,7 @@ void TextEditorWidget::extraAreaMouseEvent(QMouseEvent *e) if (dist > QApplication::startDragDistance()) { d->m_markDragging = true; const int height = fontMetrics().lineSpacing() - 1; - const int width = int(.5 + height * d->m_dragMark->widthFactor()); - d->m_markDragCursor = QCursor(d->m_dragMark->icon().pixmap({height, width})); + d->m_markDragCursor = QCursor(d->m_dragMark->icon().pixmap({height, height})); d->m_dragMark->setVisible(false); QGuiApplication::setOverrideCursor(d->m_markDragCursor); } diff --git a/src/plugins/texteditor/textmark.cpp b/src/plugins/texteditor/textmark.cpp index 02ad18e8c2e..15e0eec1612 100644 --- a/src/plugins/texteditor/textmark.cpp +++ b/src/plugins/texteditor/textmark.cpp @@ -84,12 +84,11 @@ private: TextMarkRegistry *m_instance = nullptr; -TextMark::TextMark(const FilePath &fileName, int lineNumber, Id category, double widthFactor) +TextMark::TextMark(const FilePath &fileName, int lineNumber, Id category) : m_fileName(fileName) , m_lineNumber(lineNumber) , m_visible(true) , m_category(category) - , m_widthFactor(widthFactor) { if (!m_fileName.isEmpty()) TextMarkRegistry::add(this); @@ -200,7 +199,7 @@ TextMark::AnnotationRects TextMark::annotationRects(const QRectF &boundingRect, rects.iconRect = QRectF(rects.annotationRect.left(), boundingRect.top(), 0, boundingRect.height()); if (drawIcon) - rects.iconRect.setWidth(rects.iconRect.height() * m_widthFactor); + rects.iconRect.setWidth(rects.iconRect.height()); rects.textRect = QRectF(rects.iconRect.right() + margin, boundingRect.top(), qreal(fm.horizontalAdvance(rects.text)), boundingRect.height()); rects.annotationRect.setRight(rects.textRect.right() + margin); @@ -263,16 +262,6 @@ void TextMark::setVisible(bool visible) updateMarker(); } -double TextMark::widthFactor() const -{ - return m_widthFactor; -} - -void TextMark::setWidthFactor(double factor) -{ - m_widthFactor = factor; -} - bool TextMark::isClickable() const { return false; diff --git a/src/plugins/texteditor/textmark.h b/src/plugins/texteditor/textmark.h index 6184861ce98..0e94728103c 100644 --- a/src/plugins/texteditor/textmark.h +++ b/src/plugins/texteditor/textmark.h @@ -55,8 +55,7 @@ class TEXTEDITOR_EXPORT TextMark public: TextMark(const Utils::FilePath &fileName, int lineNumber, - Utils::Id category, - double widthFactor = 1.0); + Utils::Id category); TextMark() = delete; virtual ~TextMark(); @@ -112,8 +111,6 @@ public: bool isVisible() const; void setVisible(bool isVisible); Utils::Id category() const { return m_category; } - double widthFactor() const; - void setWidthFactor(double factor); Utils::optional<Utils::Theme::Color> color() const; void setColor(const Utils::Theme::Color &color); @@ -149,7 +146,6 @@ private: Utils::optional<Utils::Theme::Color> m_color; bool m_visible = false; Utils::Id m_category; - double m_widthFactor = 1.0; QString m_lineAnnotation; QString m_toolTip; std::function<QString()> m_toolTipProvider; |