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;
};
|