diff --git a/src/citra_qt/configuration/config.cpp b/src/citra_qt/configuration/config.cpp index 5261f4c4c..601c8b0e3 100644 --- a/src/citra_qt/configuration/config.cpp +++ b/src/citra_qt/configuration/config.cpp @@ -198,6 +198,7 @@ void Config::ReadValues() { qt_config->endGroup(); UISettings::values.single_window_mode = qt_config->value("singleWindowMode", true).toBool(); + UISettings::values.fullscreen = qt_config->value("fullscreen", false).toBool(); UISettings::values.display_titlebar = qt_config->value("displayTitleBars", true).toBool(); UISettings::values.show_filter_bar = qt_config->value("showFilterBar", true).toBool(); UISettings::values.show_status_bar = qt_config->value("showStatusBar", true).toBool(); @@ -331,6 +332,7 @@ void Config::SaveValues() { qt_config->endGroup(); qt_config->setValue("singleWindowMode", UISettings::values.single_window_mode); + qt_config->setValue("fullscreen", UISettings::values.fullscreen); qt_config->setValue("displayTitleBars", UISettings::values.display_titlebar); qt_config->setValue("showFilterBar", UISettings::values.show_filter_bar); qt_config->setValue("showStatusBar", UISettings::values.show_status_bar); diff --git a/src/citra_qt/main.cpp b/src/citra_qt/main.cpp index 8adbcfe86..3946bb153 100644 --- a/src/citra_qt/main.cpp +++ b/src/citra_qt/main.cpp @@ -244,6 +244,8 @@ void GMainWindow::InitializeHotkeys() { RegisterHotkey("Main Window", "Load File", QKeySequence::Open); RegisterHotkey("Main Window", "Swap Screens", QKeySequence::NextChild); RegisterHotkey("Main Window", "Start Emulation"); + RegisterHotkey("Main Window", "Fullscreen", QKeySequence::FullScreen); + RegisterHotkey("Main Window", "Exit Fullscreen", QKeySequence::Cancel, Qt::ApplicationShortcut); LoadHotkeys(); connect(GetHotkey("Main Window", "Load File", this), SIGNAL(activated()), this, @@ -252,6 +254,16 @@ void GMainWindow::InitializeHotkeys() { SLOT(OnStartGame())); connect(GetHotkey("Main Window", "Swap Screens", render_window), SIGNAL(activated()), this, SLOT(OnSwapScreens())); + connect(GetHotkey("Main Window", "Fullscreen", render_window), &QShortcut::activated, + ui.action_Fullscreen, &QAction::trigger); + connect(GetHotkey("Main Window", "Fullscreen", render_window), &QShortcut::activatedAmbiguously, + ui.action_Fullscreen, &QAction::trigger); + connect(GetHotkey("Main Window", "Exit Fullscreen", this), &QShortcut::activated, this, [&] { + if (emulation_running) { + ui.action_Fullscreen->setChecked(false); + ToggleFullscreen(); + } + }); } void GMainWindow::SetDefaultUIGeometry() { @@ -280,6 +292,8 @@ void GMainWindow::RestoreUIState() { ui.action_Single_Window_Mode->setChecked(UISettings::values.single_window_mode); ToggleWindowMode(); + ui.action_Fullscreen->setChecked(UISettings::values.fullscreen); + ui.action_Display_Dock_Widget_Headers->setChecked(UISettings::values.display_titlebar); OnDisplayTitleBars(ui.action_Display_Dock_Widget_Headers->isChecked()); @@ -323,6 +337,8 @@ void GMainWindow::ConnectMenuEvents() { ui.action_Show_Filter_Bar->setShortcut(tr("CTRL+F")); connect(ui.action_Show_Filter_Bar, &QAction::triggered, this, &GMainWindow::OnToggleFilterBar); connect(ui.action_Show_Status_Bar, &QAction::triggered, statusBar(), &QStatusBar::setVisible); + ui.action_Fullscreen->setShortcut(GetHotkey("Main Window", "Fullscreen", this)->key()); + connect(ui.action_Fullscreen, &QAction::triggered, this, &GMainWindow::ToggleFullscreen); } void GMainWindow::OnDisplayTitleBars(bool show) { @@ -460,6 +476,7 @@ void GMainWindow::BootGame(const QString& filename) { render_window->setFocus(); emulation_running = true; + ToggleFullscreen(); OnStartGame(); } @@ -624,6 +641,29 @@ void GMainWindow::OnStopGame() { ShutdownGame(); } +void GMainWindow::ToggleFullscreen() { + if (!emulation_running) { + return; + } + if (ui.action_Fullscreen->isChecked()) { + if (ui.action_Single_Window_Mode->isChecked()) { + ui.menubar->hide(); + statusBar()->hide(); + showFullScreen(); + } else { + render_window->showFullScreen(); + } + } else { + if (ui.action_Single_Window_Mode->isChecked()) { + statusBar()->setVisible(ui.action_Show_Status_Bar->isChecked()); + ui.menubar->show(); + showNormal(); + } else { + render_window->showNormal(); + } + } +} + void GMainWindow::ToggleWindowMode() { if (ui.action_Single_Window_Mode->isChecked()) { // Render in the main window... @@ -784,6 +824,7 @@ void GMainWindow::closeEvent(QCloseEvent* event) { UISettings::values.microprofile_visible = microProfileDialog->isVisible(); #endif UISettings::values.single_window_mode = ui.action_Single_Window_Mode->isChecked(); + UISettings::values.fullscreen = ui.action_Fullscreen->isChecked(); UISettings::values.display_titlebar = ui.action_Display_Dock_Widget_Headers->isChecked(); UISettings::values.show_filter_bar = ui.action_Show_Filter_Bar->isChecked(); UISettings::values.show_status_bar = ui.action_Show_Status_Bar->isChecked(); diff --git a/src/citra_qt/main.h b/src/citra_qt/main.h index d59a6d67d..4efab9a4a 100644 --- a/src/citra_qt/main.h +++ b/src/citra_qt/main.h @@ -127,6 +127,7 @@ private slots: void OnConfigure(); void OnToggleFilterBar(); void OnDisplayTitleBars(bool); + void ToggleFullscreen(); void ToggleWindowMode(); void OnCreateGraphicsSurfaceViewer(); void OnCoreError(Core::System::ResultStatus, std::string); diff --git a/src/citra_qt/main.ui b/src/citra_qt/main.ui index b13d578f5..617343e51 100644 --- a/src/citra_qt/main.ui +++ b/src/citra_qt/main.ui @@ -45,7 +45,7 @@ 0 0 1081 - 19 + 21 @@ -85,6 +85,7 @@ + @@ -196,6 +197,14 @@ Create Pica Surface Viewer + + + true + + + Fullscreen + + diff --git a/src/citra_qt/ui_settings.h b/src/citra_qt/ui_settings.h index d85c92765..ffbe14bc3 100644 --- a/src/citra_qt/ui_settings.h +++ b/src/citra_qt/ui_settings.h @@ -31,6 +31,7 @@ struct Values { bool microprofile_visible; bool single_window_mode; + bool fullscreen; bool display_titlebar; bool show_filter_bar; bool show_status_bar; @@ -53,4 +54,5 @@ struct Values { }; extern Values values; -} + +} // namespace UISettings