From 9f3f07f3ae931dfe6cdd5be33030e64b40adccf3 Mon Sep 17 00:00:00 2001 From: Megamouse Date: Tue, 25 Jul 2017 16:46:18 +0200 Subject: [PATCH] game_list: enable stepless icon sizes --- rpcs3/rpcs3qt/game_list_frame.cpp | 38 ++++++++++----------------- rpcs3/rpcs3qt/game_list_frame.h | 6 ++--- rpcs3/rpcs3qt/gui_settings.h | 15 +++-------- rpcs3/rpcs3qt/main_window.cpp | 43 ++++++++++++++----------------- 4 files changed, 41 insertions(+), 61 deletions(-) diff --git a/rpcs3/rpcs3qt/game_list_frame.cpp b/rpcs3/rpcs3qt/game_list_frame.cpp index 624274ebda..5676c19175 100644 --- a/rpcs3/rpcs3qt/game_list_frame.cpp +++ b/rpcs3/rpcs3qt/game_list_frame.cpp @@ -26,12 +26,13 @@ static const std::string m_class_name = "GameViewer"; inline std::string sstr(const QString& _in) { return _in.toUtf8().toStdString(); } +inline QSize sizeFromSlider(const int& pos) { return GUI::gl_icon_size_min + (GUI::gl_icon_size_max - GUI::gl_icon_size_min) * (pos / (float)GUI::gl_max_slider_pos); } game_list_frame::game_list_frame(std::shared_ptr settings, const Render_Creator& r_Creator, QWidget *parent) : QDockWidget(tr("Game List"), parent), xgui_settings(settings), m_Render_Creator(r_Creator) { m_isListLayout = xgui_settings->GetValue(GUI::gl_listMode).toBool(); - m_Icon_Size_Str = xgui_settings->GetValue(GUI::gl_iconSize).toString(); + m_icon_size_index = xgui_settings->GetValue(GUI::gl_iconSize).toInt(); m_Margin_Factor = xgui_settings->GetValue(GUI::gl_marginFactor).toReal(); m_Text_Factor = xgui_settings->GetValue(GUI::gl_textFactor).toReal(); m_showToolBar = xgui_settings->GetValue(GUI::gl_toolBarVisible).toBool(); @@ -39,18 +40,6 @@ game_list_frame::game_list_frame(std::shared_ptr settings, const R m_oldLayoutIsList = m_isListLayout; - // get icon size from list - int icon_size_index = 0; - for (int i = 0; i < GUI::gl_icon_size.count(); i++) - { - if (GUI::gl_icon_size.at(i).first == m_Icon_Size_Str) - { - m_Icon_Size = GUI::gl_icon_size.at(i).second; - icon_size_index = i; - break; - } - } - // Save factors for first setup xgui_settings->SetValue(GUI::gl_iconColor, m_Icon_Color); xgui_settings->SetValue(GUI::gl_marginFactor, m_Margin_Factor); @@ -123,8 +112,8 @@ game_list_frame::game_list_frame(std::shared_ptr settings, const R // Icon Size Slider m_Slider_Size = new QSlider(Qt::Horizontal , m_Tool_Bar); - m_Slider_Size->setRange(0, GUI::gl_icon_size.size() - 1); - m_Slider_Size->setSliderPosition(icon_size_index); + m_Slider_Size->setRange(0, GUI::gl_max_slider_pos); + m_Slider_Size->setSliderPosition(m_icon_size_index); m_Slider_Size->setFixedWidth(m_Tool_Bar->height() * 3); m_Tool_Bar->addWidget(m_Search_Bar); @@ -148,7 +137,8 @@ game_list_frame::game_list_frame(std::shared_ptr settings, const R RepaintToolBarIcons(); - bool showText = (m_Icon_Size_Str != GUI::gl_icon_key_small && m_Icon_Size_Str != GUI::gl_icon_key_tiny); + bool showText = m_icon_size_index < GUI::gl_max_slider_pos; + m_Icon_Size = sizeFromSlider(m_icon_size_index); m_xgrid = new game_list_grid(m_Icon_Size, m_Icon_Color, m_Margin_Factor, m_Text_Factor, showText); gameList = new game_list(); @@ -730,17 +720,17 @@ void game_list_frame::RemoveCustomConfiguration(int row) } } -void game_list_frame::ResizeIcons(const QString& sizeStr, const QSize& size, const int& index) +void game_list_frame::ResizeIcons(const int& sliderPos) { - m_Icon_Size_Str = sizeStr; - m_Icon_Size = size; + m_icon_size_index = sliderPos; + m_Icon_Size = sizeFromSlider(sliderPos); - if (m_Slider_Size->value() != index) + if (m_Slider_Size->value() != sliderPos) { - m_Slider_Size->setSliderPosition(index); + m_Slider_Size->setSliderPosition(sliderPos); } - xgui_settings->SetValue(GUI::gl_iconSize, m_Icon_Size_Str); + xgui_settings->SetValue(GUI::gl_iconSize, sliderPos); for (size_t i = 0; i < m_game_data.size(); i++) { @@ -894,9 +884,9 @@ void game_list_frame::PopulateGameGrid(uint maxCols, const QSize& image_size, co m_xgrid->deleteLater(); - bool showText = m_Icon_Size_Str != GUI::gl_icon_key_small && m_Icon_Size_Str != GUI::gl_icon_key_tiny; + bool showText = m_icon_size_index > GUI::gl_max_slider_pos * 2 / 5; - if (m_Icon_Size_Str == GUI::gl_icon_key_medium) + if (m_icon_size_index < GUI::gl_max_slider_pos * 2 / 3) { m_xgrid = new game_list_grid(image_size, image_color, m_Margin_Factor, m_Text_Factor * 2, showText); } diff --git a/rpcs3/rpcs3qt/game_list_frame.h b/rpcs3/rpcs3qt/game_list_frame.h index 20b6d63477..bb5d40277d 100644 --- a/rpcs3/rpcs3qt/game_list_frame.h +++ b/rpcs3/rpcs3qt/game_list_frame.h @@ -187,8 +187,8 @@ public: /** Saves settings. Public so that main frame can save this when a caching of column widths is needed for settings backup */ void SaveSettings(); - /** Resize Gamelist Icons to size */ - void ResizeIcons(const QString& sizeStr, const QSize& size, const int& index); + /** Resize Gamelist Icons to size given by slider position */ + void ResizeIcons(const int& sliderPos); public Q_SLOTS: void SetListMode(const bool& isList); @@ -278,7 +278,7 @@ private: bool m_showToolBar = true; std::vector m_game_data; QSize m_Icon_Size; - QString m_Icon_Size_Str; + int m_icon_size_index; QColor m_Icon_Color; qreal m_Margin_Factor; qreal m_Text_Factor; diff --git a/rpcs3/rpcs3qt/gui_settings.h b/rpcs3/rpcs3qt/gui_settings.h index 7a7bc1f9f9..5ff1ece1f6 100644 --- a/rpcs3/rpcs3qt/gui_settings.h +++ b/rpcs3/rpcs3qt/gui_settings.h @@ -35,17 +35,10 @@ typedef QList q_size_list; namespace GUI { - const QString gl_icon_key_tiny = "tiny"; - const QString gl_icon_key_small = "small"; - const QString gl_icon_key_medium = "medium"; - const QString gl_icon_key_large = "large"; + const QSize gl_icon_size_min = QSize(40, 22); + const QSize gl_icon_size_max = QSize(320, 176); - const q_size_list gl_icon_size = { - { gl_icon_key_tiny, QSize(40, 22) }, - { gl_icon_key_small, QSize(80, 44) }, - { gl_icon_key_medium, QSize(160, 88) }, - { gl_icon_key_large, QSize(320, 176) } - }; + const int gl_max_slider_pos = 100; const QString main_window = "main_window"; const QString game_list = "GameList"; @@ -95,7 +88,7 @@ namespace GUI const GUI_SAVE gl_sortAsc = GUI_SAVE( game_list, "sortAsc", true ); const GUI_SAVE gl_sortCol = GUI_SAVE( game_list, "sortCol", 1 ); const GUI_SAVE gl_state = GUI_SAVE( game_list, "state", QByteArray() ); - const GUI_SAVE gl_iconSize = GUI_SAVE( game_list, "iconSize", gl_icon_key_small ); + const GUI_SAVE gl_iconSize = GUI_SAVE( game_list, "iconSize", gl_max_slider_pos / 2); const GUI_SAVE gl_iconColor = GUI_SAVE( game_list, "iconColor", gl_icon_color); const GUI_SAVE gl_listMode = GUI_SAVE( game_list, "listMode", true ); const GUI_SAVE gl_textFactor = GUI_SAVE( game_list, "textFactor", (qreal) 2.0 ); diff --git a/rpcs3/rpcs3qt/main_window.cpp b/rpcs3/rpcs3qt/main_window.cpp index 8472aba635..e7c4817f3c 100644 --- a/rpcs3/rpcs3qt/main_window.cpp +++ b/rpcs3/rpcs3qt/main_window.cpp @@ -75,19 +75,8 @@ void main_window::Init() appIcon = QIcon(":/rpcs3.ico"); // add toolbar widgets (crappy Qt designer is not able to) - ui->sizeSlider->setRange(0, GUI::gl_icon_size.size() - 1); - // get icon size from list - int icon_size_index = 0; - QString icon_Size_Str = guiSettings->GetValue(GUI::gl_iconSize).toString(); - for (int i = 0; i < GUI::gl_icon_size.count(); i++) - { - if (GUI::gl_icon_size.at(i).first == icon_Size_Str) - { - icon_size_index = i; - break; - } - } - ui->sizeSlider->setSliderPosition(icon_size_index); + ui->sizeSlider->setRange(0, GUI::gl_max_slider_pos); + ui->sizeSlider->setSliderPosition(guiSettings->GetValue(GUI::gl_iconSize).toInt()); ui->toolBar->addWidget(ui->sizeSliderContainer); ui->toolBar->addSeparator(); ui->toolBar->addWidget(ui->searchBar); @@ -1162,22 +1151,29 @@ void main_window::CreateConnects() { ui->sizeSlider->setSliderPosition(index); } - gameListFrame->ResizeIcons(GUI::gl_icon_size.at(index).first, GUI::gl_icon_size.at(index).second, index); + gameListFrame->ResizeIcons(index); }; connect(iconSizeActGroup, &QActionGroup::triggered, [=](QAction* act) { int index; if (act == ui->setIconSizeTinyAct) index = 0; - else if (act == ui->setIconSizeSmallAct) index = 1; - else if (act == ui->setIconSizeMediumAct) index = 2; - else index = 3; + else if (act == ui->setIconSizeSmallAct) index = GUI::gl_max_slider_pos / 3; + else if (act == ui->setIconSizeMediumAct) index = GUI::gl_max_slider_pos * 2 / 3; + else index = GUI::gl_max_slider_pos; resizeIcons(index); }); connect (gameListFrame, &game_list_frame::RequestIconSizeActSet, [=](const int& idx) { - iconSizeActGroup->actions().at(idx)->trigger(); + int index = GUI::gl_max_slider_pos / 4; + + if (idx < index) ui->setIconSizeTinyAct->setChecked(true); + else if (idx < index * 2) ui->setIconSizeSmallAct->setChecked(true); + else if (idx < index * 3) ui->setIconSizeMediumAct->setChecked(true); + else ui->setIconSizeLargeAct->setChecked(true); + + resizeIcons(idx); }); connect(gameListFrame, &game_list_frame::RequestListModeActSet, [=](const bool& isList) { @@ -1339,11 +1335,12 @@ void main_window::ConfigureGuiFromSettings(bool configureAll) ui->showCatUnknownAct->setChecked(guiSettings->GetCategoryVisibility(Category::Unknown_Cat)); ui->showCatOtherAct->setChecked(guiSettings->GetCategoryVisibility(Category::Others)); - QString key = guiSettings->GetValue(GUI::gl_iconSize).toString(); - if (key == GUI::gl_icon_key_large) ui->setIconSizeLargeAct->setChecked(true); - else if (key == GUI::gl_icon_key_medium) ui->setIconSizeMediumAct->setChecked(true); - else if (key == GUI::gl_icon_key_small) ui->setIconSizeSmallAct->setChecked(true); - else ui->setIconSizeTinyAct->setChecked(true); + int idx = guiSettings->GetValue(GUI::gl_iconSize).toInt(); + int index = GUI::gl_max_slider_pos / 4; + if (idx < index) ui->setIconSizeTinyAct->setChecked(true); + else if (idx < index * 2) ui->setIconSizeSmallAct->setChecked(true); + else if (idx < index * 3) ui->setIconSizeMediumAct->setChecked(true); + else ui->setIconSizeLargeAct->setChecked(true); bool isListMode = guiSettings->GetValue(GUI::gl_listMode).toBool(); if (isListMode) ui->setlistModeListAct->setChecked(true);