diff --git a/src/emu/video.h b/src/emu/video.h index 5e11a0e699..7d14544cca 100644 --- a/src/emu/video.h +++ b/src/emu/video.h @@ -61,6 +61,7 @@ public: bool sync_refresh() const { return m_syncrefresh; } bool fastforward() const { return m_fastforward; } bool is_recording() const { return (m_mng_file || m_avi_file); } + int32_t framedelay() const { return m_framedelay; } // setters void set_frameskip(int frameskip); @@ -68,6 +69,7 @@ public: void set_throttle_rate(float throttle_rate) { m_throttle_rate = throttle_rate; } void set_fastforward(bool ffwd = true) { m_fastforward = ffwd; } void set_output_changed() { m_output_changed = true; } + void set_framedelay(int framedelay) { m_framedelay = framedelay; } // misc void toggle_throttle(); diff --git a/src/frontend/mame/ui/ui.cpp b/src/frontend/mame/ui/ui.cpp index 026bf0c34f..d10341b7cb 100644 --- a/src/frontend/mame/ui/ui.cpp +++ b/src/frontend/mame/ui/ui.cpp @@ -1364,6 +1364,10 @@ std::vector mame_ui_manager::slider_init(running_machine &machine // add overall volume m_sliders.push_back(slider_alloc(SLIDER_ID_VOLUME, _("Master Volume"), -32, 0, 0, 1, nullptr)); + // add frame delay, if enabled + if (machine.video().framedelay()) + m_sliders.push_back(slider_alloc(SLIDER_ID_FRAMEDELAY, _("Frame Delay"), 1, 0, 9, 1, nullptr)); + // add per-channel volume mixer_input info; for (int item = 0; machine.sound().indexed_mixer_input(item, info); item++) @@ -1531,6 +1535,8 @@ int32_t mame_ui_manager::slider_changed(running_machine &machine, void *arg, int { if (id == SLIDER_ID_VOLUME) return slider_volume(machine, arg, id, str, newval); + else if (id == SLIDER_ID_FRAMEDELAY) + return slider_framedelay(machine, arg, id, str, newval); else if (id >= SLIDER_ID_MIXERVOL && id <= SLIDER_ID_MIXERVOL_LAST) return slider_mixervol(machine, arg, id, str, newval); else if (id >= SLIDER_ID_ADJUSTER && id <= SLIDER_ID_ADJUSTER_LAST) @@ -1593,6 +1599,19 @@ int32_t mame_ui_manager::slider_volume(running_machine &machine, void *arg, int return machine.sound().attenuation(); } +//------------------------------------------------- +// slider_framedelay - global frame delay slider +// callback +//------------------------------------------------- + +int32_t mame_ui_manager::slider_framedelay(running_machine &machine, void *arg, int id, std::string *str, int32_t newval) +{ + if (newval != SLIDER_NOCHANGE) + machine.video().set_framedelay(newval); + if (str) + *str = string_format(_("%1$3d"), machine.video().framedelay()); + return machine.video().framedelay(); +} //------------------------------------------------- // slider_mixervol - single channel volume diff --git a/src/frontend/mame/ui/ui.h b/src/frontend/mame/ui/ui.h index b124b471d9..209e7d1c2a 100644 --- a/src/frontend/mame/ui/ui.h +++ b/src/frontend/mame/ui/ui.h @@ -77,6 +77,7 @@ class machine_info; enum { SLIDER_ID_VOLUME = 0, + SLIDER_ID_FRAMEDELAY, SLIDER_ID_MIXERVOL, SLIDER_ID_MIXERVOL_LAST = SLIDER_ID_MIXERVOL + SLIDER_DEVICE_SPACING, SLIDER_ID_ADJUSTER, @@ -273,6 +274,7 @@ private: virtual int32_t slider_changed(running_machine &machine, void *arg, int id, std::string *str, int32_t newval) override; int32_t slider_volume(running_machine &machine, void *arg, int id, std::string *str, int32_t newval); + int32_t slider_framedelay(running_machine &machine, void *arg, int id, std::string *str, int32_t newval); int32_t slider_mixervol(running_machine &machine, void *arg, int id, std::string *str, int32_t newval); int32_t slider_adjuster(running_machine &machine, void *arg, int id, std::string *str, int32_t newval); int32_t slider_overclock(running_machine &machine, void *arg, int id, std::string *str, int32_t newval);