Preview: fill background

This commit is contained in:
Le Tan 2018-08-15 21:07:22 +08:00
parent 0508e8f34d
commit b9da920bb4
4 changed files with 26 additions and 11 deletions

View File

@ -1656,7 +1656,9 @@ int VUtils::elapsedTime(bool p_reset)
return tm.restart(); return tm.restart();
} }
QPixmap VUtils::svgToPixmap(const QByteArray &p_content, qreal p_factor) QPixmap VUtils::svgToPixmap(const QByteArray &p_content,
const QString &p_background,
qreal p_factor)
{ {
QSvgRenderer renderer(p_content); QSvgRenderer renderer(p_content);
QSize deSz = renderer.defaultSize(); QSize deSz = renderer.defaultSize();
@ -1665,6 +1667,10 @@ QPixmap VUtils::svgToPixmap(const QByteArray &p_content, qreal p_factor)
} }
QPixmap pm(deSz); QPixmap pm(deSz);
if (!p_background.isEmpty()) {
pm.fill(p_background);
}
QPainter painter(&pm); QPainter painter(&pm);
renderer.render(&painter); renderer.render(&painter);
return pm; return pm;

View File

@ -361,7 +361,9 @@ public:
// Render SVG to Pixmap. // Render SVG to Pixmap.
// @p_factor: < 0 indicates no scaling. // @p_factor: < 0 indicates no scaling.
static QPixmap svgToPixmap(const QByteArray &p_content, qreal p_factor); static QPixmap svgToPixmap(const QByteArray &p_content,
const QString &p_background,
qreal p_factor);
// Regular expression for image link. // Regular expression for image link.
// ![image title]( http://github.com/tamlok/vnote.jpg "alt text" =200x100) // ![image title]( http://github.com/tamlok/vnote.jpg "alt text" =200x100)

View File

@ -175,17 +175,11 @@ void VLivePreviewHelper::updateCodeBlocks(TimeStamp p_timeStamp, const QVector<V
entry->m_ts = m_timeStamp; entry->m_ts = m_timeStamp;
cached = true; cached = true;
m_codeBlocks[idx].setImageData(entry->m_imgFormat, entry->m_imgData); m_codeBlocks[idx].setImageData(entry->m_imgFormat, entry->m_imgData);
QString background;
if (vcb.m_lang == "puml") {
background = g_config->getEditorPreviewImageBg();
}
m_codeBlocks[idx].updateInplacePreview(m_editor, m_codeBlocks[idx].updateInplacePreview(m_editor,
m_doc, m_doc,
entry->m_image, entry->m_image,
entry->m_imageName, entry->m_imageName,
background); entry->m_imageBackground);
} }
if (m_inplacePreviewEnabled if (m_inplacePreviewEnabled
@ -386,6 +380,7 @@ void VLivePreviewHelper::localAsyncResultReady(int p_id,
QSharedPointer<CodeBlockImageCacheEntry> entry(new CodeBlockImageCacheEntry(p_timeStamp, QSharedPointer<CodeBlockImageCacheEntry> entry(new CodeBlockImageCacheEntry(p_timeStamp,
p_format, p_format,
p_result, p_result,
background,
getScaleFactor(cb))); getScaleFactor(cb)));
m_cache.insert(text, entry); m_cache.insert(text, entry);
@ -501,6 +496,7 @@ void VLivePreviewHelper::mathjaxPreviewResultReady(int p_identitifer,
QSharedPointer<CodeBlockImageCacheEntry> entry(new CodeBlockImageCacheEntry(p_timeStamp, QSharedPointer<CodeBlockImageCacheEntry> entry(new CodeBlockImageCacheEntry(p_timeStamp,
p_format, p_format,
p_data, p_data,
"",
getScaleFactor(cb))); getScaleFactor(cb)));
m_cache.insert(text, entry); m_cache.insert(text, entry);

View File

@ -141,16 +141,21 @@ private:
CodeBlockImageCacheEntry(TimeStamp p_ts, CodeBlockImageCacheEntry(TimeStamp p_ts,
const QString &p_format, const QString &p_format,
const QByteArray &p_data, const QByteArray &p_data,
const QString &p_background,
qreal p_scaleFactor) qreal p_scaleFactor)
: m_ts(p_ts) : m_ts(p_ts)
{ {
if (!p_data.isEmpty()) { if (!p_data.isEmpty()) {
m_imageBackground = p_background;
if (p_scaleFactor < SCALE_FACTOR_THRESHOLD) { if (p_scaleFactor < SCALE_FACTOR_THRESHOLD) {
m_image.loadFromData(p_data, m_image.loadFromData(p_data,
p_format.toLocal8Bit().data()); p_format.toLocal8Bit().data());
} else { } else {
if (p_format == "svg") { if (p_format == "svg") {
m_image = VUtils::svgToPixmap(p_data, p_scaleFactor); m_image = VUtils::svgToPixmap(p_data,
m_imageBackground,
p_scaleFactor);
} else { } else {
QPixmap tmpImg; QPixmap tmpImg;
tmpImg.loadFromData(p_data, tmpImg.loadFromData(p_data,
@ -165,18 +170,23 @@ private:
CodeBlockImageCacheEntry(TimeStamp p_ts, CodeBlockImageCacheEntry(TimeStamp p_ts,
const QString &p_format, const QString &p_format,
const QString &p_data, const QString &p_data,
const QString &p_background,
qreal p_scaleFactor) qreal p_scaleFactor)
: m_ts(p_ts), : m_ts(p_ts),
m_imgData(p_data), m_imgData(p_data),
m_imgFormat(p_format) m_imgFormat(p_format)
{ {
if (!p_data.isEmpty()) { if (!p_data.isEmpty()) {
m_imageBackground = p_background;
if (p_scaleFactor < SCALE_FACTOR_THRESHOLD) { if (p_scaleFactor < SCALE_FACTOR_THRESHOLD) {
m_image.loadFromData(p_data.toUtf8(), m_image.loadFromData(p_data.toUtf8(),
p_format.toLocal8Bit().data()); p_format.toLocal8Bit().data());
} else { } else {
if (p_format == "svg") { if (p_format == "svg") {
m_image = VUtils::svgToPixmap(p_data.toUtf8(), p_scaleFactor); m_image = VUtils::svgToPixmap(p_data.toUtf8(),
m_imageBackground,
p_scaleFactor);
} else { } else {
QPixmap tmpImg; QPixmap tmpImg;
tmpImg.loadFromData(p_data.toUtf8(), tmpImg.loadFromData(p_data.toUtf8(),
@ -207,6 +217,7 @@ private:
// For in-place preview. // For in-place preview.
QPixmap m_image; QPixmap m_image;
QString m_imageName; QString m_imageName;
QString m_imageBackground;
}; };