aboutsummaryrefslogtreecommitdiff
path: root/src/browsertab.cpp
diff options
context:
space:
mode:
authorFelix (xq) Queißner <git@mq32.de>2020-06-10 02:01:44 +0200
committerFelix (xq) Queißner <git@mq32.de>2020-06-10 02:01:44 +0200
commita2aaa3c71b8f7e1846a490525001342c6a17f437 (patch)
tree0af23617d02948e3ce28ae13d03107aff1d3dc2a /src/browsertab.cpp
parent9b93c4d7c5a450607eca0174b1899e56d6a09a48 (diff)
downloadkristall-a2aaa3c71b8f7e1846a490525001342c6a17f437.tar.gz
Improves image panning and zoom. Image view is now on a better default and usability.
Diffstat (limited to 'src/browsertab.cpp')
-rw-r--r--src/browsertab.cpp27
1 files changed, 22 insertions, 5 deletions
diff --git a/src/browsertab.cpp b/src/browsertab.cpp
index 086af38..d9f2ffa 100644
--- a/src/browsertab.cpp
+++ b/src/browsertab.cpp
@@ -21,6 +21,7 @@
#include <QFile>
#include <QMimeDatabase>
#include <QMimeType>
+#include <QImageReader>
#include <QGraphicsPixmapItem>
#include <QGraphicsTextItem>
@@ -65,8 +66,6 @@ BrowserTab::BrowserTab(MainWindow * mainWindow) :
this->ui->text_browser->setVisible(true);
this->ui->text_browser->setContextMenuPolicy(Qt::CustomContextMenu);
-
- this->ui->graphics_browser->setScene(&graphics_scene);
}
BrowserTab::~BrowserTab()
@@ -337,16 +336,34 @@ void BrowserTab::on_requestComplete(const QByteArray &data, const QString &mime)
else if(mime.startsWith("image/")) {
doc_type = Image;
+ QBuffer buffer;
+ buffer.setData(data);
+
+ QImageReader reader { &buffer };
+ reader.setAutoTransform(true);
+ reader.setAutoDetectImageFormat(true);
+
+
QImage img;
- if(img.loadFromData(data, nullptr))
+ if(reader.read(&img))
{
- this->graphics_scene.addPixmap(QPixmap::fromImage(img));
+ auto pixmap = QPixmap::fromImage(img);
+ this->graphics_scene.addPixmap(pixmap);
+ this->graphics_scene.setSceneRect(pixmap.rect());
}
else
{
- this->graphics_scene.addText("Failed to load picture!");
+ this->graphics_scene.addText(QString("Failed to load picture:\r\n%1").arg(reader.errorString()));
}
+ this->ui->graphics_browser->setScene(&graphics_scene);
+
+ auto * invoker = new QObject();
+ connect(invoker, &QObject::destroyed, [this]() {
+ this->ui->graphics_browser->fitInView(graphics_scene.sceneRect(), Qt::KeepAspectRatio);
+ });
+ invoker->deleteLater();
+
this->ui->graphics_browser->fitInView(graphics_scene.sceneRect(), Qt::KeepAspectRatio);
}
else if(mime.startsWith("video/") or mime.startsWith("audio/")) {