feat: Add grid view with round icons for game list

- Implement toggle between list and grid view modes (Ctrl+G)
- Add round icon rendering with anti-aliased circular clipping
- Display game titles below icons in grid layout
- Create flat model for grid view showing only games
- Add View menu option and Ctrl+G hotkey for toggling
- Implement separate filtering logic for both view modes
- Update grid layout with proper spacing and text alignment
- Maintain existing tree view functionality and features
- Support double-click to launch and right-click context menus in both modes

The grid view provides a more visual game browsing experience while
preserving all existing functionality of the original list view.

Signed-off-by: Zephyron <zephyron@citron-emu.org>
This commit is contained in:
Zephyron
2025-05-30 16:45:02 +10:00
parent f40624bf25
commit 8671e067ae
7 changed files with 286 additions and 8 deletions

View File

@@ -1,4 +1,5 @@
// SPDX-FileCopyrightText: 2014 Citra Emulator Project
// SPDX-FileCopyrightText: 2025 citron Emulator Project
// SPDX-License-Identifier: GPL-2.0-or-later
#include <cinttypes>
@@ -1344,6 +1345,7 @@ void GMainWindow::InitializeHotkeys() {
LinkActionShortcut(ui->action_Pause, QStringLiteral("Continue/Pause Emulation"));
LinkActionShortcut(ui->action_Stop, QStringLiteral("Stop Emulation"));
LinkActionShortcut(ui->action_Show_Filter_Bar, QStringLiteral("Toggle Filter Bar"));
LinkActionShortcut(ui->action_Toggle_Grid_View, QStringLiteral("Toggle Grid View"));
LinkActionShortcut(ui->action_Show_Status_Bar, QStringLiteral("Toggle Status Bar"));
LinkActionShortcut(ui->action_Fullscreen, QStringLiteral("Fullscreen"));
LinkActionShortcut(ui->action_Capture_Screenshot, QStringLiteral("Capture Screenshot"));
@@ -1441,6 +1443,8 @@ void GMainWindow::RestoreUIState() {
ui->action_Show_Filter_Bar->setChecked(UISettings::values.show_filter_bar.GetValue());
game_list->SetFilterVisible(ui->action_Show_Filter_Bar->isChecked());
ui->action_Toggle_Grid_View->setChecked(UISettings::values.game_list_grid_view.GetValue());
ui->action_Show_Status_Bar->setChecked(UISettings::values.show_status_bar.GetValue());
statusBar()->setVisible(ui->action_Show_Status_Bar->isChecked());
Debugger::ToggleConsole();
@@ -1558,6 +1562,7 @@ void GMainWindow::ConnectMenuEvents() {
connect_menu(ui->action_Display_Dock_Widget_Headers, &GMainWindow::OnDisplayTitleBars);
connect_menu(ui->action_Show_Filter_Bar, &GMainWindow::OnToggleFilterBar);
connect_menu(ui->action_Show_Status_Bar, &GMainWindow::OnToggleStatusBar);
connect_menu(ui->action_Toggle_Grid_View, &GMainWindow::OnToggleGridView);
connect_menu(ui->action_Reset_Window_Size_720, &GMainWindow::ResetWindowSize720);
connect_menu(ui->action_Reset_Window_Size_900, &GMainWindow::ResetWindowSize900);
@@ -5341,3 +5346,7 @@ int main(int argc, char* argv[]) {
detached_tasks.WaitForAllTasks();
return result;
}
void GMainWindow::OnToggleGridView() {
game_list->ToggleViewMode();
}