-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 SDL Input Options
-------------------- -----------------
.. _mame-scommandline-enabletouch: .. _mame-scommandline-enabletouch:

View file

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

View file

@ -68,10 +68,6 @@ public:
virtual mac_options &options() override { return m_options; } virtual mac_options &options() override { return m_options; }
protected:
virtual void build_slider_list() override;
virtual void update_slider_list() override;
private: private:
virtual void osd_exit() override; 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() void mac_osd_interface::process_events()
{ {
} }
@ -106,6 +82,7 @@ bool mac_osd_interface::has_focus() const
return true; return true;
} }
//============================================================ //============================================================
// macwindow_exit // macwindow_exit
// (main thread) // (main thread)

View file

@ -463,9 +463,6 @@ void osd_common_t::update(bool skip_redraw)
// //
if (m_watchdog != nullptr) if (m_watchdog != nullptr)
m_watchdog->reset(); 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() 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; return m_sliders;
} }

View file

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

View file

@ -168,10 +168,6 @@ public:
virtual void process_events() override; virtual void process_events() override;
protected:
virtual void build_slider_list() override;
virtual void update_slider_list() override;
private: private:
enum 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 // sdlwindow_exit
// (main thread) // (main thread)

View file

@ -146,39 +146,12 @@ bool windows_osd_interface::window_init()
return true; 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() int windows_osd_interface::window_count()
{ {
return osd_common_t::window_list().size(); 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) 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 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); window->renderer().add_audio_to_recording(buffer, samples_this_frame);
} }
//============================================================ //============================================================
// winwindow_exit // winwindow_exit
// (main thread) // (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 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: private:
void process_events(bool ingame, bool nodispatch); void process_events(bool ingame, bool nodispatch);
virtual void osd_exit() override; virtual void osd_exit() override;