Nuke ImagePtrItemDelegate

This commit is contained in:
Mm2PL 2024-05-14 14:48:43 +02:00
parent fb8584a51d
commit 2e60142a47
No known key found for this signature in database
GPG key ID: 94AC9B80EFA15ED9
4 changed files with 0 additions and 110 deletions

View file

@ -673,7 +673,6 @@ set(SOURCE_FILES
widgets/listview/GenericListModel.hpp
widgets/listview/GenericListView.cpp
widgets/listview/GenericListView.hpp
widgets/listview/ImagePtrItemDelegate.hpp
widgets/settingspages/AboutPage.cpp
widgets/settingspages/AboutPage.hpp

View file

@ -1,92 +0,0 @@
#pragma once
#include "common/QLogging.hpp"
#include "messages/Image.hpp"
#include "messages/ImageSet.hpp"
#include <QModelIndex>
#include <QPainter>
#include <QStyledItemDelegate>
#include <Qt>
#include <QTableView>
namespace chatterino {
class ImagePtrItemDelegate : public QStyledItemDelegate
{
std::map<QString, ImagePtr> ownedImages_;
QTableView *view_;
public:
ImagePtrItemDelegate(QTableView *view)
: view_(view)
{
}
static constexpr auto IMAGE_URL_ROLE = Qt::UserRole + 1;
void paint(QPainter *painter, const QStyleOptionViewItem &option,
const QModelIndex &index) const override
{
auto url = index.data(IMAGE_URL_ROLE).toString();
if (auto it = this->ownedImages_.find(url);
it != this->ownedImages_.end())
{
auto img = it->second;
auto opt = img->pixmapOrLoad();
if (!opt) // wait for next time
{
if (img->isEmpty())
{
painter->drawText(option.rect, "[Error]");
}
else
{
painter->drawText(option.rect, "Loading");
}
return;
}
auto pixmap = *opt;
double aspectRatio =
double(pixmap.width()) / double(pixmap.height());
int width = int(option.rect.height() * aspectRatio);
auto outputRect = QRect(option.rect.topLeft(),
QSize(width, option.rect.height()));
if (option.rect.width() < width)
{
// too wide?
double revAspectRatio =
double(pixmap.height()) / double(pixmap.width());
int height = int(option.rect.width() * revAspectRatio);
outputRect = QRect(option.rect.topLeft(),
QSize(option.rect.width(), height));
if (option.rect.height() < height)
{
// give up and squish the image
outputRect = option.rect;
}
}
painter->drawPixmap(outputRect, pixmap, pixmap.rect());
}
auto img = Image::fromUrl(Url{url});
img->pixmapOrLoad([this, index]() {
// wait for it to parse
QTimer::singleShot(100, [this, index]() {
this->view_->repaint();
this->view_->update(index);
});
});
// You cannot stop me, clang-tidy
auto *bleh = const_cast<ImagePtrItemDelegate *>(this);
bleh->ownedImages_[url] = img;
}
QSize sizeHint(const QStyleOptionViewItem &option,
const QModelIndex &index) const override
{
return {32, 32};
}
};
} // namespace chatterino

View file

@ -41,9 +41,6 @@ ImageUploaderPage::ImageUploaderPage()
auto *view = layout.emplace<QTableView>().getElement();
view->setModel(model);
this->imgDelegate_ = new ImagePtrItemDelegate(view);
view->setItemDelegateForColumn(0, this->imgDelegate_);
view->setSelectionMode(QAbstractItemView::SingleSelection);
view->setSelectionBehavior(QAbstractItemView::SelectRows);
@ -131,9 +128,4 @@ ImageUploaderPage::ImageUploaderPage()
}
}
ImageUploaderPage::~ImageUploaderPage()
{
delete this->imgDelegate_;
}
} // namespace chatterino

View file

@ -8,17 +8,8 @@ class ImagePtrItemDelegate;
class ImageUploaderPage : public SettingsPage
{
ImagePtrItemDelegate *imgDelegate_;
public:
ImageUploaderPage();
~ImageUploaderPage() override;
ImageUploaderPage(ImageUploaderPage &cpy) = delete;
ImageUploaderPage(ImageUploaderPage &&move) = delete;
ImageUploaderPage &operator=(const ImageUploaderPage &copyAssign) = delete;
ImageUploaderPage &&operator=(const ImageUploaderPage &&moveAssign) =
delete;
};
} // namespace chatterino