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:
parent
343d6f9aff
commit
3948af80b8
@ -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);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -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
|
||||||
|
Loading…
Reference in New Issue
Block a user