ImGuiOverlays: Change icon colour depending on controller mode

This commit is contained in:
Stenzek
2024-08-18 20:30:45 +10:00
parent b2577ef8bd
commit aa9a5e383d
7 changed files with 40 additions and 14 deletions

View File

@ -65,7 +65,7 @@ void AnalogController::Reset()
if (g_settings.controller_disable_analog_mode_forcing || System::IsRunningUnknownGame())
{
Host::AddIconOSDMessage(
fmt::format("Controller{}AnalogMode", m_index), ICON_FA_GAMEPAD,
fmt::format("Controller{}AnalogMode", m_index), ICON_PF_GAMEPAD_ALT,
TRANSLATE_STR("OSDMessage",
"Analog mode forcing is disabled by game settings. Controller will start in digital mode."),
10.0f);
@ -279,6 +279,11 @@ std::optional<u32> AnalogController::GetAnalogInputBytes() const
m_axis_state[static_cast<size_t>(Axis::RightY)] << 8 | m_axis_state[static_cast<size_t>(Axis::RightX)];
}
u32 AnalogController::GetInputOverlayIconColor() const
{
return m_analog_mode ? 0xFF2534F0u : 0xFFCCCCCCu;
}
void AnalogController::ResetTransferState()
{
if (m_analog_toggle_queued)
@ -300,7 +305,7 @@ void AnalogController::SetAnalogMode(bool enabled, bool show_message)
if (show_message)
{
Host::AddIconOSDMessage(
fmt::format("analog_mode_toggle_{}", m_index), ICON_FA_GAMEPAD,
fmt::format("analog_mode_toggle_{}", m_index), ICON_PF_GAMEPAD_ALT,
enabled ? fmt::format(TRANSLATE_FS("Controller", "Controller {} switched to analog mode."), m_index + 1u) :
fmt::format(TRANSLATE_FS("Controller", "Controller {} switched to digital mode."), m_index + 1u));
}
@ -313,7 +318,7 @@ void AnalogController::ProcessAnalogModeToggle()
if (m_analog_locked)
{
Host::AddIconOSDMessage(
fmt::format("Controller{}AnalogMode", m_index), ICON_FA_GAMEPAD,
fmt::format("Controller{}AnalogMode", m_index), ICON_PF_GAMEPAD_ALT,
fmt::format(m_analog_mode ?
TRANSLATE_FS("AnalogController", "Controller {} is locked to analog mode by the game.") :
TRANSLATE_FS("AnalogController", "Controller {} is locked to digital mode by the game."),
@ -875,7 +880,7 @@ static const SettingInfo s_settings[] = {
const Controller::ControllerInfo AnalogController::INFO = {ControllerType::AnalogController,
"AnalogController",
TRANSLATE_NOOP("ControllerType", "Analog Controller"),
ICON_PF_GAMEPAD,
ICON_PF_GAMEPAD_ALT,
s_binding_info,
s_settings,
Controller::VibrationCapabilities::LargeSmallMotors};

View File

@ -75,6 +75,7 @@ public:
void SetBindState(u32 index, float value) override;
u32 GetButtonStateBits() const override;
std::optional<u32> GetAnalogInputBytes() const override;
u32 GetInputOverlayIconColor() const override;
void ResetTransferState() override;
bool Transfer(const u8 data_in, u8* data_out) override;

View File

@ -82,6 +82,11 @@ std::optional<u32> Controller::GetAnalogInputBytes() const
return std::nullopt;
}
u32 Controller::GetInputOverlayIconColor() const
{
return 0xFFFFFFFFu;
}
void Controller::LoadSettings(SettingsInterface& si, const char* section)
{
}

View File

@ -89,6 +89,9 @@ public:
/// Returns analog input bytes packed as a u32. Values are specific to controller type.
virtual std::optional<u32> GetAnalogInputBytes() const;
/// Returns the colour to use in the input overlay.
virtual u32 GetInputOverlayIconColor() const;
/// Loads/refreshes any per-controller settings.
virtual void LoadSettings(SettingsInterface& si, const char* section);

View File

@ -182,7 +182,7 @@ static const SettingInfo s_settings[] = {
const Controller::ControllerInfo DigitalController::INFO = {ControllerType::DigitalController,
"DigitalController",
TRANSLATE_NOOP("ControllerType", "Digital Controller"),
ICON_PF_GAMEPAD,
ICON_PF_GAMEPAD_ALT,
s_binding_info,
s_settings,
Controller::VibrationCapabilities::NoVibration};

View File

@ -648,10 +648,22 @@ void ImGuiManager::DrawInputsOverlay()
if (!cinfo)
continue;
float text_start_x = current_x;
if (cinfo->icon_name)
text.format("{} {}", cinfo->icon_name, port + 1u);
{
const ImVec2 icon_size = font->CalcTextSizeA(font->FontSize, FLT_MAX, 0.0f, cinfo->icon_name);
const u32 icon_color = controller->GetInputOverlayIconColor();
dl->AddText(font, font->FontSize, ImVec2(current_x + shadow_offset, current_y + shadow_offset), shadow_color,
cinfo->icon_name, nullptr, 0.0f, &clip_rect);
dl->AddText(font, font->FontSize, ImVec2(current_x, current_y), icon_color, cinfo->icon_name, nullptr, 0.0f,
&clip_rect);
text_start_x += icon_size.x;
text.format(" {}", port + 1u);
}
else
{
text.format("{} |", port + 1u);
}
for (const Controller::ControllerBindingInfo& bi : cinfo->bindings)
{
@ -687,9 +699,9 @@ void ImGuiManager::DrawInputsOverlay()
}
}
dl->AddText(font, font->FontSize, ImVec2(current_x + shadow_offset, current_y + shadow_offset), shadow_color,
dl->AddText(font, font->FontSize, ImVec2(text_start_x + shadow_offset, current_y + shadow_offset), shadow_color,
text.c_str(), text.end_ptr(), 0.0f, &clip_rect);
dl->AddText(font, font->FontSize, ImVec2(current_x, current_y), text_color, text.c_str(), text.end_ptr(), 0.0f,
dl->AddText(font, font->FontSize, ImVec2(text_start_x, current_y), text_color, text.c_str(), text.end_ptr(), 0.0f,
&clip_rect);
current_y += font->FontSize + spacing;