summary refs log tree commit diff
path: root/src
diff options
context:
space:
mode:
authorNicolas Werner <nicolas.werner@hotmail.de>2019-11-08 14:39:45 +0100
committerNicolas Werner <nicolas.werner@hotmail.de>2019-11-23 20:06:15 +0100
commit2bfb885b4739dae46a35cfc5b1c62767b3900da9 (patch)
tree753fa8ae89671057adea30cb0e0cc53c0a4c0cf0 /src
parentMake replies format nicer (diff)
downloadnheko-2bfb885b4739dae46a35cfc5b1c62767b3900da9.tar.xz
optionally use QQuickWidget and replace ColorOverlay -> colorImageProvider
Diffstat (limited to 'src')
-rw-r--r--src/ColorImageProvider.cpp30
-rw-r--r--src/ColorImageProvider.h11
-rw-r--r--src/timeline2/DelegateChooser.cpp1
-rw-r--r--src/timeline2/TimelineModel.cpp2
-rw-r--r--src/timeline2/TimelineViewManager.cpp14
-rw-r--r--src/timeline2/TimelineViewManager.h7
6 files changed, 63 insertions, 2 deletions
diff --git a/src/ColorImageProvider.cpp b/src/ColorImageProvider.cpp
new file mode 100644

index 00000000..92e4732b --- /dev/null +++ b/src/ColorImageProvider.cpp
@@ -0,0 +1,30 @@ +#include "ColorImageProvider.h" + +#include "Logging.h" +#include <QPainter> + +QPixmap +ColorImageProvider::requestPixmap(const QString &id, QSize *size, const QSize &) +{ + auto args = id.split('?'); + + nhlog::ui()->info("Loading {}, source is {}", id.toStdString(), args[0].toStdString()); + + QPixmap source(args[0]); + + if (size) + *size = QSize(source.width(), source.height()); + + if (args.size() < 2) + return source; + + QColor color(args[1]); + + QPixmap colorized = source; + QPainter painter(&colorized); + painter.setCompositionMode(QPainter::CompositionMode_SourceIn); + painter.fillRect(colorized.rect(), color); + painter.end(); + + return colorized; +} diff --git a/src/ColorImageProvider.h b/src/ColorImageProvider.h new file mode 100644
index 00000000..21f36c12 --- /dev/null +++ b/src/ColorImageProvider.h
@@ -0,0 +1,11 @@ +#include <QQuickImageProvider> + +class ColorImageProvider : public QQuickImageProvider +{ +public: + ColorImageProvider() + : QQuickImageProvider(QQuickImageProvider::Pixmap) + {} + + QPixmap requestPixmap(const QString &id, QSize *size, const QSize &requestedSize) override; +}; diff --git a/src/timeline2/DelegateChooser.cpp b/src/timeline2/DelegateChooser.cpp
index 6aeea69b..632a2a64 100644 --- a/src/timeline2/DelegateChooser.cpp +++ b/src/timeline2/DelegateChooser.cpp
@@ -119,7 +119,6 @@ DelegateChooser::DelegateIncubator::statusChanged(QQmlIncubator::Status status) chooser.child = dynamic_cast<QQuickItem *>(object()); if (chooser.child == nullptr) { nhlog::ui()->error("Delegate has to be derived of Item!"); - delete chooser.child; return; } diff --git a/src/timeline2/TimelineModel.cpp b/src/timeline2/TimelineModel.cpp
index b2b6f803..ab7d3d47 100644 --- a/src/timeline2/TimelineModel.cpp +++ b/src/timeline2/TimelineModel.cpp
@@ -844,7 +844,7 @@ TimelineModel::replyAction(QString id) return related_; }, event); - related.type = mtx::events::getMessageType(boost::apply_visitor( + related.type = mtx::events::getMessageType(boost::apply_visitor( [](const auto &e) -> std::string { return eventMsgType(e); }, event)); related.quoted_body = boost::apply_visitor( [](const auto &e) -> QString { return eventFormattedBody(e); }, event); diff --git a/src/timeline2/TimelineViewManager.cpp b/src/timeline2/TimelineViewManager.cpp
index a054bc78..d733ad90 100644 --- a/src/timeline2/TimelineViewManager.cpp +++ b/src/timeline2/TimelineViewManager.cpp
@@ -8,6 +8,7 @@ #include <QStandardPaths> #include "ChatPage.h" +#include "ColorImageProvider.h" #include "DelegateChooser.h" #include "Logging.h" #include "MxcImageProvider.h" @@ -51,6 +52,7 @@ TimelineViewManager::updateColorPalette() TimelineViewManager::TimelineViewManager(QWidget *parent) : imgProvider(new MxcImageProvider()) + , colorImgProvider(new ColorImageProvider()) { qmlRegisterUncreatableMetaObject(qml_mtx_events::staticMetaObject, "com.github.nheko", @@ -61,12 +63,24 @@ TimelineViewManager::TimelineViewManager(QWidget *parent) qmlRegisterType<DelegateChoice>("com.github.nheko", 1, 0, "DelegateChoice"); qmlRegisterType<DelegateChooser>("com.github.nheko", 1, 0, "DelegateChooser"); +#ifdef USE_QUICK_VIEW view = new QQuickView(); container = QWidget::createWindowContainer(view, parent); +#else + view = new QQuickWidget(parent); + container = view; + view->setResizeMode(QQuickWidget::SizeRootObjectToView); + container->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding); + + connect(view, &QQuickWidget::statusChanged, this, [](QQuickWidget::Status status) { + nhlog::ui()->debug("Status changed to {}", status); + }); +#endif container->setMinimumSize(200, 200); view->rootContext()->setContextProperty("timelineManager", this); updateColorPalette(); view->engine()->addImageProvider("MxcImage", imgProvider); + view->engine()->addImageProvider("colorimage", colorImgProvider); view->setSource(QUrl("qrc:///qml/TimelineView.qml")); connect(dynamic_cast<ChatPage *>(parent), diff --git a/src/timeline2/TimelineViewManager.h b/src/timeline2/TimelineViewManager.h
index b14e78ff..691c8ddb 100644 --- a/src/timeline2/TimelineViewManager.h +++ b/src/timeline2/TimelineViewManager.h
@@ -1,6 +1,7 @@ #pragma once #include <QQuickView> +#include <QQuickWidget> #include <QSharedPointer> #include <QWidget> @@ -16,6 +17,7 @@ #pragma GCC diagnostic ignored "-Wunused-parameter" class MxcImageProvider; +class ColorImageProvider; class TimelineViewManager : public QObject { @@ -99,10 +101,15 @@ public slots: uint64_t dsize); private: +#ifdef USE_QUICK_VIEW QQuickView *view; +#else + QQuickWidget *view; +#endif QWidget *container; TimelineModel *timeline_ = nullptr; MxcImageProvider *imgProvider; + ColorImageProvider *colorImgProvider; QHash<QString, QSharedPointer<TimelineModel>> models; };