aboutsummaryrefslogtreecommitdiff
path: root/src
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
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')
-rw-r--r--src/browsertab.cpp27
-rw-r--r--src/browsertab.ui10
-rw-r--r--src/gophermaprenderer.cpp2
-rw-r--r--src/kristall.pro5
4 files changed, 36 insertions, 8 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/")) {
diff --git a/src/browsertab.ui b/src/browsertab.ui
index 6903bd8..7be4d3c 100644
--- a/src/browsertab.ui
+++ b/src/browsertab.ui
@@ -164,7 +164,10 @@ p, li { white-space: pre-wrap; }
</widget>
</item>
<item>
- <widget class="QGraphicsView" name="graphics_browser">
+ <widget class="InteractiveView" name="graphics_browser">
+ <property name="interactive">
+ <bool>true</bool>
+ </property>
<property name="dragMode">
<enum>QGraphicsView::ScrollHandDrag</enum>
</property>
@@ -190,6 +193,11 @@ p, li { white-space: pre-wrap; }
<header>mediaplayer.hpp</header>
<container>1</container>
</customwidget>
+ <customwidget>
+ <class>InteractiveView</class>
+ <extends>QGraphicsView</extends>
+ <header location="global">interactiveview.hpp</header>
+ </customwidget>
</customwidgets>
<resources>
<include location="icons.qrc"/>
diff --git a/src/gophermaprenderer.cpp b/src/gophermaprenderer.cpp
index 89f3905..e2fe434 100644
--- a/src/gophermaprenderer.cpp
+++ b/src/gophermaprenderer.cpp
@@ -137,8 +137,6 @@ std::unique_ptr<QTextDocument> GophermapRenderer::render(const QByteArray &input
QString title = items.at(0);
- // 1Phlog /phlog octotherp.org 70 +
-
if (type == 'i')
{
cursor.insertText(title + "\n", standard);
diff --git a/src/kristall.pro b/src/kristall.pro
index dc69b8b..0321179 100644
--- a/src/kristall.pro
+++ b/src/kristall.pro
@@ -18,7 +18,11 @@ DEFINES += QT_DEPRECATED_WARNINGS
QMAKE_CFLAGS += -Wno-unused-parameter
QMAKE_CXXFLAGS += -Wno-unused-parameter
+INCLUDEPATH += $$PWD/../lib/luis-l-gist/
+DEPENDPATH += $$PWD/../lib/luis-l-gist/
+
SOURCES += \
+ ../lib/luis-l-gist/interactiveview.cpp \
browsertab.cpp \
documentoutlinemodel.cpp \
documentstyle.cpp \
@@ -39,6 +43,7 @@ SOURCES += \
webclient.cpp
HEADERS += \
+ ../lib/luis-l-gist/interactiveview.hpp \
browsertab.hpp \
documentoutlinemodel.hpp \
documentstyle.hpp \