ImageViewer: Add option to export images from SVG.

Add a tool button showing a dialog with file name
and size for exporting images from SVG.

[ChangeLog][ImageViewer] Added option to export images from SVG.

Change-Id: I84e04dc166e70b0359eba0f19703a75b882a2bc2
Reviewed-by: Leena Miettinen <riitta-leena.miettinen@theqtcompany.com>
Reviewed-by: Alessandro Portale <alessandro.portale@theqtcompany.com>
This commit is contained in:
Friedemann Kleint
2016-03-17 16:02:20 +01:00
parent e5262fba5f
commit 44820dae13
10 changed files with 371 additions and 2 deletions

View File

@@ -50,12 +50,29 @@
#include "imageview.h"
#include "exportdialog.h"
#include "imageviewerfile.h"
#include <coreplugin/messagemanager.h>
#include <utils/fileutils.h>
#include <utils/qtcassert.h>
#include <QSvgRenderer>
#include <QGraphicsSvgItem>
#include <QMessageBox>
#include <QGraphicsRectItem>
#include <QWheelEvent>
#include <QMouseEvent>
#include <QGraphicsRectItem>
#include <QImage>
#include <QPainter>
#include <QPixmap>
#include <QDir>
#include <QFileInfo>
#include <qmath.h>
namespace ImageViewer {
@@ -137,6 +154,48 @@ void ImageView::drawBackground(QPainter *p, const QRectF &)
p->restore();
}
void ImageView::exportImage()
{
#ifndef QT_NO_SVG
QGraphicsSvgItem *svgItem = qgraphicsitem_cast<QGraphicsSvgItem *>(m_imageItem);
QTC_ASSERT(svgItem, return);
const QFileInfo origFi = m_file->filePath().toFileInfo();
const QString suggestedFileName = origFi.absolutePath() + QLatin1Char('/')
+ origFi.baseName() + QStringLiteral(".png");
ExportDialog exportDialog(this);
exportDialog.setWindowTitle(tr("Export %1").arg(origFi.fileName()));
exportDialog.setExportSize(svgItem->boundingRect().size().toSize());
exportDialog.setExportFileName(suggestedFileName);
while (true) {
if (exportDialog.exec() != QDialog::Accepted)
break;
const QSize imageSize = exportDialog.exportSize();
QImage image(imageSize, QImage::Format_ARGB32);
image.fill(Qt::transparent);
QPainter painter;
painter.begin(&image);
svgItem->renderer()->render(&painter, QRectF(QPointF(), QSizeF(imageSize)));
painter.end();
const QString fileName = exportDialog.exportFileName();
if (image.save(fileName)) {
const QString message = tr("Exported \"%1\", %2x%3, %4 bytes")
.arg(QDir::toNativeSeparators(fileName)).arg(imageSize.width()).arg(imageSize.height())
.arg(QFileInfo(fileName).size());
Core::MessageManager::write(message);
break;
} else {
QMessageBox::critical(this, tr("Export Image"),
tr("Could not write file \"%1\".").arg(QDir::toNativeSeparators(fileName)));
}
}
#endif // !QT_NO_SVG
}
void ImageView::setViewBackground(bool enable)
{
m_showBackground = enable;