Preview: scale SVG via QSvgRenderer

This commit is contained in:
Le Tan 2018-08-15 19:55:20 +08:00
parent 33f4631f91
commit 35f66ba88e
3 changed files with 38 additions and 10 deletions

View File

@ -29,6 +29,8 @@
#include <QFormLayout> #include <QFormLayout>
#include <QInputDialog> #include <QInputDialog>
#include <QFontDatabase> #include <QFontDatabase>
#include <QSvgRenderer>
#include <QPainter>
#include "vorphanfile.h" #include "vorphanfile.h"
#include "vnote.h" #include "vnote.h"
@ -1653,3 +1655,17 @@ int VUtils::elapsedTime(bool p_reset)
return tm.restart(); return tm.restart();
} }
QPixmap VUtils::svgToPixmap(const QByteArray &p_content, qreal p_factor)
{
QSvgRenderer renderer(p_content);
QSize deSz = renderer.defaultSize();
if (p_factor > 0) {
deSz *= p_factor;
}
QPixmap pm(deSz);
QPainter painter(&pm);
renderer.render(&painter);
return pm;
}

View File

@ -359,6 +359,10 @@ public:
static int elapsedTime(bool p_reset = false); static int elapsedTime(bool p_reset = false);
// Render SVG to Pixmap.
// @p_factor: < 0 indicates no scaling.
static QPixmap svgToPixmap(const QByteArray &p_content, 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)
// Captured texts (need to be trimmed): // Captured texts (need to be trimmed):

View File

@ -148,6 +148,9 @@ private:
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 {
if (p_format == "svg") {
m_image = VUtils::svgToPixmap(p_data, p_scaleFactor);
} else { } else {
QPixmap tmpImg; QPixmap tmpImg;
tmpImg.loadFromData(p_data, tmpImg.loadFromData(p_data,
@ -157,6 +160,7 @@ private:
} }
} }
} }
}
CodeBlockImageCacheEntry(TimeStamp p_ts, CodeBlockImageCacheEntry(TimeStamp p_ts,
const QString &p_format, const QString &p_format,
@ -170,6 +174,9 @@ private:
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 {
if (p_format == "svg") {
m_image = VUtils::svgToPixmap(p_data.toUtf8(), p_scaleFactor);
} else { } else {
QPixmap tmpImg; QPixmap tmpImg;
tmpImg.loadFromData(p_data.toUtf8(), tmpImg.loadFromData(p_data.toUtf8(),
@ -179,6 +186,7 @@ private:
} }
} }
} }
}
bool hasImageData() const bool hasImageData() const
{ {