[XConfig] Implementation of XConfig

This commit is contained in:
Gliniak
2026-05-17 21:30:10 +02:00
committed by Radosław Gliński
parent f88bfbe41e
commit 99ea6da18a
31 changed files with 2020 additions and 846 deletions

View File

@@ -19,6 +19,8 @@
#if defined(__clang__)
#pragma clang diagnostic pop
#endif
#include "xenia/app/console_settings_dialog.h"
#include "xenia/base/assert.h"
#include "xenia/base/clock.h"
#include "xenia/base/cvar.h"
@@ -36,6 +38,7 @@
#include "xenia/kernel/xam/profile_manager.h"
#include "xenia/kernel/xam/xam_module.h"
#include "xenia/kernel/xam/xam_state.h"
#include "xenia/kernel/xconfig.h"
#include "xenia/ui/file_picker.h"
#include "xenia/ui/graphics_provider.h"
#include "xenia/ui/imgui_dialog.h"
@@ -725,7 +728,8 @@ void EmulatorWindow::XMPConfigDialog::OnDraw(ImGuiIO& io) {
volume_ =
emulator_window_.emulator_->audio_media_player()->GetVolume()->load();
if (ImGui::SliderFloat("Audio player volume", &volume_, 0.0f, 1.0f)) {
if (ImGui::SliderFloat("Audio player volume", &volume_, 0.0f, 1.0f,
"%.2f")) {
audio_player->SetVolume(volume_);
}
}
@@ -882,6 +886,15 @@ bool EmulatorWindow::Initialize() {
}
main_menu->AddChild(std::move(xmp_menu));
// Console menu
auto console_menu = MenuItem::Create(MenuItem::Type::kPopup, "&Console");
{
console_menu->AddChild(MenuItem::Create(
MenuItem::Type::kString, "&Open console settings", "",
std::bind(&EmulatorWindow::ToggleConsoleSettingsDialog, this)));
}
main_menu->AddChild(std::move(console_menu));
// Help menu.
auto help_menu = MenuItem::Create(MenuItem::Type::kPopup, "&Help");
{
@@ -1541,12 +1554,15 @@ void EmulatorWindow::GpuClearCaches() {
emulator()->graphics_system()->ClearCaches();
}
void EmulatorWindow::SetFullscreen(bool fullscreen) {
if (window_->IsFullscreen() == fullscreen) {
void EmulatorWindow::SetFullscreen(bool fullscreen_) {
if (window_->IsFullscreen() == fullscreen_) {
return;
}
window_->SetFullscreen(fullscreen);
window_->SetCursorVisibility(fullscreen
OVERRIDE_bool(fullscreen, fullscreen_);
window_->SetFullscreen(fullscreen_);
window_->SetCursorVisibility(fullscreen_
? ui::Window::CursorVisibility::kAutoHidden
: ui::Window::CursorVisibility::kVisible);
}
@@ -1596,6 +1612,20 @@ void EmulatorWindow::ToggleXMPConfigDialog() {
}
}
void EmulatorWindow::ToggleConsoleSettingsDialog() {
if (!console_settings_dialog_) {
console_settings_dialog_ =
std::unique_ptr<ConsoleSettingsDialog>(new ConsoleSettingsDialog(
imgui_drawer_.get(), *this, emulator_->kernel_state()->xconfig()));
} else {
if (console_settings_dialog_->IsClosing()) {
console_settings_dialog_.release();
} else {
console_settings_dialog_.reset();
}
}
}
void EmulatorWindow::ToggleControllerVibration() {
auto input_sys = emulator()->input_system();
if (input_sys) {
@@ -2341,6 +2371,10 @@ void EmulatorWindow::ClearDialogs() {
display_config_dialog_.reset();
}
if (console_settings_dialog_) {
console_settings_dialog_.reset();
}
imgui_drawer_.get()->ClearDialogs();
emulator_->kernel_state()->xam_state()->xam_dialogs_shown_ = 0;
}