-osd: Update slider list on demand rather than on frame updated (fixes MT08857).

-konami/konamigq.cpp: No need to cancel a newly allocated timer.
This commit is contained in:
Vas Crabb 2024-04-27 04:42:12 +10:00
parent f91b896cda
commit 64834145ae
10 changed files with 28 additions and 95 deletions

View file

@ -62,7 +62,7 @@ SDL Keyboard Mapping
SDL Input Options
--------------------
-----------------
.. _mame-scommandline-enabletouch:

View file

@ -330,7 +330,6 @@ void konamigq_state::machine_start()
save_item(NAME(m_sound_intck));
m_dma_timer = timer_alloc(FUNC(konamigq_state::scsi_dma_transfer), this);
m_dma_timer->adjust(attotime::never);
}
void konamigq_state::machine_reset()

View file

@ -68,10 +68,6 @@ public:
virtual mac_options &options() override { return m_options; }
protected:
virtual void build_slider_list() override;
virtual void update_slider_list() override;
private:
virtual void osd_exit() override;

View file

@ -73,30 +73,6 @@ bool mac_osd_interface::window_init()
}
void mac_osd_interface::update_slider_list()
{
for (auto const &window : osd_common_t::window_list())
{
// check if any window has dirty sliders
if (window->renderer().sliders_dirty())
{
build_slider_list();
return;
}
}
}
void mac_osd_interface::build_slider_list()
{
m_sliders.clear();
for (auto const &window : osd_common_t::window_list())
{
std::vector<ui::menu_item> window_sliders = window->renderer().get_slider_list();
m_sliders.insert(m_sliders.end(), window_sliders.begin(), window_sliders.end());
}
}
void mac_osd_interface::process_events()
{
}
@ -106,6 +82,7 @@ bool mac_osd_interface::has_focus() const
return true;
}
//============================================================
// macwindow_exit
// (main thread)

View file

@ -463,9 +463,6 @@ void osd_common_t::update(bool skip_redraw)
//
if (m_watchdog != nullptr)
m_watchdog->reset();
update_slider_list();
}
@ -568,6 +565,31 @@ void osd_common_t::customize_input_type_list(std::vector<input_type_entry> &type
std::vector<ui::menu_item> osd_common_t::get_slider_list()
{
// check if any window has dirty sliders
bool dirty = false;
for (const auto &window : window_list())
{
if (window->has_renderer() && window->renderer().sliders_dirty())
{
dirty = true;
break;
}
}
if (dirty)
{
m_sliders.clear();
for (const auto &window : osd_common_t::window_list())
{
if (window->has_renderer())
{
std::vector<ui::menu_item> window_sliders = window->renderer().get_slider_list();
m_sliders.insert(m_sliders.end(), window_sliders.begin(), window_sliders.end());
}
}
}
return m_sliders;
}

View file

@ -277,9 +277,6 @@ public:
protected:
virtual bool input_init();
virtual void build_slider_list() { }
virtual void update_slider_list() { }
void poll_input_modules(bool relative_reset);
static std::list<std::unique_ptr<osd_window> > s_window_list;

View file

@ -168,10 +168,6 @@ public:
virtual void process_events() override;
protected:
virtual void build_slider_list() override;
virtual void update_slider_list() override;
private:
enum
{

View file

@ -111,30 +111,6 @@ bool sdl_osd_interface::window_init()
}
void sdl_osd_interface::update_slider_list()
{
for (auto const &window : osd_common_t::window_list())
{
// check if any window has dirty sliders
if (window->renderer().sliders_dirty())
{
build_slider_list();
return;
}
}
}
void sdl_osd_interface::build_slider_list()
{
m_sliders.clear();
for (auto const &window : osd_common_t::window_list())
{
std::vector<ui::menu_item> window_sliders = window->renderer().get_slider_list();
m_sliders.insert(m_sliders.end(), window_sliders.begin(), window_sliders.end());
}
}
//============================================================
// sdlwindow_exit
// (main thread)

View file

@ -146,39 +146,12 @@ bool windows_osd_interface::window_init()
return true;
}
void windows_osd_interface::update_slider_list()
{
for (const auto &window : osd_common_t::window_list())
{
// check if any window has dirty sliders
if (window->has_renderer() && window->renderer().sliders_dirty())
{
build_slider_list();
return;
}
}
}
int windows_osd_interface::window_count()
{
return osd_common_t::window_list().size();
}
void windows_osd_interface::build_slider_list()
{
m_sliders.clear();
for (const auto &window : osd_common_t::window_list())
{
if (window->has_renderer())
{
// take the sliders of the first window
std::vector<ui::menu_item> window_sliders = window->renderer().get_slider_list();
m_sliders.insert(m_sliders.end(), window_sliders.begin(), window_sliders.end());
}
}
}
void windows_osd_interface::add_audio_to_recording(const int16_t *buffer, int samples_this_frame)
{
auto const &window = osd_common_t::window_list().front(); // We only record on the first window
@ -186,6 +159,7 @@ void windows_osd_interface::add_audio_to_recording(const int16_t *buffer, int sa
window->renderer().add_audio_to_recording(buffer, samples_this_frame);
}
//============================================================
// winwindow_exit
// (main thread)

View file

@ -92,10 +92,6 @@ public:
using osd_common_t::poll_input_modules; // Win32 debugger calls this directly, which it shouldn't
protected:
virtual void build_slider_list() override;
virtual void update_slider_list() override;
private:
void process_events(bool ingame, bool nodispatch);
virtual void osd_exit() override;