diff --git a/Source/Core/DolphinQt2/CMakeLists.txt b/Source/Core/DolphinQt2/CMakeLists.txt
index 7907501666..faf8b468f5 100644
--- a/Source/Core/DolphinQt2/CMakeLists.txt
+++ b/Source/Core/DolphinQt2/CMakeLists.txt
@@ -39,7 +39,6 @@ set(SRCS
GameList/GameListModel.cpp
GameList/GameTracker.cpp
GameList/ListProxyModel.cpp
- GameList/TableDelegate.cpp
Settings/GeneralPane.cpp
Settings/InterfacePane.cpp
)
diff --git a/Source/Core/DolphinQt2/DolphinQt2.vcxproj b/Source/Core/DolphinQt2/DolphinQt2.vcxproj
index e3afaee470..3f349a7996 100644
--- a/Source/Core/DolphinQt2/DolphinQt2.vcxproj
+++ b/Source/Core/DolphinQt2/DolphinQt2.vcxproj
@@ -94,7 +94,6 @@
-
@@ -129,7 +128,6 @@
-
@@ -154,7 +152,6 @@
-
diff --git a/Source/Core/DolphinQt2/DolphinQt2.vcxproj.filters b/Source/Core/DolphinQt2/DolphinQt2.vcxproj.filters
index ba0d04a1ac..0a4627d729 100644
--- a/Source/Core/DolphinQt2/DolphinQt2.vcxproj.filters
+++ b/Source/Core/DolphinQt2/DolphinQt2.vcxproj.filters
@@ -63,14 +63,10 @@
Config
-
Generated Files
-
- Generated Files
-
Generated Files
@@ -146,7 +142,6 @@
Config
-
diff --git a/Source/Core/DolphinQt2/GameList/GameList.cpp b/Source/Core/DolphinQt2/GameList/GameList.cpp
index 2ac53dc434..4a1c3d3278 100644
--- a/Source/Core/DolphinQt2/GameList/GameList.cpp
+++ b/Source/Core/DolphinQt2/GameList/GameList.cpp
@@ -22,7 +22,6 @@
#include "DolphinQt2/Config/PropertiesDialog.h"
#include "DolphinQt2/GameList/GameList.h"
#include "DolphinQt2/GameList/ListProxyModel.h"
-#include "DolphinQt2/GameList/TableDelegate.h"
#include "DolphinQt2/Settings.h"
static bool CompressCB(const std::string&, float, void*);
@@ -35,8 +34,6 @@ GameList::GameList(QWidget* parent) : QStackedWidget(parent)
m_list_proxy = new ListProxyModel(this);
m_list_proxy->setSourceModel(m_model);
- m_delegate = new TableDelegate(this);
-
MakeTableView();
MakeListView();
MakeEmptyView();
@@ -59,7 +56,7 @@ void GameList::MakeTableView()
{
m_table = new QTableView(this);
m_table->setModel(m_table_proxy);
- m_table->setItemDelegate(m_delegate);
+
m_table->setSelectionMode(QAbstractItemView::SingleSelection);
m_table->setSelectionBehavior(QAbstractItemView::SelectRows);
m_table->setAlternatingRowColors(true);
@@ -67,6 +64,7 @@ void GameList::MakeTableView()
m_table->setSortingEnabled(true);
m_table->setCurrentIndex(QModelIndex());
m_table->setContextMenuPolicy(Qt::CustomContextMenu);
+ m_table->setWordWrap(false);
connect(m_table, &QTableView::customContextMenuRequested, this, &GameList::ShowContextMenu);
diff --git a/Source/Core/DolphinQt2/GameList/GameList.h b/Source/Core/DolphinQt2/GameList/GameList.h
index 040d845ebe..750ed92c7a 100644
--- a/Source/Core/DolphinQt2/GameList/GameList.h
+++ b/Source/Core/DolphinQt2/GameList/GameList.h
@@ -13,8 +13,6 @@
#include "DolphinQt2/GameList/GameFile.h"
#include "DolphinQt2/GameList/GameListModel.h"
-class TableDelegate;
-
class GameList final : public QStackedWidget
{
Q_OBJECT
@@ -56,7 +54,6 @@ private:
void ConsiderViewChange();
GameListModel* m_model;
- TableDelegate* m_delegate;
QSortFilterProxyModel* m_table_proxy;
QSortFilterProxyModel* m_list_proxy;
diff --git a/Source/Core/DolphinQt2/GameList/GameListModel.cpp b/Source/Core/DolphinQt2/GameList/GameListModel.cpp
index c2796b1dda..30aaa9d77b 100644
--- a/Source/Core/DolphinQt2/GameList/GameListModel.cpp
+++ b/Source/Core/DolphinQt2/GameList/GameListModel.cpp
@@ -5,6 +5,8 @@
#include "DolphinQt2/GameList/GameListModel.h"
#include "DolphinQt2/Resources.h"
+const QSize GAMECUBE_BANNER_SIZE(96, 32);
+
GameListModel::GameListModel(QObject* parent) : QAbstractTableModel(parent)
{
connect(&m_tracker, &GameTracker::GameLoaded, this, &GameListModel::UpdateGame);
@@ -19,14 +21,29 @@ QVariant GameListModel::data(const QModelIndex& index, int role) const
return QVariant();
QSharedPointer game = m_games[index.row()];
- if (role == Qt::DisplayRole)
+ if (role == Qt::DecorationRole)
{
switch (index.column())
{
case COL_PLATFORM:
- return static_cast(game->GetPlatformID());
+ return Resources::GetPlatform(static_cast(game->GetPlatformID()));
+ case COL_COUNTRY:
+ return Resources::GetCountry(static_cast(game->GetCountryID()));
+ case COL_RATING:
+ return Resources::GetRating(game->GetRating());
case COL_BANNER:
- return game->GetBanner();
+ // GameCube banners are 96x32, but Wii banners are 192x64.
+ // TODO: use custom banners from rom directory like DolphinWX?
+ QPixmap banner = game->GetBanner();
+ banner.setDevicePixelRatio(std::max(banner.width() / GAMECUBE_BANNER_SIZE.width(),
+ banner.height() / GAMECUBE_BANNER_SIZE.height()));
+ return banner;
+ }
+ }
+ if (role == Qt::DisplayRole)
+ {
+ switch (index.column())
+ {
case COL_TITLE:
return game->GetLongName();
case COL_ID:
@@ -36,11 +53,7 @@ QVariant GameListModel::data(const QModelIndex& index, int role) const
case COL_MAKER:
return game->GetMaker();
case COL_SIZE:
- return game->GetFileSize();
- case COL_COUNTRY:
- return static_cast(game->GetCountryID());
- case COL_RATING:
- return game->GetRating();
+ return FormatSize(game->GetFileSize());
}
}
return QVariant();
diff --git a/Source/Core/DolphinQt2/GameList/ListProxyModel.cpp b/Source/Core/DolphinQt2/GameList/ListProxyModel.cpp
index f8c9a9463d..27394d6ab8 100644
--- a/Source/Core/DolphinQt2/GameList/ListProxyModel.cpp
+++ b/Source/Core/DolphinQt2/GameList/ListProxyModel.cpp
@@ -7,7 +7,7 @@
#include "DolphinQt2/GameList/GameListModel.h"
#include "DolphinQt2/GameList/ListProxyModel.h"
-static QSize LARGE_BANNER_SIZE(144, 48);
+const QSize LARGE_BANNER_SIZE(144, 48);
ListProxyModel::ListProxyModel(QObject* parent) : QSortFilterProxyModel(parent)
{
@@ -25,10 +25,12 @@ QVariant ListProxyModel::data(const QModelIndex& i, int role) const
}
else if (role == Qt::DecorationRole)
{
- return sourceModel()
- ->data(sourceModel()->index(source_index.row(), GameListModel::COL_BANNER), Qt::DisplayRole)
- .value()
- .scaled(LARGE_BANNER_SIZE, Qt::KeepAspectRatio, Qt::SmoothTransformation);
+ auto pixmap = sourceModel()
+ ->data(sourceModel()->index(source_index.row(), GameListModel::COL_BANNER),
+ Qt::DecorationRole)
+ .value();
+ return pixmap.scaled(LARGE_BANNER_SIZE * pixmap.devicePixelRatio(), Qt::KeepAspectRatio,
+ Qt::SmoothTransformation);
}
return QVariant();
}
diff --git a/Source/Core/DolphinQt2/GameList/TableDelegate.cpp b/Source/Core/DolphinQt2/GameList/TableDelegate.cpp
deleted file mode 100644
index f0f2fcaadf..0000000000
--- a/Source/Core/DolphinQt2/GameList/TableDelegate.cpp
+++ /dev/null
@@ -1,75 +0,0 @@
-// Copyright 2016 Dolphin Emulator Project
-// Licensed under GPLv2+
-// Refer to the license.txt file included.
-
-#include
-
-#include "DolphinQt2/GameList/GameFile.h"
-#include "DolphinQt2/GameList/GameListModel.h"
-#include "DolphinQt2/GameList/TableDelegate.h"
-#include "DolphinQt2/Resources.h"
-
-static QSize NORMAL_BANNER_SIZE(96, 32);
-
-TableDelegate::TableDelegate(QWidget* parent) : QStyledItemDelegate(parent)
-{
-}
-
-void TableDelegate::paint(QPainter* painter, const QStyleOptionViewItem& option,
- const QModelIndex& index) const
-{
- QVariant data = index.data(Qt::DisplayRole);
- switch (index.column())
- {
- case GameListModel::COL_PLATFORM:
- DrawPixmap(painter, option.rect, Resources::GetPlatform(data.toInt()));
- break;
- case GameListModel::COL_COUNTRY:
- DrawPixmap(painter, option.rect, Resources::GetCountry(data.toInt()));
- break;
- case GameListModel::COL_RATING:
- DrawPixmap(painter, option.rect, Resources::GetRating(data.toInt()));
- break;
- case GameListModel::COL_BANNER:
- DrawPixmap(painter, option.rect,
- data.value().scaled(NORMAL_BANNER_SIZE, Qt::KeepAspectRatio,
- Qt::SmoothTransformation));
- break;
- case GameListModel::COL_SIZE:
- painter->drawText(option.rect, Qt::AlignCenter, FormatSize(data.toULongLong()));
- break;
- // Fall through.
- case GameListModel::COL_ID:
- case GameListModel::COL_TITLE:
- case GameListModel::COL_DESCRIPTION:
- case GameListModel::COL_MAKER:
- painter->drawText(option.rect, Qt::AlignVCenter, data.toString());
- break;
- default:
- break;
- }
-}
-
-QSize TableDelegate::sizeHint(const QStyleOptionViewItem& option, const QModelIndex& index) const
-{
- switch (index.column())
- {
- case GameListModel::COL_PLATFORM:
- return Resources::GetPlatform(0).size();
- case GameListModel::COL_COUNTRY:
- return Resources::GetCountry(0).size();
- case GameListModel::COL_RATING:
- return Resources::GetRating(0).size();
- case GameListModel::COL_BANNER:
- return NORMAL_BANNER_SIZE;
- default:
- return QSize(0, 0);
- }
-}
-
-void TableDelegate::DrawPixmap(QPainter* painter, const QRect& rect, const QPixmap& pixmap) const
-{
- // We don't want to stretch the pixmap out, so center it in the rect.
- painter->drawPixmap(rect.left() + (rect.width() - pixmap.width()) / 2,
- rect.top() + (rect.height() - pixmap.height()) / 2, pixmap);
-}
diff --git a/Source/Core/DolphinQt2/GameList/TableDelegate.h b/Source/Core/DolphinQt2/GameList/TableDelegate.h
deleted file mode 100644
index f44c13fe10..0000000000
--- a/Source/Core/DolphinQt2/GameList/TableDelegate.h
+++ /dev/null
@@ -1,20 +0,0 @@
-// Copyright 2016 Dolphin Emulator Project
-// Licensed under GPLv2+
-// Refer to the license.txt file included.
-
-#pragma once
-
-#include
-
-class TableDelegate final : public QStyledItemDelegate
-{
- Q_OBJECT
-
-public:
- explicit TableDelegate(QWidget* parent = nullptr);
- void paint(QPainter* painter, const QStyleOptionViewItem& option, const QModelIndex& index) const;
- QSize sizeHint(const QStyleOptionViewItem& option, const QModelIndex& index) const;
-
-private:
- void DrawPixmap(QPainter* painter, const QRect& rect, const QPixmap& pixmap) const;
-};