mirror of https://github.com/RPCS3/rpcs3.git
overlays: do not play sounds on fast auto repeat
Currently there's a nasty sound stakkato going on if you keep the dpad pressed to the left in the home menu for example.
This commit is contained in:
parent
09e845a539
commit
73dba6d6e0
|
@ -68,7 +68,7 @@ namespace rsx
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void home_menu_dialog::on_button_pressed(pad_button button_press)
|
void home_menu_dialog::on_button_pressed(pad_button button_press, bool is_auto_repeat)
|
||||||
{
|
{
|
||||||
if (fade_animation.active) return;
|
if (fade_animation.active) return;
|
||||||
|
|
||||||
|
@ -86,7 +86,7 @@ namespace rsx
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
const page_navigation navigation = m_main_menu.handle_button_press(button_press);
|
const page_navigation navigation = m_main_menu.handle_button_press(button_press, is_auto_repeat, m_auto_repeat_ms_interval);
|
||||||
|
|
||||||
switch (navigation)
|
switch (navigation)
|
||||||
{
|
{
|
||||||
|
|
|
@ -14,7 +14,7 @@ namespace rsx
|
||||||
home_menu_dialog();
|
home_menu_dialog();
|
||||||
|
|
||||||
void update() override;
|
void update() override;
|
||||||
void on_button_pressed(pad_button button_press) override;
|
void on_button_pressed(pad_button button_press, bool is_auto_repeat) override;
|
||||||
|
|
||||||
compiled_resource get_compiled() override;
|
compiled_resource get_compiled() override;
|
||||||
|
|
||||||
|
|
|
@ -127,7 +127,7 @@ namespace rsx
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
page_navigation home_menu_page::handle_button_press(pad_button button_press)
|
page_navigation home_menu_page::handle_button_press(pad_button button_press, bool is_auto_repeat, u64 auto_repeat_interval_ms)
|
||||||
{
|
{
|
||||||
if (m_message_box && m_message_box->visible())
|
if (m_message_box && m_message_box->visible())
|
||||||
{
|
{
|
||||||
|
@ -142,7 +142,7 @@ namespace rsx
|
||||||
|
|
||||||
if (home_menu_page* page = get_current_page(false))
|
if (home_menu_page* page = get_current_page(false))
|
||||||
{
|
{
|
||||||
return page->handle_button_press(button_press);
|
return page->handle_button_press(button_press, is_auto_repeat, auto_repeat_interval_ms);
|
||||||
}
|
}
|
||||||
|
|
||||||
switch (button_press)
|
switch (button_press)
|
||||||
|
@ -237,7 +237,11 @@ namespace rsx
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Play a sound unless this is a fast auto repeat which would induce a nasty noise
|
||||||
|
if (!is_auto_repeat || auto_repeat_interval_ms >= user_interface::m_auto_repeat_ms_interval_default)
|
||||||
|
{
|
||||||
Emu.GetCallbacks().play_sound(fs::get_config_dir() + "sounds/snd_cursor.wav");
|
Emu.GetCallbacks().play_sound(fs::get_config_dir() + "sounds/snd_cursor.wav");
|
||||||
|
}
|
||||||
return page_navigation::stay;
|
return page_navigation::stay;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -16,7 +16,7 @@ namespace rsx
|
||||||
|
|
||||||
void set_current_page(home_menu_page* page);
|
void set_current_page(home_menu_page* page);
|
||||||
home_menu_page* get_current_page(bool include_this);
|
home_menu_page* get_current_page(bool include_this);
|
||||||
page_navigation handle_button_press(pad_button button_press);
|
page_navigation handle_button_press(pad_button button_press, bool is_auto_repeat, u64 auto_repeat_interval_ms);
|
||||||
|
|
||||||
void translate(s16 _x, s16 _y) override;
|
void translate(s16 _x, s16 _y) override;
|
||||||
compiled_resource& get_compiled() override;
|
compiled_resource& get_compiled() override;
|
||||||
|
|
|
@ -4,6 +4,7 @@
|
||||||
#include "overlay_media_list_dialog.h"
|
#include "overlay_media_list_dialog.h"
|
||||||
|
|
||||||
#include "Emu/Cell/Modules/cellMusic.h"
|
#include "Emu/Cell/Modules/cellMusic.h"
|
||||||
|
#include "Emu/System.h"
|
||||||
#include "Emu/VFS.h"
|
#include "Emu/VFS.h"
|
||||||
#include "Utilities/StrUtil.h"
|
#include "Utilities/StrUtil.h"
|
||||||
#include "Utilities/Thread.h"
|
#include "Utilities/Thread.h"
|
||||||
|
@ -141,8 +142,10 @@ namespace rsx
|
||||||
m_description->back_color.a = 0.f;
|
m_description->back_color.a = 0.f;
|
||||||
}
|
}
|
||||||
|
|
||||||
void media_list_dialog::on_button_pressed(pad_button button_press)
|
void media_list_dialog::on_button_pressed(pad_button button_press, bool is_auto_repeat)
|
||||||
{
|
{
|
||||||
|
bool play_cursor_sound = true;
|
||||||
|
|
||||||
switch (button_press)
|
switch (button_press)
|
||||||
{
|
{
|
||||||
case pad_button::cross:
|
case pad_button::cross:
|
||||||
|
@ -150,10 +153,14 @@ namespace rsx
|
||||||
break;
|
break;
|
||||||
return_code = m_list->get_selected_index();
|
return_code = m_list->get_selected_index();
|
||||||
m_stop_input_loop = true;
|
m_stop_input_loop = true;
|
||||||
|
play_cursor_sound = false;
|
||||||
|
Emu.GetCallbacks().play_sound(fs::get_config_dir() + "sounds/snd_decide.wav");
|
||||||
break;
|
break;
|
||||||
case pad_button::circle:
|
case pad_button::circle:
|
||||||
return_code = selection_code::canceled;
|
return_code = selection_code::canceled;
|
||||||
m_stop_input_loop = true;
|
m_stop_input_loop = true;
|
||||||
|
play_cursor_sound = false;
|
||||||
|
Emu.GetCallbacks().play_sound(fs::get_config_dir() + "sounds/snd_cancel.wav");
|
||||||
break;
|
break;
|
||||||
case pad_button::dpad_up:
|
case pad_button::dpad_up:
|
||||||
m_list->select_previous();
|
m_list->select_previous();
|
||||||
|
@ -171,6 +178,12 @@ namespace rsx
|
||||||
rsx_log.trace("[ui] Button %d pressed", static_cast<u8>(button_press));
|
rsx_log.trace("[ui] Button %d pressed", static_cast<u8>(button_press));
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Play a sound unless this is a fast auto repeat which would induce a nasty noise
|
||||||
|
if (play_cursor_sound && (!is_auto_repeat || m_auto_repeat_ms_interval >= m_auto_repeat_ms_interval_default))
|
||||||
|
{
|
||||||
|
Emu.GetCallbacks().play_sound(fs::get_config_dir() + "sounds/snd_cursor.wav");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
compiled_resource media_list_dialog::get_compiled()
|
compiled_resource media_list_dialog::get_compiled()
|
||||||
|
|
|
@ -35,7 +35,7 @@ namespace rsx
|
||||||
|
|
||||||
media_list_dialog();
|
media_list_dialog();
|
||||||
|
|
||||||
void on_button_pressed(pad_button button_press) override;
|
void on_button_pressed(pad_button button_press, bool is_auto_repeat) override;
|
||||||
|
|
||||||
compiled_resource get_compiled() override;
|
compiled_resource get_compiled() override;
|
||||||
|
|
||||||
|
|
|
@ -128,7 +128,7 @@ namespace rsx
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
void message_dialog::on_button_pressed(pad_button button_press)
|
void message_dialog::on_button_pressed(pad_button button_press, bool /*is_auto_repeat*/)
|
||||||
{
|
{
|
||||||
if (fade_animation.active) return;
|
if (fade_animation.active) return;
|
||||||
|
|
||||||
|
|
|
@ -67,7 +67,7 @@ namespace rsx
|
||||||
compiled_resource get_compiled() override;
|
compiled_resource get_compiled() override;
|
||||||
|
|
||||||
void update() override;
|
void update() override;
|
||||||
void on_button_pressed(pad_button button_press) override;
|
void on_button_pressed(pad_button button_press, bool is_auto_repeat) override;
|
||||||
void close(bool use_callback, bool stop_pad_interception) override;
|
void close(bool use_callback, bool stop_pad_interception) override;
|
||||||
|
|
||||||
error_code show(bool is_blocking, const std::string& text, const MsgDialogType& type, std::function<void(s32 status)> on_close);
|
error_code show(bool is_blocking, const std::string& text, const MsgDialogType& type, std::function<void(s32 status)> on_close);
|
||||||
|
|
|
@ -642,7 +642,7 @@ namespace rsx
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void osk_dialog::on_button_pressed(pad_button button_press)
|
void osk_dialog::on_button_pressed(pad_button button_press, bool is_auto_repeat)
|
||||||
{
|
{
|
||||||
if (!pad_input_enabled)
|
if (!pad_input_enabled)
|
||||||
return;
|
return;
|
||||||
|
@ -886,7 +886,8 @@ namespace rsx
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (play_cursor_sound)
|
// Play a sound unless this is a fast auto repeat which would induce a nasty noise
|
||||||
|
if (play_cursor_sound && (!is_auto_repeat || m_auto_repeat_ms_interval >= m_auto_repeat_ms_interval_default))
|
||||||
{
|
{
|
||||||
Emu.GetCallbacks().play_sound(fs::get_config_dir() + "sounds/snd_cursor.wav");
|
Emu.GetCallbacks().play_sound(fs::get_config_dir() + "sounds/snd_cursor.wav");
|
||||||
}
|
}
|
||||||
|
|
|
@ -123,7 +123,7 @@ namespace rsx
|
||||||
|
|
||||||
void set_visible(bool visible);
|
void set_visible(bool visible);
|
||||||
|
|
||||||
void on_button_pressed(pad_button button_press) override;
|
void on_button_pressed(pad_button button_press, bool is_auto_repeat) override;
|
||||||
void on_key_pressed(u32 led, u32 mkey, u32 key_code, u32 out_key_code, bool pressed, std::u32string key) override;
|
void on_key_pressed(u32 led, u32 mkey, u32 key_code, u32 out_key_code, bool pressed, std::u32string key) override;
|
||||||
void on_text_changed();
|
void on_text_changed();
|
||||||
|
|
||||||
|
|
|
@ -121,7 +121,7 @@ namespace rsx
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void save_dialog::on_button_pressed(pad_button button_press)
|
void save_dialog::on_button_pressed(pad_button button_press, bool is_auto_repeat)
|
||||||
{
|
{
|
||||||
if (fade_animation.active) return;
|
if (fade_animation.active) return;
|
||||||
|
|
||||||
|
@ -170,7 +170,8 @@ namespace rsx
|
||||||
close(true, true);
|
close(true, true);
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
else
|
// Play a sound unless this is a fast auto repeat which would induce a nasty noise
|
||||||
|
else if (!is_auto_repeat || m_auto_repeat_ms_interval >= m_auto_repeat_ms_interval_default)
|
||||||
{
|
{
|
||||||
Emu.GetCallbacks().play_sound(fs::get_config_dir() + "sounds/snd_cursor.wav");
|
Emu.GetCallbacks().play_sound(fs::get_config_dir() + "sounds/snd_cursor.wav");
|
||||||
}
|
}
|
||||||
|
|
|
@ -34,7 +34,7 @@ namespace rsx
|
||||||
save_dialog();
|
save_dialog();
|
||||||
|
|
||||||
void update() override;
|
void update() override;
|
||||||
void on_button_pressed(pad_button button_press) override;
|
void on_button_pressed(pad_button button_press, bool is_auto_repeat) override;
|
||||||
|
|
||||||
compiled_resource get_compiled() override;
|
compiled_resource get_compiled() override;
|
||||||
|
|
||||||
|
|
|
@ -96,7 +96,7 @@ namespace rsx
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void user_list_dialog::on_button_pressed(pad_button button_press)
|
void user_list_dialog::on_button_pressed(pad_button button_press, bool is_auto_repeat)
|
||||||
{
|
{
|
||||||
if (fade_animation.active) return;
|
if (fade_animation.active) return;
|
||||||
|
|
||||||
|
@ -153,7 +153,8 @@ namespace rsx
|
||||||
close(true, true);
|
close(true, true);
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
else
|
// Play a sound unless this is a fast auto repeat which would induce a nasty noise
|
||||||
|
else if (!is_auto_repeat || m_auto_repeat_ms_interval >= m_auto_repeat_ms_interval_default)
|
||||||
{
|
{
|
||||||
Emu.GetCallbacks().play_sound(fs::get_config_dir() + "sounds/snd_cursor.wav");
|
Emu.GetCallbacks().play_sound(fs::get_config_dir() + "sounds/snd_cursor.wav");
|
||||||
}
|
}
|
||||||
|
|
|
@ -31,7 +31,7 @@ namespace rsx
|
||||||
user_list_dialog();
|
user_list_dialog();
|
||||||
|
|
||||||
void update() override;
|
void update() override;
|
||||||
void on_button_pressed(pad_button button_press) override;
|
void on_button_pressed(pad_button button_press, bool is_auto_repeat) override;
|
||||||
|
|
||||||
compiled_resource get_compiled() override;
|
compiled_resource get_compiled() override;
|
||||||
|
|
||||||
|
|
|
@ -94,7 +94,7 @@ namespace rsx
|
||||||
timestamp[pad_index] = steady_clock::now();
|
timestamp[pad_index] = steady_clock::now();
|
||||||
initial_timestamp[pad_index] = timestamp[pad_index];
|
initial_timestamp[pad_index] = timestamp[pad_index];
|
||||||
last_auto_repeat_button[pad_index] = is_auto_repeat_button ? button_id : pad_button::pad_button_max_enum;
|
last_auto_repeat_button[pad_index] = is_auto_repeat_button ? button_id : pad_button::pad_button_max_enum;
|
||||||
on_button_pressed(static_cast<pad_button>(button_id));
|
on_button_pressed(static_cast<pad_button>(button_id), false);
|
||||||
}
|
}
|
||||||
else if (is_auto_repeat_button)
|
else if (is_auto_repeat_button)
|
||||||
{
|
{
|
||||||
|
@ -104,7 +104,7 @@ namespace rsx
|
||||||
{
|
{
|
||||||
// The auto-repeat button was pressed for at least the given threshold in ms and will trigger at an interval.
|
// The auto-repeat button was pressed for at least the given threshold in ms and will trigger at an interval.
|
||||||
timestamp[pad_index] = steady_clock::now();
|
timestamp[pad_index] = steady_clock::now();
|
||||||
on_button_pressed(static_cast<pad_button>(button_id));
|
on_button_pressed(static_cast<pad_button>(button_id), true);
|
||||||
}
|
}
|
||||||
else if (last_auto_repeat_button[pad_index] == pad_button::pad_button_max_enum)
|
else if (last_auto_repeat_button[pad_index] == pad_button::pad_button_max_enum)
|
||||||
{
|
{
|
||||||
|
|
|
@ -91,9 +91,10 @@ namespace rsx
|
||||||
interrupted = -4
|
interrupted = -4
|
||||||
};
|
};
|
||||||
|
|
||||||
|
static constexpr u64 m_auto_repeat_ms_interval_default = 200;
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
Timer m_input_timer;
|
Timer m_input_timer;
|
||||||
static constexpr u64 m_auto_repeat_ms_interval_default = 200;
|
|
||||||
u64 m_auto_repeat_ms_interval = m_auto_repeat_ms_interval_default;
|
u64 m_auto_repeat_ms_interval = m_auto_repeat_ms_interval_default;
|
||||||
std::set<u8> m_auto_repeat_buttons = {
|
std::set<u8> m_auto_repeat_buttons = {
|
||||||
pad_button::dpad_up,
|
pad_button::dpad_up,
|
||||||
|
@ -156,7 +157,7 @@ namespace rsx
|
||||||
|
|
||||||
compiled_resource get_compiled() override = 0;
|
compiled_resource get_compiled() override = 0;
|
||||||
|
|
||||||
virtual void on_button_pressed(pad_button /*button_press*/) {}
|
virtual void on_button_pressed(pad_button /*button_press*/, bool /*is_auto_repeat*/) {}
|
||||||
virtual void on_key_pressed(u32 /*led*/, u32 /*mkey*/, u32 /*key_code*/, u32 /*out_key_code*/, bool /*pressed*/, std::u32string /*key*/) {}
|
virtual void on_key_pressed(u32 /*led*/, u32 /*mkey*/, u32 /*key_code*/, u32 /*out_key_code*/, bool /*pressed*/, std::u32string /*key*/) {}
|
||||||
|
|
||||||
virtual void close(bool use_callback, bool stop_pad_interception);
|
virtual void close(bool use_callback, bool stop_pad_interception);
|
||||||
|
|
Loading…
Reference in New Issue