}
/*-------------------------------------------------------------------------------------*/
-ImageProvider::ImageProvider()
- : QQuickImageProvider(QQuickImageProvider::Image)
-{
-}
+class ImageResponse : public QQuickImageResponse
+{
+public:
+ ImageResponse(const QString &id, const QSize &requestedSize, QThreadPool *pool)
+ {
+ Q_UNUSED(pool)
+
+ const auto makeIcon = [](const QString &path) {
+ QImage image(128, 128, QImage::Format_ARGB32);
+ image.fill(Qt::GlobalColor::transparent);
+ QPainter painter(&image);
+ QSvgRenderer renderer(path);
+ renderer.render(&painter);
+ return image;
+ };
+
+ if (id == QLatin1String("fallbackWhite")) {
+ handleDone(makeIcon(QStringLiteral(":/client/theme/white/user.svg")));
+ return;
+ } else if (id == QLatin1String("fallbackBlack")) {
+ handleDone(makeIcon(QStringLiteral(":/client/theme/black/user.svg")));
+ return;
+ }
-QImage ImageProvider::requestImage(const QString &id, QSize *size, const QSize &requestedSize)
-{
- Q_UNUSED(size)
- Q_UNUSED(requestedSize)
- const auto makeIcon = [](const QString &path) {
- QImage image(128, 128, QImage::Format_ARGB32);
- image.fill(Qt::GlobalColor::transparent);
- QPainter painter(&image);
- QSvgRenderer renderer(path);
- renderer.render(&painter);
- return image;
- };
+ handleDone(UserModel::instance()->avatarById(id.toInt()));
+ }
- if (id == QLatin1String("fallbackWhite")) {
- return makeIcon(QStringLiteral(":/client/theme/white/user.svg"));
+ void handleDone(const QImage &image)
+ {
+ _image = image;
+ emit finished();
}
- if (id == QLatin1String("fallbackBlack")) {
- return makeIcon(QStringLiteral(":/client/theme/black/user.svg"));
+ QQuickTextureFactory *textureFactory() const override
+ {
+ return QQuickTextureFactory::textureFactoryForImage(_image);
}
- const int uid = id.toInt();
- return UserModel::instance()->avatarById(uid);
+private:
+ QImage _image;
+};
+
+QQuickImageResponse *ImageProvider::requestImageResponse(const QString &id, const QSize &requestedSize)
+{
+ const auto response = new class ImageResponse(id, requestedSize, &pool);
+ return response;
}
/*-------------------------------------------------------------------------------------*/
return roles;
}
}
+
+#include "usermodel.moc"
+
void buildUserList();
};
-class ImageProvider : public QQuickImageProvider
+class ImageProvider : public QQuickAsyncImageProvider
{
+ Q_OBJECT
+
public:
- ImageProvider();
- QImage requestImage(const QString &id, QSize *size, const QSize &requestedSize) override;
+ ImageProvider() = default;
+ QQuickImageResponse *requestImageResponse(const QString &id, const QSize &requestedSize) override;
};
class UserAppsModel : public QAbstractListModel