1
0
mirror of https://github.com/strawberrymusicplayer/strawberry synced 2024-12-30 18:17:26 +01:00

Fix pixelated source icon for currently playing song in playlist

This commit is contained in:
Jonas Kvinge 2020-08-25 21:51:23 +02:00
parent 343d6f9aff
commit 3948af80b8
2 changed files with 10 additions and 10 deletions

View File

@ -459,30 +459,31 @@ QString SongSourceDelegate::displayText(const QVariant &value, const QLocale&) c
QPixmap SongSourceDelegate::LookupPixmap(const Song::Source &source, const QSize &size) const { QPixmap SongSourceDelegate::LookupPixmap(const Song::Source &source, const QSize &size) const {
QPixmap pixmap; QPixmap pixmap;
if (cache_.find(Song::TextForSource(source), &pixmap)) { QString cache_key = QString("%1-%2x%3").arg(Song::TextForSource(source)).arg(size.width()).arg(size.height());
if (pixmap_cache_.find(cache_key, &pixmap)) {
return pixmap; return pixmap;
} }
QIcon icon(Song::IconForSource(source)); QIcon icon(Song::IconForSource(source));
pixmap = icon.pixmap(size.height()); pixmap = icon.pixmap(size.height());
cache_.insert(Song::TextForSource(source), pixmap); pixmap_cache_.insert(cache_key, pixmap);
return pixmap; return pixmap;
} }
void SongSourceDelegate::paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const { void SongSourceDelegate::paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &idx) const {
// Draw the background // Draw the background
PlaylistDelegateBase::paint(painter, option, index); PlaylistDelegateBase::paint(painter, option, idx);
QStyleOptionViewItem option_copy(option); QStyleOptionViewItem option_copy(option);
initStyleOption(&option_copy, index); initStyleOption(&option_copy, idx);
const Song::Source &source = Song::Source(index.data().toInt()); const Song::Source source = Song::Source(idx.data().toInt());
QPixmap pixmap = LookupPixmap(source, option_copy.decorationSize); QPixmap pixmap = LookupPixmap(source, option_copy.decorationSize);
QWidget *parent_widget = reinterpret_cast<QWidget*>(parent()); QWidget *parent_widget = qobject_cast<QWidget*>(parent());
int device_pixel_ratio = parent_widget->devicePixelRatio(); int device_pixel_ratio = parent_widget->devicePixelRatio();
// Draw the pixmap in the middle of the rectangle // Draw the pixmap in the middle of the rectangle
@ -492,4 +493,3 @@ void SongSourceDelegate::paint(QPainter *painter, const QStyleOptionViewItem &op
painter->drawPixmap(draw_rect, pixmap); painter->drawPixmap(draw_rect, pixmap);
} }

View File

@ -177,12 +177,12 @@ class SongSourceDelegate : public PlaylistDelegateBase {
public: public:
explicit SongSourceDelegate(QObject *parent); explicit SongSourceDelegate(QObject *parent);
QString displayText(const QVariant &value, const QLocale &locale) const override; QString displayText(const QVariant &value, const QLocale &locale) const override;
void paint(QPainter *paint, const QStyleOptionViewItem &option, const QModelIndex &index) const override; void paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &idx) const override;
private: private:
QPixmap LookupPixmap(const Song::Source &source, const QSize &size) const; QPixmap LookupPixmap(const Song::Source &source, const QSize &size) const;
mutable QPixmapCache cache_; mutable QPixmapCache pixmap_cache_;
}; };
#endif // PLAYLISTDELEGATES_H #endif // PLAYLISTDELEGATES_H