Merge pull request #14589 from Dentomologist/merge_tooltips_for_disabled_settings_into_balloontips

HacksWidget: Merge tooltips for disabled settings into balloontips
This commit is contained in:
JosJuice
2026-06-28 12:10:54 +02:00
committed by GitHub
2 changed files with 74 additions and 37 deletions
@@ -25,10 +25,13 @@ HacksWidget::HacksWidget(GraphicsPane* gfx_pane) : m_game_layer{gfx_pane->GetCon
ConnectWidgets();
AddDescriptions();
const auto get_backend_name = []() { return tr(Config::Get(Config::MAIN_GFX_BACKEND).data()); };
connect(gfx_pane, &GraphicsPane::BackendChanged, this, &HacksWidget::OnBackendChanged);
OnBackendChanged(QString::fromStdString(Config::Get(Config::MAIN_GFX_BACKEND)));
connect(gfx_pane, &GraphicsPane::UpdateGPUTextureDecoding, this,
&HacksWidget::UpdateGPUTextureDecodingEnabled);
[this, get_backend_name] { UpdateGPUTextureDecodingEnabled(get_backend_name()); });
OnBackendChanged(get_backend_name());
}
void HacksWidget::CreateWidgets()
@@ -125,17 +128,8 @@ void HacksWidget::CreateWidgets()
void HacksWidget::OnBackendChanged(const QString& backend_name)
{
const bool bbox = g_backend_info.bSupportsBBox;
const bool gpu_texture_decoding = g_backend_info.bSupportsGPUTextureDecoding;
UpdateGPUTextureDecodingEnabled();
m_disable_bounding_box->setEnabled(bbox);
const QString tooltip = tr("%1 doesn't support this feature on your system.")
.arg(tr(backend_name.toStdString().c_str()));
m_gpu_texture_decoding->setToolTip(!gpu_texture_decoding ? tooltip : QString{});
m_disable_bounding_box->setToolTip(!bbox ? tooltip : QString{});
UpdateGPUTextureDecodingEnabled(backend_name);
UpdateBoundingBoxEnabled(backend_name);
}
void HacksWidget::ConnectWidgets()
@@ -211,20 +205,10 @@ void HacksWidget::AddDescriptions()
"<br><br>This setting is unavailable when Immediately Present XFB or VBI Skip is "
"enabled. In those cases, duplicate frames are never presented."
"<br><br><dolphin_emphasis>If unsure, leave this checked.</dolphin_emphasis>");
static const char TR_GPU_DECODING_DESCRIPTION[] = QT_TR_NOOP(
"Enables texture decoding using the GPU instead of the CPU.<br><br>This may result in "
"performance gains in some scenarios, or on systems where the CPU is the "
"bottleneck.<br><br>This setting is disabled when Arbitrary Mipmap Detection is "
"enabled.<br><br>"
"<dolphin_emphasis>If unsure, leave this unchecked.</dolphin_emphasis>");
static const char TR_FAST_DEPTH_CALC_DESCRIPTION[] = QT_TR_NOOP(
"Uses a less accurate algorithm to calculate depth values.<br><br>Causes issues in a few "
"games, but can result in a decent speed increase depending on the game and/or "
"GPU.<br><br><dolphin_emphasis>If unsure, leave this checked.</dolphin_emphasis>");
static const char TR_DISABLE_BOUNDINGBOX_DESCRIPTION[] =
QT_TR_NOOP("Disables bounding box emulation.<br><br>This may improve GPU performance "
"significantly, but some games will break.<br><br><dolphin_emphasis>If "
"unsure, leave this checked.</dolphin_emphasis>");
static const char TR_SAVE_TEXTURE_CACHE_TO_STATE_DESCRIPTION[] =
QT_TR_NOOP("Includes the contents of the embedded frame buffer (EFB) and upscaled EFB copies "
"in save states. Fixes missing and/or non-upscaled textures/objects when loading "
@@ -253,19 +237,70 @@ void HacksWidget::AddDescriptions()
m_store_xfb_copies->SetDescription(tr(TR_STORE_XFB_TO_TEXTURE_DESCRIPTION));
m_immediate_xfb->SetDescription(tr(TR_IMMEDIATE_XFB_DESCRIPTION));
m_skip_duplicate_xfbs->SetDescription(tr(TR_SKIP_DUPLICATE_XFBS_DESCRIPTION));
m_gpu_texture_decoding->SetDescription(tr(TR_GPU_DECODING_DESCRIPTION));
m_fast_depth_calculation->SetDescription(tr(TR_FAST_DEPTH_CALC_DESCRIPTION));
m_disable_bounding_box->SetDescription(tr(TR_DISABLE_BOUNDINGBOX_DESCRIPTION));
m_save_texture_cache_state->SetDescription(tr(TR_SAVE_TEXTURE_CACHE_TO_STATE_DESCRIPTION));
m_vertex_rounding->SetDescription(tr(TR_VERTEX_ROUNDING_DESCRIPTION));
m_vi_skip->SetDescription(tr(TR_VI_SKIP_DESCRIPTION));
}
void HacksWidget::UpdateGPUTextureDecodingEnabled()
void HacksWidget::UpdateGPUTextureDecodingEnabled(const QString& backend_name)
{
const bool gpu_texture_decoding = g_backend_info.bSupportsGPUTextureDecoding;
m_gpu_texture_decoding->setEnabled(
gpu_texture_decoding && !Get(m_game_layer, Config::GFX_ENHANCE_ARBITRARY_MIPMAP_DETECTION));
static const char TR_GPU_DECODING_DESCRIPTION[] = QT_TR_NOOP(
"Enables texture decoding using the GPU instead of the CPU.<br><br>This may result in "
"performance gains in some scenarios, or on systems where the CPU is the bottleneck."
"<br><br>This setting is disabled when Arbitrary Mipmap Detection is enabled.<br><br>");
const bool gpu_texture_decoding_supported = g_backend_info.bSupportsGPUTextureDecoding;
const bool arbitrary_mipmap_detection_enabled =
Get(m_game_layer, Config::GFX_ENHANCE_ARBITRARY_MIPMAP_DETECTION);
const bool gpu_texture_decoding_enabled =
gpu_texture_decoding_supported && !arbitrary_mipmap_detection_enabled;
m_gpu_texture_decoding->setEnabled(gpu_texture_decoding_enabled);
if (!gpu_texture_decoding_supported)
{
m_gpu_texture_decoding->SetDescription(tr(TR_GPU_DECODING_DESCRIPTION) +
tr("<dolphin_emphasis>The %1 backend doesn't support "
"GPU Texture Decoding.</dolphin_emphasis>")
.arg(backend_name));
}
else if (arbitrary_mipmap_detection_enabled)
{
m_gpu_texture_decoding->SetDescription(
tr(TR_GPU_DECODING_DESCRIPTION) +
tr("<dolphin_emphasis>GPU Texture Decoding is currently disabled by Arbitrary Mipmap "
"Detection.</dolphin_emphasis>"));
}
else
{
m_gpu_texture_decoding->SetDescription(
tr(TR_GPU_DECODING_DESCRIPTION) +
tr("<dolphin_emphasis>If unsure, leave this unchecked.</dolphin_emphasis>"));
}
}
void HacksWidget::UpdateBoundingBoxEnabled(const QString& backend_name)
{
static const char TR_DISABLE_BOUNDINGBOX_DESCRIPTION[] =
QT_TR_NOOP("Disables bounding box emulation.<br><br>This may improve GPU performance "
"significantly, but some games will break.<br><br>");
const bool bbox = g_backend_info.bSupportsBBox;
m_disable_bounding_box->setEnabled(bbox);
if (bbox)
{
m_disable_bounding_box->SetDescription(
tr(TR_DISABLE_BOUNDINGBOX_DESCRIPTION) +
tr("<dolphin_emphasis>If unsure, leave this checked.</dolphin_emphasis>"));
}
else
{
m_disable_bounding_box->SetDescription(tr(TR_DISABLE_BOUNDINGBOX_DESCRIPTION) +
tr("<dolphin_emphasis>The %1 backend doesn't support "
"Bounding Box emulation.</dolphin_emphasis>")
.arg(backend_name));
}
}
void HacksWidget::UpdateDeferEFBCopiesEnabled()
@@ -9,6 +9,7 @@ class ConfigBool;
class ConfigSlider;
class ConfigSliderLabel;
class GraphicsPane;
class QString;
namespace Config
{
@@ -22,6 +23,15 @@ public:
explicit HacksWidget(GraphicsPane* gfx_pane);
private:
void CreateWidgets();
void ConnectWidgets();
void AddDescriptions();
void UpdateGPUTextureDecodingEnabled(const QString& backend_name);
void UpdateBoundingBoxEnabled(const QString& backend_name);
void UpdateDeferEFBCopiesEnabled();
void UpdateSkipPresentingDuplicateFramesEnabled();
void OnBackendChanged(const QString& backend_name);
// EFB
@@ -48,12 +58,4 @@ private:
ConfigBool* m_save_texture_cache_state;
Config::Layer* m_game_layer = nullptr;
void CreateWidgets();
void ConnectWidgets();
void AddDescriptions();
void UpdateGPUTextureDecodingEnabled();
void UpdateDeferEFBCopiesEnabled();
void UpdateSkipPresentingDuplicateFramesEnabled();
};