From e29b7c0148d3ef91598a3c9ba19bda5b6e2c6f61 Mon Sep 17 00:00:00 2001 From: Roy Qu Date: Tue, 7 May 2024 16:00:33 +0800 Subject: [PATCH] Don't update line width in background. --- libs/qsynedit/qsynedit/document.cpp | 47 ----------------------------- libs/qsynedit/qsynedit/document.h | 28 ----------------- libs/qsynedit/qsynedit/qsynedit.cpp | 33 -------------------- libs/qsynedit/qsynedit/qsynedit.h | 2 -- 4 files changed, 110 deletions(-) diff --git a/libs/qsynedit/qsynedit/document.cpp b/libs/qsynedit/qsynedit/document.cpp index bee41735..181f2cd1 100644 --- a/libs/qsynedit/qsynedit/document.cpp +++ b/libs/qsynedit/qsynedit/document.cpp @@ -92,22 +92,6 @@ int Document::lineWidth(int line) return 0; } -void Document::updateLineWidth(int line) -{ - QMutexLocker locker(&mMutex); - if (line>=0 && line < mLines.size()) { - if (mLines[line]->mWidth<0) { - int width; - QList glyphPositions = mGlyphCalculator.calcLineWidth( - mLines[line]->lineText(), - mLines[line]->glyphStartCharList(), - width); - setLineWidth(line, width,glyphPositions); - mLines[line]->mIsTempWidth = true; - } - } -} - int Document::lineWidth(int line, const QString &newText) { QMutexLocker locker(&mMutex); @@ -1268,12 +1252,6 @@ void Document::invalidateAllLineWidth() line->invalidateWidth(); } mIndexOfLongestLine = -1; - FindMaxLineWidthThread *thread = new FindMaxLineWidthThread(mLines, mGlyphCalculator); - connect(thread, &FindMaxLineWidthThread::maxWidthLineFound, - this, &Document::maxWidthLineFound); - connect(thread, &QThread::finished, - thread, &QThread::deleteLater); - thread->start(); } void Document::invalidateAllNonTempLineWidth() @@ -1778,29 +1756,4 @@ void GlyphCalculator::setFont(const QFont &newFont) mSpaceWidth = mFontMetrics.horizontalAdvance(" "); } -FindMaxLineWidthThread::FindMaxLineWidthThread(const DocumentLines &lines, const GlyphCalculator &glyphCalculator, QObject *parent): - QThread(parent), - mLines{lines}, - mGlyphCalculator{glyphCalculator} -{ - -} - -void FindMaxLineWidthThread::run() -{ - int maxWidth = 0; - int maxWidthLine = -1; - for (int i=0;imWidth; - if ( width < 0 ) - width = mGlyphCalculator.stringWidth(mLines[i]->lineText(),0); - if (width > maxWidth) { - maxWidth = width; - maxWidthLine = i; - } - } - if (maxWidthLine >= 0) - emit maxWidthLineFound(maxWidthLine); -} - } diff --git a/libs/qsynedit/qsynedit/document.h b/libs/qsynedit/qsynedit/document.h index 60691e94..df2b0ba0 100644 --- a/libs/qsynedit/qsynedit/document.h +++ b/libs/qsynedit/qsynedit/document.h @@ -36,7 +36,6 @@ QList calcGlyphStartCharList(const QString &text); void expandGlyphStartCharList(const QString& strAdded, int oldStrLen, QList &glyphStartCharList); class Document; -class FindMaxLineWidthThread; using SearchConfirmAroundProc = std::function; /** @@ -180,7 +179,6 @@ private: bool mIsTempWidth; UpdateWidthFunc mUpdateWidthFunc; friend class Document; - friend class FindMaxLineWidthThread; }; typedef std::shared_ptr PDocumentLine; @@ -275,26 +273,6 @@ private: bool mForceMonospace; }; -class FindMaxLineWidthThread: public QThread { - Q_OBJECT -public: - explicit FindMaxLineWidthThread( - const DocumentLines &lines, - const GlyphCalculator& glyphCalculator, - QObject* parent=nullptr); - FindMaxLineWidthThread(const FindMaxLineWidthThread&) = delete; -signals: - void maxWidthLineFound(int line); -private: - DocumentLines mLines; - GlyphCalculator mGlyphCalculator; - - // QThread interface -protected: - void run() override; -}; - - /** * @brief The Document class * @@ -349,8 +327,6 @@ public: */ int lineWidth(int line); - void updateLineWidth(int line); - /** * @brief get width of the specified text / line * @@ -646,7 +622,6 @@ signals: void inserted(int startLine, int count); void putted(int line); void maxLineWidthChanged(); - void lineWidthUpdateNeeded(int line); protected: QString getTextStr() const; void setUpdateState(bool Updating); @@ -654,9 +629,6 @@ protected: void addItem(const QString& s); void putTextStr(const QString& text); void internalClear(); - void maxWidthLineFound(int line) { - emit lineWidthUpdateNeeded(line); - } private: void invalidateAllLineWidth(); bool lineWidthValid(int line); diff --git a/libs/qsynedit/qsynedit/qsynedit.cpp b/libs/qsynedit/qsynedit/qsynedit.cpp index 48dba0b4..81faf289 100644 --- a/libs/qsynedit/qsynedit/qsynedit.cpp +++ b/libs/qsynedit/qsynedit/qsynedit.cpp @@ -44,20 +44,6 @@ #define UPDATE_HORIZONTAL_SCROLLBAR_EVENT ((QEvent::Type)(QEvent::User+1)) #define UPDATE_VERTICAL_SCROLLBAR_EVENT ((QEvent::Type)(QEvent::User+2)) -#define UPDATE_LINE_WIDTH_EVENT ((QEvent::Type)(QEvent::User+3)) - -class UpdateLineWidthEvent: public QEvent{ -public: - explicit UpdateLineWidthEvent(int line): - QEvent{UPDATE_LINE_WIDTH_EVENT}, - mLine{line} - { - - } - int line() const { return mLine; } -private: - int mLine; -}; namespace QSynedit { QSynEdit::QSynEdit(QWidget *parent) : QAbstractScrollArea(parent), @@ -91,7 +77,6 @@ QSynEdit::QSynEdit(QWidget *parent) : QAbstractScrollArea(parent), connect(mDocument.get(), &Document::cleared, this, &QSynEdit::updateVScrollbar); connect(mDocument.get(), &Document::deleted, this, &QSynEdit::updateVScrollbar); connect(mDocument.get(), &Document::inserted, this, &QSynEdit::updateVScrollbar); - connect(mDocument.get(), &Document::lineWidthUpdateNeeded, this, &QSynEdit::onLineWidthUpdateNeeded); mGutterWidth = 0; @@ -1770,12 +1755,6 @@ void QSynEdit::onMaxLineWidthChanged() updateHScrollBarLater(); } -void QSynEdit::onLineWidthUpdateNeeded(int line) -{ - UpdateLineWidthEvent * event = new UpdateLineWidthEvent(line); - qApp->postEvent(this,event); -} - void QSynEdit::updateHScrollBarLater() { QEvent * event = new QEvent(UPDATE_HORIZONTAL_SCROLLBAR_EVENT); @@ -3164,12 +3143,6 @@ void QSynEdit::doUpdateVScrollbar() verticalScrollBar()->setSingleStep(mTextHeight); } -void QSynEdit::doUpdateLineWidth(int line) -{ - mDocument->updateLineWidth(line); -} - - void QSynEdit::updateCaret() { if (mDocument->maxLineWidth()<0) @@ -6008,12 +5981,6 @@ bool QSynEdit::event(QEvent *event) event->setAccepted(true); doUpdateHScrollbar(); break; - case UPDATE_LINE_WIDTH_EVENT: { - event->setAccepted(true); - UpdateLineWidthEvent* updateEvent = dynamic_cast(event); - doUpdateLineWidth(updateEvent->line()); - } - break; case QEvent::KeyPress:{ QKeyEvent* keyEvent = dynamic_cast(event); if(keyEvent->key() == Qt::Key_Tab || keyEvent->key() == Qt::Key_Backtab) diff --git a/libs/qsynedit/qsynedit/qsynedit.h b/libs/qsynedit/qsynedit/qsynedit.h index 4c592446..34627d7b 100644 --- a/libs/qsynedit/qsynedit/qsynedit.h +++ b/libs/qsynedit/qsynedit/qsynedit.h @@ -525,7 +525,6 @@ private: void doUpdateHScrollbar(); void updateVScrollbar(); void doUpdateVScrollbar(); - void doUpdateLineWidth(int line); void updateCaret(); void recalcCharExtent(); QString expandAtWideGlyphs(const QString& S); @@ -646,7 +645,6 @@ private: private slots: void onMaxLineWidthChanged(); - void onLineWidthUpdateNeeded(int line); void updateHScrollBarLater(); void onBookMarkOptionsChanged(); void onGutterChanged();