From 65134f73d6e87d1060ca6e4c144c4f9655b5caec Mon Sep 17 00:00:00 2001 From: Megamouse Date: Sat, 27 Jul 2019 10:57:07 +0200 Subject: [PATCH] Qt: properly scale icons in trophy manager --- rpcs3/rpcs3qt/trophy_manager_dialog.cpp | 46 ++++++++++++++++--------- 1 file changed, 30 insertions(+), 16 deletions(-) diff --git a/rpcs3/rpcs3qt/trophy_manager_dialog.cpp b/rpcs3/rpcs3qt/trophy_manager_dialog.cpp index f755780018..2596958766 100644 --- a/rpcs3/rpcs3qt/trophy_manager_dialog.cpp +++ b/rpcs3/rpcs3qt/trophy_manager_dialog.cpp @@ -1,4 +1,4 @@ -#include "trophy_manager_dialog.h" +#include "trophy_manager_dialog.h" #include "custom_table_widget_item.h" #include "table_item_delegate.h" #include "qt_utils.h" @@ -470,23 +470,22 @@ void trophy_manager_dialog::HandleRepaintUiRequest() void trophy_manager_dialog::ResizeGameIcon(int index) { QTableWidgetItem* item = m_game_table->item(index, GameColumns::GameIcon); - const QPixmap pixmap = item->data(Qt::UserRole).value(); - const QSize original_size = pixmap.size(); + const QPixmap icon = item->data(Qt::UserRole).value(); + const int dpr = devicePixelRatio(); - QPixmap new_pixmap = QPixmap(original_size); - new_pixmap.fill(m_game_icon_color); + QPixmap new_icon = QPixmap(icon.size() * dpr); + new_icon.setDevicePixelRatio(dpr); + new_icon.fill(m_game_icon_color); - QPainter painter(&new_pixmap); - - if (!pixmap.isNull()) + if (!icon.isNull()) { - painter.drawPixmap(QPoint(0, 0), pixmap); + QPainter painter(&new_icon); + painter.drawPixmap(QPoint(0, 0), icon); + painter.end(); } - painter.end(); - - const QPixmap scaled = new_pixmap.scaled(m_game_icon_size, Qt::KeepAspectRatio, Qt::TransformationMode::SmoothTransformation); - item->setData(Qt::DecorationRole, scaled); + const QPixmap scaled_icon = new_icon.scaled(m_game_icon_size * dpr, Qt::KeepAspectRatio, Qt::TransformationMode::SmoothTransformation); + item->setData(Qt::DecorationRole, scaled_icon); } void trophy_manager_dialog::ResizeGameIcons() @@ -507,12 +506,27 @@ void trophy_manager_dialog::ResizeTrophyIcons() if (m_game_combo->count() <= 0) return; - int db_pos = m_game_combo->currentData().toInt(); + const int db_pos = m_game_combo->currentData().toInt(); + const int dpr = devicePixelRatio(); + const int new_height = m_icon_height * dpr; for (int i = 0; i < m_trophy_table->rowCount(); ++i) { - int trophy_id = m_trophy_table->item(i, TrophyColumns::Id)->text().toInt(); - QPixmap scaled = m_trophies_db[db_pos]->trophy_images[trophy_id].scaledToHeight(m_icon_height, Qt::SmoothTransformation); + const int trophy_id = m_trophy_table->item(i, TrophyColumns::Id)->text().toInt(); + const QPixmap icon = m_trophies_db[db_pos]->trophy_images[trophy_id]; + + QPixmap new_icon = QPixmap(icon.size() * dpr); + new_icon.setDevicePixelRatio(dpr); + new_icon.fill(m_game_icon_color); + + if (!icon.isNull()) + { + QPainter painter(&new_icon); + painter.drawPixmap(QPoint(0, 0), icon); + painter.end(); + } + + const QPixmap scaled = new_icon.scaledToHeight(new_height, Qt::SmoothTransformation); m_trophy_table->item(i, TrophyColumns::Icon)->setData(Qt::DecorationRole, scaled); }