diff options
| author | Felix (xq) Queißner <git@mq32.de> | 2020-06-10 02:01:44 +0200 |
|---|---|---|
| committer | Felix (xq) Queißner <git@mq32.de> | 2020-06-10 02:01:44 +0200 |
| commit | a2aaa3c71b8f7e1846a490525001342c6a17f437 (patch) | |
| tree | 0af23617d02948e3ce28ae13d03107aff1d3dc2a /src/browsertab.cpp | |
| parent | 9b93c4d7c5a450607eca0174b1899e56d6a09a48 (diff) | |
| download | kristall-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.cpp | 27 |
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/")) { |
