dolphin/Source/Core/DolphinQt/Settings/OnScreenDisplayPane.cpp

255 lines
12 KiB
C++

// Copyright 2025 Dolphin Emulator Project
// SPDX-License-Identifier: GPL-2.0-or-later
#include "DolphinQt/Settings/OnScreenDisplayPane.h"
#include <QGridLayout>
#include <QGroupBox>
#include <QLabel>
#include <QVBoxLayout>
#include <QWidget>
#include "Core/Config/GraphicsSettings.h"
#include "Core/Config/MainSettings.h"
#include "DolphinQt/Config/ConfigControls/ConfigBool.h"
#include "DolphinQt/Config/ConfigControls/ConfigInteger.h"
OnScreenDisplayPane::OnScreenDisplayPane(QWidget* parent) : QWidget(parent)
{
CreateLayout();
ConnectLayout();
AddDescriptions();
}
void OnScreenDisplayPane::CreateLayout()
{
// General
auto* general_box = new QGroupBox(tr("General"));
auto* general_layout = new QGridLayout();
general_box->setLayout(general_layout);
m_enable_osd = new ConfigBool(tr("Show Messages"), Config::MAIN_OSD_MESSAGES);
m_font_size = new ConfigInteger(12, 40, Config::MAIN_OSD_FONT_SIZE);
general_layout->addWidget(m_enable_osd, 0, 0);
general_layout->addWidget(new QLabel(tr("Font Size:")), 1, 0);
general_layout->addWidget(m_font_size, 1, 1);
// Performance
auto* performance_box = new QGroupBox(tr("Performance Statistics"));
auto* performance_layout = new QGridLayout();
performance_box->setLayout(performance_layout);
m_show_fps = new ConfigBool(tr("Show FPS"), Config::GFX_SHOW_FPS);
m_show_ftimes = new ConfigBool(tr("Show Frame Times"), Config::GFX_SHOW_FTIMES);
m_show_vps = new ConfigBool(tr("Show VPS"), Config::GFX_SHOW_VPS);
m_show_vtimes = new ConfigBool(tr("Show VBlank Times"), Config::GFX_SHOW_VTIMES);
m_show_speed = new ConfigBool(tr("Show % Speed"), Config::GFX_SHOW_SPEED);
m_speed_colors = new ConfigBool(tr("Show Speed Colors"), Config::GFX_SHOW_SPEED_COLORS);
m_show_graph = new ConfigBool(tr("Show Performance Graphs"), Config::GFX_SHOW_GRAPHS);
m_graph_update_label = new QLabel(tr("Graph Update Rate (ms):"));
m_graph_update_rate = new ConfigInteger(0, 10000, Config::GFX_PERF_SAMP_WINDOW, 100);
m_graph_update_rate->SetTitle(tr("Performance Sample Window (ms)"));
performance_layout->addWidget(m_show_fps, 0, 0);
performance_layout->addWidget(m_show_ftimes, 0, 1);
performance_layout->addWidget(m_show_vps, 1, 0);
performance_layout->addWidget(m_show_vtimes, 1, 1);
performance_layout->addWidget(m_show_speed, 2, 0);
performance_layout->addWidget(m_speed_colors, 2, 1);
performance_layout->addWidget(m_show_graph, 3, 0);
performance_layout->addWidget(m_graph_update_label, 4, 0);
performance_layout->addWidget(m_graph_update_rate, 4, 1);
// Movie
auto* movie_box = new QGroupBox(tr("Movie Window"));
auto* movie_layout = new QGridLayout();
movie_box->setLayout(movie_layout);
m_movie_window = new ConfigBool(tr("Show Movie Window"), Config::MAIN_MOVIE_SHOW_OSD);
m_rerecord_counter =
new ConfigBool(tr("Show Rerecord Counter"), Config::MAIN_MOVIE_SHOW_RERECORD);
m_lag_counter = new ConfigBool(tr("Show Lag Counter"), Config::MAIN_SHOW_LAG);
m_frame_counter = new ConfigBool(tr("Show Frame Counter"), Config::MAIN_SHOW_FRAME_COUNT);
m_input_display = new ConfigBool(tr("Show Input Display"), Config::MAIN_MOVIE_SHOW_INPUT_DISPLAY);
m_system_clock = new ConfigBool(tr("Show System Clock"), Config::MAIN_MOVIE_SHOW_RTC);
movie_layout->addWidget(m_movie_window, 0, 0);
movie_layout->addWidget(m_rerecord_counter, 1, 0);
movie_layout->addWidget(m_lag_counter, 1, 1);
movie_layout->addWidget(m_frame_counter, 2, 0);
movie_layout->addWidget(m_input_display, 2, 1);
movie_layout->addWidget(m_system_clock, 3, 0);
// NetPlay
auto* netplay_box = new QGroupBox(tr("Netplay"));
auto* netplay_layout = new QGridLayout();
netplay_box->setLayout(netplay_layout);
m_show_ping = new ConfigBool(tr("Show NetPlay Ping"), Config::GFX_SHOW_NETPLAY_PING);
m_show_chat = new ConfigBool(tr("Show NetPlay Chat"), Config::GFX_SHOW_NETPLAY_MESSAGES);
netplay_layout->addWidget(m_show_ping, 0, 0);
netplay_layout->addWidget(m_show_chat, 0, 1);
// Debug
auto* debug_box = new QGroupBox(tr("Debug"));
auto* debug_layout = new QGridLayout();
debug_box->setLayout(debug_layout);
m_show_statistics = new ConfigBool(tr("Show Statistics"), Config::GFX_OVERLAY_STATS);
m_show_proj_statistics =
new ConfigBool(tr("Show Projection Statistics"), Config::GFX_OVERLAY_PROJ_STATS);
debug_layout->addWidget(m_show_statistics, 0, 0);
debug_layout->addWidget(m_show_proj_statistics, 0, 1);
// Stack GroupBoxes
auto* main_layout = new QVBoxLayout;
main_layout->addWidget(general_box);
main_layout->addWidget(performance_box);
main_layout->addWidget(movie_box);
main_layout->addWidget(netplay_box);
main_layout->addWidget(debug_box);
main_layout->addStretch();
setLayout(main_layout);
}
void OnScreenDisplayPane::ConnectLayout()
{
// Disable graph options when graph is not visible.
m_graph_update_rate->setEnabled(m_show_graph->isChecked());
m_graph_update_label->setEnabled(m_show_graph->isChecked());
connect(m_show_graph, &QCheckBox::toggled, this, [this](bool checked) {
m_graph_update_rate->setEnabled(checked);
m_graph_update_label->setEnabled(checked);
});
// Disable movie window options when window is closed.
auto enable_movie_items = [this](bool checked) {
for (auto* widget :
{m_rerecord_counter, m_frame_counter, m_lag_counter, m_system_clock, m_input_display})
{
widget->setEnabled(checked);
}
};
enable_movie_items(m_movie_window->isChecked());
connect(m_movie_window, &QCheckBox::toggled, this, [this, enable_movie_items](bool checked) {
enable_movie_items(m_movie_window->isChecked());
});
}
void OnScreenDisplayPane::AddDescriptions()
{
static constexpr char TR_ENABLE_OSD_DESCRIPTION[] =
QT_TR_NOOP("Shows on-screen display messages over the render window. These messages "
"disappear after several seconds."
"<br><br><dolphin_emphasis>If unsure, leave this checked.</dolphin_emphasis>");
static const char TR_OSD_FONT_SIZE_DESCRIPTION[] = QT_TR_NOOP(
"Changes the font size of the On-Screen Display. Affects features such as performance "
"statistics, frame counter, and netplay chat.<br><br><dolphin_emphasis>If "
"unsure, leave this at 13.</dolphin_emphasis>");
static const char TR_SHOW_FPS_DESCRIPTION[] =
QT_TR_NOOP("Shows the number of distinct frames rendered per second as a measure of "
"visual smoothness.<br><br><dolphin_emphasis>If unsure, leave this "
"unchecked.</dolphin_emphasis>");
static const char TR_SHOW_FTIMES_DESCRIPTION[] =
QT_TR_NOOP("Shows the average time in ms between each distinct rendered frame alongside "
"the standard deviation.<br><br><dolphin_emphasis>If unsure, leave this "
"unchecked.</dolphin_emphasis>");
static const char TR_SHOW_VPS_DESCRIPTION[] =
QT_TR_NOOP("Shows the number of frames rendered per second as a measure of "
"emulation speed.<br><br><dolphin_emphasis>If unsure, leave this "
"unchecked.</dolphin_emphasis>");
static const char TR_SHOW_VTIMES_DESCRIPTION[] =
QT_TR_NOOP("Shows the average time in ms between each rendered frame alongside "
"the standard deviation.<br><br><dolphin_emphasis>If unsure, leave this "
"unchecked.</dolphin_emphasis>");
static const char TR_SHOW_GRAPHS_DESCRIPTION[] =
QT_TR_NOOP("Shows frametime graph along with statistics as a representation of "
"emulation performance.<br><br><dolphin_emphasis>If unsure, leave this "
"unchecked.</dolphin_emphasis>");
static const char TR_SHOW_SPEED_DESCRIPTION[] =
QT_TR_NOOP("Shows the % speed of emulation compared to full speed."
"<br><br><dolphin_emphasis>If unsure, leave this "
"unchecked.</dolphin_emphasis>");
static const char TR_SHOW_SPEED_COLORS_DESCRIPTION[] =
QT_TR_NOOP("Changes the color of the FPS counter depending on emulation speed."
"<br><br><dolphin_emphasis>If unsure, leave this "
"checked.</dolphin_emphasis>");
static const char TR_PERF_SAMP_WINDOW_DESCRIPTION[] =
QT_TR_NOOP("The amount of time the FPS and VPS counters will sample over."
"<br><br>The higher the value, the more stable the FPS/VPS counter will be, "
"but the slower it will be to update."
"<br><br><dolphin_emphasis>If unsure, leave this "
"at 1000ms.</dolphin_emphasis>");
static const char TR_LOG_RENDERTIME_DESCRIPTION[] = QT_TR_NOOP(
"Logs the render time of every frame to User/Logs/render_time.txt.<br><br>Use this "
"feature to measure Dolphin's performance.<br><br><dolphin_emphasis>If "
"unsure, leave this unchecked.</dolphin_emphasis>");
static const char TR_SHOW_NETPLAY_PING_DESCRIPTION[] = QT_TR_NOOP(
"Shows the player's maximum ping while playing on "
"NetPlay.<br><br><dolphin_emphasis>If unsure, leave this unchecked.</dolphin_emphasis>");
static const char TR_SHOW_NETPLAY_MESSAGES_DESCRIPTION[] =
QT_TR_NOOP("Shows chat messages, buffer changes, and desync alerts "
"while playing NetPlay.<br><br><dolphin_emphasis>If unsure, leave "
"this unchecked.</dolphin_emphasis>");
static const char TR_MOVIE_WINDOW_DESCRIPTION[] =
QT_TR_NOOP("Shows a window that can be filled with information related to movie recordings. "
"The other options in this group determine what appears in the window. "
"<br><br><dolphin_emphasis>If unsure, leave this unchecked.</dolphin_emphasis>");
static const char TR_RERECORD_COUNTER_DESCRIPTION[] =
QT_TR_NOOP("Shows how many times the input recording has been overwritten by using "
"savestates.<br><br><dolphin_emphasis>If unsure, leave "
"this unchecked.</dolphin_emphasis>");
static const char TR_LAG_COUNTER_DESCRIPTION[] = QT_TR_NOOP(
"Shows how many frames have occured without controller inputs being checked. Resets to 1 "
"when inputs are processed. <br><br><dolphin_emphasis>If unsure, leave "
"this unchecked.</dolphin_emphasis>");
static const char TR_FRAME_COUNTER_DESCRIPTION[] =
QT_TR_NOOP("Shows how many frames have passed. <br><br><dolphin_emphasis>If unsure, leave "
"this unchecked.</dolphin_emphasis>");
static const char TR_INPUT_DISPLAY_DESCRIPTION[] = QT_TR_NOOP(
"Shows the controls currently being input.<br><br><dolphin_emphasis>If unsure, leave "
"this unchecked.</dolphin_emphasis>");
static const char TR_SYSTEM_CLOCK_DESCRIPTION[] =
QT_TR_NOOP("Shows current system time.<br><br><dolphin_emphasis>If unsure, leave "
"this unchecked.</dolphin_emphasis>");
static const char TR_SHOW_STATS_DESCRIPTION[] =
QT_TR_NOOP("Shows various rendering statistics.<br><br><dolphin_emphasis>If unsure, "
"leave this unchecked.</dolphin_emphasis>");
static const char TR_SHOW_PROJ_STATS_DESCRIPTION[] =
QT_TR_NOOP("Shows various projection statistics.<br><br><dolphin_emphasis>If unsure, "
"leave this unchecked.</dolphin_emphasis>");
m_enable_osd->SetDescription(tr(TR_ENABLE_OSD_DESCRIPTION));
m_font_size->SetDescription(tr(TR_OSD_FONT_SIZE_DESCRIPTION));
m_show_fps->SetDescription(tr(TR_SHOW_FPS_DESCRIPTION));
m_show_ftimes->SetDescription(tr(TR_SHOW_FTIMES_DESCRIPTION));
m_show_vps->SetDescription(tr(TR_SHOW_VPS_DESCRIPTION));
m_show_vtimes->SetDescription(tr(TR_SHOW_VTIMES_DESCRIPTION));
m_show_graph->SetDescription(tr(TR_SHOW_GRAPHS_DESCRIPTION));
m_show_speed->SetDescription(tr(TR_SHOW_SPEED_DESCRIPTION));
m_graph_update_rate->SetDescription(tr(TR_PERF_SAMP_WINDOW_DESCRIPTION));
m_speed_colors->SetDescription(tr(TR_SHOW_SPEED_COLORS_DESCRIPTION));
m_show_ping->SetDescription(tr(TR_SHOW_NETPLAY_PING_DESCRIPTION));
m_show_chat->SetDescription(tr(TR_SHOW_NETPLAY_MESSAGES_DESCRIPTION));
m_movie_window->SetDescription(tr(TR_MOVIE_WINDOW_DESCRIPTION));
m_rerecord_counter->SetDescription(tr(TR_RERECORD_COUNTER_DESCRIPTION));
m_lag_counter->SetDescription(tr(TR_LAG_COUNTER_DESCRIPTION));
m_frame_counter->SetDescription(tr(TR_FRAME_COUNTER_DESCRIPTION));
m_input_display->SetDescription(tr(TR_INPUT_DISPLAY_DESCRIPTION));
m_system_clock->SetDescription(tr(TR_SYSTEM_CLOCK_DESCRIPTION));
m_show_statistics->SetDescription(tr(TR_SHOW_STATS_DESCRIPTION));
m_show_proj_statistics->SetDescription(tr(TR_SHOW_PROJ_STATS_DESCRIPTION));
}