mirror of
https://gitee.com/vnotex/vnote.git
synced 2025-07-05 13:59:52 +08:00
delay to preview after code/math blocks update to avoid blink
This commit is contained in:
parent
4348112b04
commit
c50f76c40a
@ -3,6 +3,7 @@
|
|||||||
#include <QDebug>
|
#include <QDebug>
|
||||||
#include <QTextDocument>
|
#include <QTextDocument>
|
||||||
#include <QTextBlock>
|
#include <QTextBlock>
|
||||||
|
#include <QTimer>
|
||||||
|
|
||||||
#include <vtextedit/pegmarkdownhighlighterdata.h>
|
#include <vtextedit/pegmarkdownhighlighterdata.h>
|
||||||
#include <vtextedit/texteditorconfig.h>
|
#include <vtextedit/texteditorconfig.h>
|
||||||
@ -123,6 +124,19 @@ PreviewHelper::PreviewHelper(MarkdownEditor *p_editor, QObject *p_parent)
|
|||||||
m_mathBlockCache(100, nullptr)
|
m_mathBlockCache(100, nullptr)
|
||||||
{
|
{
|
||||||
setMarkdownEditor(p_editor);
|
setMarkdownEditor(p_editor);
|
||||||
|
|
||||||
|
const int interval = 1000;
|
||||||
|
m_codeBlockTimer = new QTimer(this);
|
||||||
|
m_codeBlockTimer->setSingleShot(true);
|
||||||
|
m_codeBlockTimer->setInterval(interval);
|
||||||
|
connect(m_codeBlockTimer, &QTimer::timeout,
|
||||||
|
this, &PreviewHelper::handleCodeBlocksUpdate);
|
||||||
|
|
||||||
|
m_mathBlockTimer = new QTimer(this);
|
||||||
|
m_mathBlockTimer->setSingleShot(true);
|
||||||
|
m_mathBlockTimer->setInterval(interval);
|
||||||
|
connect(m_mathBlockTimer, &QTimer::timeout,
|
||||||
|
this, &PreviewHelper::handleMathBlocksUpdate);
|
||||||
}
|
}
|
||||||
|
|
||||||
void PreviewHelper::codeBlocksUpdated(vte::TimeStamp p_timeStamp,
|
void PreviewHelper::codeBlocksUpdated(vte::TimeStamp p_timeStamp,
|
||||||
@ -133,13 +147,19 @@ void PreviewHelper::codeBlocksUpdated(vte::TimeStamp p_timeStamp,
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
m_pendingCodeBlocks = p_codeBlocks;
|
||||||
|
m_codeBlockTimer->start();
|
||||||
|
}
|
||||||
|
|
||||||
|
void PreviewHelper::handleCodeBlocksUpdate()
|
||||||
|
{
|
||||||
++m_codeBlockTimeStamp;
|
++m_codeBlockTimeStamp;
|
||||||
m_codeBlocksData.clear();
|
m_codeBlocksData.clear();
|
||||||
|
|
||||||
QVector<int> needPreviewBlocks;
|
QVector<int> needPreviewBlocks;
|
||||||
|
|
||||||
for (int i = 0; i < p_codeBlocks.size(); ++i) {
|
for (int i = 0; i < m_pendingCodeBlocks.size(); ++i) {
|
||||||
const auto &cb = p_codeBlocks[i];
|
const auto &cb = m_pendingCodeBlocks[i];
|
||||||
|
|
||||||
const auto needPreview = isLangNeedPreview(cb.m_lang);
|
const auto needPreview = isLangNeedPreview(cb.m_lang);
|
||||||
if (!needPreview.first && !needPreview.second) {
|
if (!needPreview.first && !needPreview.second) {
|
||||||
@ -172,6 +192,8 @@ void PreviewHelper::codeBlocksUpdated(vte::TimeStamp p_timeStamp,
|
|||||||
}
|
}
|
||||||
|
|
||||||
updateEditorInplacePreviewCodeBlock();
|
updateEditorInplacePreviewCodeBlock();
|
||||||
|
|
||||||
|
m_pendingCodeBlocks.clear();
|
||||||
}
|
}
|
||||||
|
|
||||||
bool PreviewHelper::checkPreviewSourceLang(SourceFlag p_flag, const QString &p_lang) const
|
bool PreviewHelper::checkPreviewSourceLang(SourceFlag p_flag, const QString &p_lang) const
|
||||||
@ -337,13 +359,19 @@ void PreviewHelper::mathBlocksUpdated(const QVector<vte::peg::MathBlock> &p_math
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
m_pendingMathBlocks = p_mathBlocks;
|
||||||
|
m_mathBlockTimer->start();
|
||||||
|
}
|
||||||
|
|
||||||
|
void PreviewHelper::handleMathBlocksUpdate()
|
||||||
|
{
|
||||||
++m_mathBlockTimeStamp;
|
++m_mathBlockTimeStamp;
|
||||||
m_mathBlocksData.clear();
|
m_mathBlocksData.clear();
|
||||||
m_mathBlocksData.reserve(p_mathBlocks.size());
|
m_mathBlocksData.reserve(m_pendingMathBlocks.size());
|
||||||
|
|
||||||
bool needUpdateEditorInplacePreview = true;
|
bool needUpdateEditorInplacePreview = true;
|
||||||
|
|
||||||
for (const auto &mb : p_mathBlocks) {
|
for (const auto &mb : m_pendingMathBlocks) {
|
||||||
m_mathBlocksData.append(MathBlockPreviewData(mb));
|
m_mathBlocksData.append(MathBlockPreviewData(mb));
|
||||||
const int blockPreviewIdx = m_mathBlocksData.size() - 1;
|
const int blockPreviewIdx = m_mathBlocksData.size() - 1;
|
||||||
|
|
||||||
@ -368,6 +396,8 @@ void PreviewHelper::mathBlocksUpdated(const QVector<vte::peg::MathBlock> &p_math
|
|||||||
if (needUpdateEditorInplacePreview) {
|
if (needUpdateEditorInplacePreview) {
|
||||||
updateEditorInplacePreviewMathBlock();
|
updateEditorInplacePreviewMathBlock();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
m_pendingMathBlocks.clear();
|
||||||
}
|
}
|
||||||
|
|
||||||
void PreviewHelper::inplacePreviewMathBlock(int p_blockPreviewIdx)
|
void PreviewHelper::inplacePreviewMathBlock(int p_blockPreviewIdx)
|
||||||
|
@ -194,6 +194,10 @@ namespace vnotex
|
|||||||
|
|
||||||
bool needForcedBackground(const QString &p_lang) const;
|
bool needForcedBackground(const QString &p_lang) const;
|
||||||
|
|
||||||
|
void handleCodeBlocksUpdate();
|
||||||
|
|
||||||
|
void handleMathBlocksUpdate();
|
||||||
|
|
||||||
MarkdownEditor *m_editor = nullptr;
|
MarkdownEditor *m_editor = nullptr;
|
||||||
|
|
||||||
QTextDocument *m_document = nullptr;
|
QTextDocument *m_document = nullptr;
|
||||||
@ -229,6 +233,14 @@ namespace vnotex
|
|||||||
bool m_webPlantUmlEnabled = true;
|
bool m_webPlantUmlEnabled = true;
|
||||||
|
|
||||||
bool m_webGraphvizEnabled = true;
|
bool m_webGraphvizEnabled = true;
|
||||||
|
|
||||||
|
QVector<vte::peg::FencedCodeBlock> m_pendingCodeBlocks;
|
||||||
|
|
||||||
|
QTimer *m_codeBlockTimer = nullptr;
|
||||||
|
|
||||||
|
QVector<vte::peg::MathBlock> m_pendingMathBlocks;
|
||||||
|
|
||||||
|
QTimer *m_mathBlockTimer = nullptr;
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user