diff options
author | Friedemann Kleint <[email protected]> | 2016-03-17 16:02:20 +0100 |
---|---|---|
committer | Friedemann Kleint <[email protected]> | 2016-03-21 08:51:52 +0000 |
commit | 44820dae1326476a6e1aa693421c61ae67bb13b0 (patch) | |
tree | 57c610639a41b7eecc4b6eec2d95c9bbd956548b /src/plugins/imageviewer/imageview.cpp | |
parent | e5262fba5fa705b97314715c2db2e0bb0e40236b (diff) |
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 <[email protected]>
Reviewed-by: Alessandro Portale <[email protected]>
Diffstat (limited to 'src/plugins/imageviewer/imageview.cpp')
-rw-r--r-- | src/plugins/imageviewer/imageview.cpp | 61 |
1 files changed, 60 insertions, 1 deletions
diff --git a/src/plugins/imageviewer/imageview.cpp b/src/plugins/imageviewer/imageview.cpp index 707625ca70e..fbfc7006cdd 100644 --- a/src/plugins/imageviewer/imageview.cpp +++ b/src/plugins/imageviewer/imageview.cpp @@ -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; |