overlay: add hover delay to tooltip (#545)

Clean up flags used for tooltip display, which adds a tiny delay by
default.
This commit is contained in:
bicarus
2026-01-31 15:47:23 -08:00
committed by GitHub
parent 4d32dde83e
commit f542a78347
6 changed files with 29 additions and 25 deletions
+6 -6
View File
@@ -26,7 +26,7 @@ namespace ImGui {
void HelpMarker(const char* desc) { void HelpMarker(const char* desc) {
ImGui::TextDisabled("(?)"); ImGui::TextDisabled("(?)");
if (ImGui::IsItemHovered()) { if (ImGui::IsItemHovered(TOOLTIP_FLAGS)) {
HelpTooltip(desc); HelpTooltip(desc);
} }
} }
@@ -59,7 +59,7 @@ namespace ImGui {
ImGui::PushStyleColor(ImGuiCol_TextDisabled, ImVec4(1.f, 1.f, 0.f, 1.f)); ImGui::PushStyleColor(ImGuiCol_TextDisabled, ImVec4(1.f, 1.f, 0.f, 1.f));
ImGui::TextDisabled("(!)"); ImGui::TextDisabled("(!)");
ImGui::PopStyleColor(); ImGui::PopStyleColor();
if (ImGui::IsItemHovered()) { if (ImGui::IsItemHovered(TOOLTIP_FLAGS)) {
WarnTooltip(desc, warn); WarnTooltip(desc, warn);
} }
} }
@@ -129,7 +129,7 @@ namespace ImGui {
} }
bool truncated = false; bool truncated = false;
ImGui::TextUnformatted(TruncateText(p_text, p_truncated_width, truncated).c_str()); ImGui::TextUnformatted(TruncateText(p_text, p_truncated_width, truncated).c_str());
if (truncated && ImGui::IsItemHovered()) { if (truncated && ImGui::IsItemHovered(TOOLTIP_FLAGS)) {
ImGui::HelpTooltip(p_text.c_str()); ImGui::HelpTooltip(p_text.c_str());
} }
} }
@@ -144,7 +144,7 @@ namespace ImGui {
bool clicked = ImGui::SmallButton("+"); bool clicked = ImGui::SmallButton("+");
ImGui::PopStyleVar(); ImGui::PopStyleVar();
ImGui::PopStyleColor(4); ImGui::PopStyleColor(4);
if (!tooltip.empty() && ImGui::IsItemHovered()) { if (!tooltip.empty() && ImGui::IsItemHovered(TOOLTIP_FLAGS)) {
ImGui::SameLine(); ImGui::SameLine();
ImGui::HelpTooltip(tooltip.c_str()); ImGui::HelpTooltip(tooltip.c_str());
} }
@@ -159,7 +159,7 @@ namespace ImGui {
bool clicked = ImGui::SmallButton("\u00D7"); // multiplication sign (×) bool clicked = ImGui::SmallButton("\u00D7"); // multiplication sign (×)
ImGui::PopStyleVar(); ImGui::PopStyleVar();
ImGui::PopStyleColor(); ImGui::PopStyleColor();
if (!tooltip.empty() && ImGui::IsItemHovered()) { if (!tooltip.empty() && ImGui::IsItemHovered(TOOLTIP_FLAGS)) {
ImGui::SameLine(); ImGui::SameLine();
ImGui::HelpTooltip(tooltip.c_str()); ImGui::HelpTooltip(tooltip.c_str());
} }
@@ -176,7 +176,7 @@ namespace ImGui {
ImGui::PushStyleColor(ImGuiCol_Text, ImVec4(0.97f, 0.97f, 0.97f, 1.00f)); ImGui::PushStyleColor(ImGuiCol_Text, ImVec4(0.97f, 0.97f, 0.97f, 1.00f));
bool clicked = ImGui::Button("\u00D7"); // multiplication sign (×) bool clicked = ImGui::Button("\u00D7"); // multiplication sign (×)
ImGui::PopStyleColor(4); ImGui::PopStyleColor(4);
if (!tooltip.empty() && ImGui::IsItemHovered()) { if (!tooltip.empty() && ImGui::IsItemHovered(TOOLTIP_FLAGS)) {
ImGui::SameLine(); ImGui::SameLine();
ImGui::HelpTooltip(tooltip.c_str()); ImGui::HelpTooltip(tooltip.c_str());
} }
+4
View File
@@ -1,9 +1,13 @@
#pragma once #pragma once
#include <string> #include <string>
#include "external/imgui/imgui.h"
namespace ImGui { namespace ImGui {
constexpr ImGuiHoveredFlags TOOLTIP_FLAGS =
(ImGuiHoveredFlags_ForTooltip | ImGuiHoveredFlags_AllowWhenDisabled);
void HelpTooltip(const char* desc); void HelpTooltip(const char* desc);
void HelpMarker(const char* desc); void HelpMarker(const char* desc);
void WarnTooltip(const char* desc, const char* warn); void WarnTooltip(const char* desc, const char* warn);
+11 -11
View File
@@ -298,7 +298,7 @@ namespace overlay::windows {
buttons_many_index = -1; buttons_many_index = -1;
buttons_many_delay = 0; buttons_many_delay = 0;
} }
if (ImGui::IsItemHovered()) { if (ImGui::IsItemHovered(ImGui::TOOLTIP_FLAGS)) {
ImGui::HelpTooltip( ImGui::HelpTooltip(
"Bind many keys in a row without having to click on Bind or Naive button."); "Bind many keys in a row without having to click on Bind or Naive button.");
} }
@@ -803,7 +803,7 @@ namespace overlay::windows {
} }
} }
} }
if (ImGui::IsItemHovered()) { if (ImGui::IsItemHovered(ImGui::TOOLTIP_FLAGS)) {
ImGui::HelpTooltip("Bind a button to a device using Windows RawInput API."); ImGui::HelpTooltip("Bind a button to a device using Windows RawInput API.");
} }
@@ -830,7 +830,7 @@ namespace overlay::windows {
buttons_keyboard_state[i] = GetAsyncKeyState(i) != 0; buttons_keyboard_state[i] = GetAsyncKeyState(i) != 0;
} }
} }
if (ImGui::IsItemHovered()) { if (ImGui::IsItemHovered(ImGui::TOOLTIP_FLAGS)) {
ImGui::HelpTooltip( ImGui::HelpTooltip(
"Uses GetAsyncKeyState to check for any keyboard / mouse input. " "Uses GetAsyncKeyState to check for any keyboard / mouse input. "
"For best performance, Bind should be preferred, but this can be used when:\n" "For best performance, Bind should be preferred, but this can be used when:\n"
@@ -881,7 +881,7 @@ namespace overlay::windows {
} }
ImGui::Checkbox("Allow Multiple Binds", &io_allow_multi_binding); ImGui::Checkbox("Allow Multiple Binds", &io_allow_multi_binding);
ImGui::EndDisabled(); ImGui::EndDisabled();
if (ImGui::IsItemHovered(ImGuiHoveredFlags_AllowWhenDisabled)) { if (ImGui::IsItemHovered(ImGui::TOOLTIP_FLAGS)) {
std::string text = std::string text =
"Check this and press the green + button to bind multiple input to the same action."; "Check this and press the green + button to bind multiple input to the same action.";
if (io_has_valid_alternatives) { if (io_has_valid_alternatives) {
@@ -2965,7 +2965,7 @@ namespace overlay::windows {
ImGui::TextUnformatted(definition.title.c_str()); ImGui::TextUnformatted(definition.title.c_str());
} }
ImGui::Unindent(INDENT); ImGui::Unindent(INDENT);
if (ImGui::IsItemHovered(ImGuiHoveredFlags_AllowWhenDisabled)) { if (ImGui::IsItemHovered(ImGui::TOOLTIP_FLAGS)) {
ImGui::HelpTooltip(definition.desc.c_str()); ImGui::HelpTooltip(definition.desc.c_str());
} }
@@ -2979,7 +2979,7 @@ namespace overlay::windows {
param += definition.display_name; param += definition.display_name;
} }
ImGui::TextColored(ImVec4(0.5f, 0.5f, 0.5f, 1.f), "%s", param.c_str()); ImGui::TextColored(ImVec4(0.5f, 0.5f, 0.5f, 1.f), "%s", param.c_str());
if (ImGui::IsItemHovered(ImGuiHoveredFlags_AllowWhenDisabled)) { if (ImGui::IsItemHovered(ImGui::TOOLTIP_FLAGS)) {
const auto help = const auto help =
param + param +
"\n\nClick to copy the parameter to the clipboard.\n\n" "\n\nClick to copy the parameter to the clipboard.\n\n"
@@ -3007,7 +3007,7 @@ namespace overlay::windows {
option.value = state ? "/ENABLED" : ""; option.value = state ? "/ENABLED" : "";
::Config::getInstance().updateBinding(games_list[games_selected], option); ::Config::getInstance().updateBinding(games_list[games_selected], option);
} }
if (ImGui::IsItemHovered(ImGuiHoveredFlags_AllowWhenDisabled)) { if (ImGui::IsItemHovered(ImGui::TOOLTIP_FLAGS)) {
ImGui::HelpTooltip(definition.desc.c_str()); ImGui::HelpTooltip(definition.desc.c_str());
} }
break; break;
@@ -3036,7 +3036,7 @@ namespace overlay::windows {
option.value = buffer; option.value = buffer;
::Config::getInstance().updateBinding(games_list[games_selected], option); ::Config::getInstance().updateBinding(games_list[games_selected], option);
} }
if (ImGui::IsItemHovered(ImGuiHoveredFlags_AllowWhenDisabled)) { if (ImGui::IsItemHovered(ImGui::TOOLTIP_FLAGS)) {
ImGui::HelpTooltip(definition.desc.c_str()); ImGui::HelpTooltip(definition.desc.c_str());
} }
break; break;
@@ -3072,7 +3072,7 @@ namespace overlay::windows {
option.value = buffer; option.value = buffer;
::Config::getInstance().updateBinding(games_list[games_selected], option); ::Config::getInstance().updateBinding(games_list[games_selected], option);
} }
if (ImGui::IsItemHovered(ImGuiHoveredFlags_AllowWhenDisabled)) { if (ImGui::IsItemHovered(ImGui::TOOLTIP_FLAGS)) {
ImGui::HelpTooltip(definition.desc.c_str()); ImGui::HelpTooltip(definition.desc.c_str());
} }
break; break;
@@ -3092,7 +3092,7 @@ namespace overlay::windows {
option.value = buffer; option.value = buffer;
::Config::getInstance().updateBinding(games_list[games_selected], option); ::Config::getInstance().updateBinding(games_list[games_selected], option);
} }
if (ImGui::IsItemHovered(ImGuiHoveredFlags_AllowWhenDisabled)) { if (ImGui::IsItemHovered(ImGui::TOOLTIP_FLAGS)) {
ImGui::HelpTooltip(definition.desc.c_str()); ImGui::HelpTooltip(definition.desc.c_str());
} }
break; break;
@@ -3129,7 +3129,7 @@ namespace overlay::windows {
} }
ImGui::EndCombo(); ImGui::EndCombo();
} }
if (ImGui::IsItemHovered(ImGuiHoveredFlags_AllowWhenDisabled)) { if (ImGui::IsItemHovered(ImGui::TOOLTIP_FLAGS)) {
ImGui::HelpTooltip(definition.desc.c_str()); ImGui::HelpTooltip(definition.desc.c_str());
} }
break; break;
+1 -1
View File
@@ -81,7 +81,7 @@ namespace overlay::windows {
{ {
ImGui::SetCursorPosY(ImGui::GetCursorPosY() - ImGui::GetFrameHeightWithSpacing()); ImGui::SetCursorPosY(ImGui::GetCursorPosY() - ImGui::GetFrameHeightWithSpacing());
this->build_button("+", tall, this->test_button, this->service_button); this->build_button("+", tall, this->test_button, this->service_button);
if (ImGui::IsItemHovered()) { if (ImGui::IsItemHovered(ImGui::TOOLTIP_FLAGS)) {
ImGui::HelpTooltip("SERVICE + TEST"); ImGui::HelpTooltip("SERVICE + TEST");
} }
} }
+2 -2
View File
@@ -136,7 +136,7 @@ namespace overlay::windows {
ImGui::SetCursorPosY(ImGui::GetCursorPosY() + ImGui::GetFrameHeightWithSpacing()); ImGui::SetCursorPosY(ImGui::GetCursorPosY() + ImGui::GetFrameHeightWithSpacing());
this->build_button("<", leftright_size, this->left[p], nullptr, this->leftright_light[p]); this->build_button("<", leftright_size, this->left[p], nullptr, this->leftright_light[p]);
this->build_button("+", tiny_size, this->help[p], this->start[p], nullptr); this->build_button("+", tiny_size, this->help[p], this->start[p], nullptr);
if (ImGui::IsItemHovered()) { if (ImGui::IsItemHovered(ImGui::TOOLTIP_FLAGS)) {
ImGui::HelpTooltip("HELP + START"); ImGui::HelpTooltip("HELP + START");
} }
} }
@@ -167,7 +167,7 @@ namespace overlay::windows {
ImGui::BeginGroup(); ImGui::BeginGroup();
{ {
this->build_button("?", tiny_size, this->help[p], nullptr, this->help_light[p]); this->build_button("?", tiny_size, this->help[p], nullptr, this->help_light[p]);
if (ImGui::IsItemHovered()) { if (ImGui::IsItemHovered(ImGui::TOOLTIP_FLAGS)) {
ImGui::HelpTooltip("HELP"); ImGui::HelpTooltip("HELP");
} }
this->build_button(">", leftright_size, this->right[p], nullptr, this->leftright_light[p]); this->build_button(">", leftright_size, this->right[p], nullptr, this->leftright_light[p]);
@@ -721,7 +721,7 @@ namespace overlay::windows {
if (style_color_pushed) { if (style_color_pushed) {
ImGui::PopStyleColor(style_color_pushed); ImGui::PopStyleColor(style_color_pushed);
} }
if (ImGui::IsItemHovered(ImGuiHoveredFlags_AllowWhenDisabled)) { if (ImGui::IsItemHovered(ImGui::TOOLTIP_FLAGS)) {
show_patch_tooltip(patch); show_patch_tooltip(patch);
} }
@@ -762,7 +762,7 @@ namespace overlay::windows {
patch.last_status = is_patch_active(patch); patch.last_status = is_patch_active(patch);
} }
ImGui::EndDisabled(); ImGui::EndDisabled();
if (ImGui::IsItemHovered(ImGuiHoveredFlags_AllowWhenDisabled)) { if (ImGui::IsItemHovered(ImGui::TOOLTIP_FLAGS)) {
show_patch_tooltip(patch); show_patch_tooltip(patch);
} }
@@ -791,7 +791,7 @@ namespace overlay::windows {
} }
ImGui::EndCombo(); ImGui::EndCombo();
} }
if (ImGui::IsItemHovered(ImGuiHoveredFlags_AllowWhenDisabled)) { if (ImGui::IsItemHovered(ImGui::TOOLTIP_FLAGS)) {
show_patch_tooltip(patch); show_patch_tooltip(patch);
} }
} else if (patch.type == PatchType::Integer) { } else if (patch.type == PatchType::Integer) {
@@ -807,7 +807,7 @@ namespace overlay::windows {
apply_patch(patch, true); apply_patch(patch, true);
config_dirty = true; config_dirty = true;
} }
if (ImGui::IsItemHovered(ImGuiHoveredFlags_AllowWhenDisabled)) { if (ImGui::IsItemHovered(ImGui::TOOLTIP_FLAGS)) {
show_patch_tooltip(patch); show_patch_tooltip(patch);
} }
} }
@@ -824,7 +824,7 @@ namespace overlay::windows {
ImGui::InputInt("##dummy_int_input", &patch.patch_number.value); ImGui::InputInt("##dummy_int_input", &patch.patch_number.value);
} }
ImGui::EndDisabled(); ImGui::EndDisabled();
if (ImGui::IsItemHovered(ImGuiHoveredFlags_AllowWhenDisabled)) { if (ImGui::IsItemHovered(ImGui::TOOLTIP_FLAGS)) {
show_patch_tooltip(patch); show_patch_tooltip(patch);
} }
} }