aboutsummaryrefslogtreecommitdiffstats
path: root/src/plugins/imageviewer/imageview.cpp
diff options
context:
space:
mode:
authorFriedemann Kleint <[email protected]>2016-03-17 16:02:20 +0100
committerFriedemann Kleint <[email protected]>2016-03-21 08:51:52 +0000
commit44820dae1326476a6e1aa693421c61ae67bb13b0 (patch)
tree57c610639a41b7eecc4b6eec2d95c9bbd956548b /src/plugins/imageviewer/imageview.cpp
parente5262fba5fa705b97314715c2db2e0bb0e40236b (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.cpp61
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;