mirror of
https://gitee.com/vnotex/vnote.git
synced 2025-07-05 13:59:52 +08:00
bug-fix: try to fix the crash in CodeBlockPreviewInfo::updateInplacePreview()
This commit is contained in:
parent
9b114832f1
commit
5dbdcb8cba
@ -64,19 +64,19 @@ void CodeBlockPreviewInfo::updateInplacePreview(const VEditor *p_editor,
|
|||||||
{
|
{
|
||||||
QTextBlock block = p_doc->findBlockByNumber(m_codeBlock.m_endBlock);
|
QTextBlock block = p_doc->findBlockByNumber(m_codeBlock.m_endBlock);
|
||||||
if (block.isValid()) {
|
if (block.isValid()) {
|
||||||
if (m_inplacePreview.isNull()) {
|
VImageToPreview *preview = new VImageToPreview();
|
||||||
m_inplacePreview.reset(new VImageToPreview());
|
|
||||||
}
|
|
||||||
|
|
||||||
// m_image will be generated when signaling out.
|
// m_image will be generated when signaling out.
|
||||||
m_inplacePreview->m_startPos = block.position();
|
preview->m_startPos = block.position();
|
||||||
m_inplacePreview->m_endPos = block.position() + block.length();
|
preview->m_endPos = block.position() + block.length();
|
||||||
m_inplacePreview->m_blockPos = block.position();
|
preview->m_blockPos = block.position();
|
||||||
m_inplacePreview->m_blockNumber = m_codeBlock.m_endBlock;
|
preview->m_blockNumber = m_codeBlock.m_endBlock;
|
||||||
m_inplacePreview->m_padding = VPreviewManager::calculateBlockMargin(block,
|
preview->m_padding = VPreviewManager::calculateBlockMargin(block,
|
||||||
p_editor->tabStopWidthW());
|
p_editor->tabStopWidthW());
|
||||||
m_inplacePreview->m_name = QString::number(getImageIndex());
|
preview->m_name = QString::number(getImageIndex());
|
||||||
m_inplacePreview->m_isBlock = true;
|
preview->m_isBlock = true;
|
||||||
|
|
||||||
|
m_inplacePreview.reset(preview);
|
||||||
} else {
|
} else {
|
||||||
m_inplacePreview->clear();
|
m_inplacePreview->clear();
|
||||||
}
|
}
|
||||||
@ -158,7 +158,7 @@ void VLivePreviewHelper::updateCodeBlocks(const QVector<VCodeBlock> &p_codeBlock
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (m_inplacePreviewEnabled
|
if (m_inplacePreviewEnabled
|
||||||
&& !m_codeBlocks[idx].inplacePreviewReady()) {
|
&& (!cached || !m_codeBlocks[idx].inplacePreviewReady())) {
|
||||||
processForInplacePreview(idx);
|
processForInplacePreview(idx);
|
||||||
manualInplacePreview = false;
|
manualInplacePreview = false;
|
||||||
}
|
}
|
||||||
|
@ -83,6 +83,7 @@ public:
|
|||||||
void setImageData(const QString &p_format, const QString &p_data)
|
void setImageData(const QString &p_format, const QString &p_data)
|
||||||
{
|
{
|
||||||
m_imgDataBa.clear();
|
m_imgDataBa.clear();
|
||||||
|
m_inplacePreview.clear();
|
||||||
|
|
||||||
m_imgFormat = p_format;
|
m_imgFormat = p_format;
|
||||||
m_imgData = p_data;
|
m_imgData = p_data;
|
||||||
@ -91,6 +92,7 @@ public:
|
|||||||
void setImageDataBa(const QString &p_format, const QByteArray &p_data)
|
void setImageDataBa(const QString &p_format, const QByteArray &p_data)
|
||||||
{
|
{
|
||||||
m_imgData.clear();
|
m_imgData.clear();
|
||||||
|
m_inplacePreview.clear();
|
||||||
|
|
||||||
m_imgFormat = p_format;
|
m_imgFormat = p_format;
|
||||||
m_imgDataBa = p_data;
|
m_imgDataBa = p_data;
|
||||||
|
@ -48,25 +48,25 @@ void MathjaxBlockPreviewInfo::updateInplacePreview(const VEditor *p_editor,
|
|||||||
{
|
{
|
||||||
QTextBlock block = p_doc->findBlockByNumber(m_mathjaxBlock.m_blockNumber);
|
QTextBlock block = p_doc->findBlockByNumber(m_mathjaxBlock.m_blockNumber);
|
||||||
if (block.isValid()) {
|
if (block.isValid()) {
|
||||||
if (m_inplacePreview.isNull()) {
|
VImageToPreview *preview = new VImageToPreview();
|
||||||
m_inplacePreview.reset(new VImageToPreview());
|
|
||||||
}
|
|
||||||
|
|
||||||
m_inplacePreview->m_startPos = block.position() + m_mathjaxBlock.m_index;
|
preview->m_startPos = block.position() + m_mathjaxBlock.m_index;
|
||||||
m_inplacePreview->m_endPos = m_inplacePreview->m_startPos + m_mathjaxBlock.m_length;
|
preview->m_endPos = preview->m_startPos + m_mathjaxBlock.m_length;
|
||||||
m_inplacePreview->m_blockPos = block.position();
|
preview->m_blockPos = block.position();
|
||||||
m_inplacePreview->m_blockNumber = m_mathjaxBlock.m_blockNumber;
|
preview->m_blockNumber = m_mathjaxBlock.m_blockNumber;
|
||||||
m_inplacePreview->m_padding = VPreviewManager::calculateBlockMargin(block,
|
preview->m_padding = VPreviewManager::calculateBlockMargin(block,
|
||||||
p_editor->tabStopWidthW());
|
p_editor->tabStopWidthW());
|
||||||
m_inplacePreview->m_name = QString::number(getImageIndex());
|
preview->m_name = QString::number(getImageIndex());
|
||||||
m_inplacePreview->m_isBlock = m_mathjaxBlock.m_previewedAsBlock;
|
preview->m_isBlock = m_mathjaxBlock.m_previewedAsBlock;
|
||||||
|
|
||||||
if (hasImageDataBa()) {
|
if (hasImageDataBa()) {
|
||||||
m_inplacePreview->m_image.loadFromData(m_imgDataBa,
|
preview->m_image.loadFromData(m_imgDataBa,
|
||||||
m_imgFormat.toLocal8Bit().data());
|
m_imgFormat.toLocal8Bit().data());
|
||||||
} else {
|
} else {
|
||||||
m_inplacePreview->m_image = QPixmap();
|
preview->m_image = QPixmap();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
m_inplacePreview.reset(preview);
|
||||||
} else {
|
} else {
|
||||||
m_inplacePreview->clear();
|
m_inplacePreview->clear();
|
||||||
}
|
}
|
||||||
@ -117,9 +117,11 @@ void VMathJaxInplacePreviewHelper::updateMathjaxBlocks(const QVector<VMathjaxBlo
|
|||||||
int idx = 0;
|
int idx = 0;
|
||||||
bool manualUpdate = true;
|
bool manualUpdate = true;
|
||||||
for (auto const & vmb : p_blocks) {
|
for (auto const & vmb : p_blocks) {
|
||||||
|
bool cached = false;
|
||||||
if (idx < m_mathjaxBlocks.size()) {
|
if (idx < m_mathjaxBlocks.size()) {
|
||||||
MathjaxBlockPreviewInfo &mb = m_mathjaxBlocks[idx];
|
MathjaxBlockPreviewInfo &mb = m_mathjaxBlocks[idx];
|
||||||
if (mb.mathjaxBlock().equalContent(vmb)) {
|
if (mb.mathjaxBlock().equalContent(vmb)) {
|
||||||
|
cached = true;
|
||||||
mb.updateNonContent(m_doc, m_editor, vmb);
|
mb.updateNonContent(m_doc, m_editor, vmb);
|
||||||
} else {
|
} else {
|
||||||
mb.setMathjaxBlock(vmb);
|
mb.setMathjaxBlock(vmb);
|
||||||
@ -129,7 +131,7 @@ void VMathJaxInplacePreviewHelper::updateMathjaxBlocks(const QVector<VMathjaxBlo
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (m_enabled
|
if (m_enabled
|
||||||
&& !m_mathjaxBlocks[idx].inplacePreviewReady()) {
|
&& (!cached || !m_mathjaxBlocks[idx].inplacePreviewReady())) {
|
||||||
manualUpdate = false;
|
manualUpdate = false;
|
||||||
processForInplacePreview(idx);
|
processForInplacePreview(idx);
|
||||||
}
|
}
|
||||||
|
@ -56,6 +56,7 @@ public:
|
|||||||
{
|
{
|
||||||
m_imgFormat = p_format;
|
m_imgFormat = p_format;
|
||||||
m_imgDataBa = p_data;
|
m_imgDataBa = p_data;
|
||||||
|
m_inplacePreview.clear();
|
||||||
}
|
}
|
||||||
|
|
||||||
bool hasImageDataBa() const
|
bool hasImageDataBa() const
|
||||||
|
Loading…
x
Reference in New Issue
Block a user