diff options
author | therealmogminer@gmail.com <therealmogminer@gmail.com> | 2016-05-28 15:36:50 +0200 |
---|---|---|
committer | therealmogminer@gmail.com <therealmogminer@gmail.com> | 2016-05-28 17:33:45 +0200 |
commit | 63132b3d01ee0ad797e797057687facf43f4f26d (patch) | |
tree | bd207a3454fe4f68ae9f3230a9fb57107d9a7c88 /src/frontend/mame/ui | |
parent | 68a9dc6857e4f33be844e53d58acb8d24adcc543 (diff) |
More slider cleanup, nw
Diffstat (limited to 'src/frontend/mame/ui')
-rw-r--r-- | src/frontend/mame/ui/slider.h | 7 | ||||
-rw-r--r-- | src/frontend/mame/ui/sliderchangednotifier.h | 29 | ||||
-rw-r--r-- | src/frontend/mame/ui/sliders.cpp | 10 | ||||
-rw-r--r-- | src/frontend/mame/ui/ui.cpp | 221 | ||||
-rw-r--r-- | src/frontend/mame/ui/ui.h | 86 |
5 files changed, 264 insertions, 89 deletions
diff --git a/src/frontend/mame/ui/slider.h b/src/frontend/mame/ui/slider.h index a7873db800a..7cd4b580831 100644 --- a/src/frontend/mame/ui/slider.h +++ b/src/frontend/mame/ui/slider.h @@ -14,16 +14,19 @@ #ifndef __UI_SLIDER__ #define __UI_SLIDER__ +#include <functional> + #include "emu.h" +#include "sliderchangednotifier.h" #define SLIDER_NOCHANGE 0x12345678 -typedef INT32(*slider_update)(running_machine &machine, void *arg, int id, std::string *str, INT32 newval); +typedef std::function<INT32(running_machine&, void*, int, std::string*, INT32)> slider_update; struct slider_state { slider_state * next; /* pointer to next slider */ - slider_update update; /* callback */ + slider_update update; /* callback */ void * arg; /* argument */ INT32 minval; /* minimum value */ INT32 defval; /* default value */ diff --git a/src/frontend/mame/ui/sliderchangednotifier.h b/src/frontend/mame/ui/sliderchangednotifier.h new file mode 100644 index 00000000000..40e6df4b4bf --- /dev/null +++ b/src/frontend/mame/ui/sliderchangednotifier.h @@ -0,0 +1,29 @@ +// license:BSD-3-Clause +// copyright-holders:Ryan Holtz +//====================================================================== +// +// sliderchangednotifier.cpp - Interface for a slider-changed callback +// +//====================================================================== + +#pragma once + +#ifndef __SLIDER_CHANGED_NOTIFIER__ +#define __SLIDER_CHANGED_NOTIFIER__ + +#include <cstdint> +#include <string> + +using INT32 = std::int32_t; + +class running_machine; + +class slider_changed_notifier +{ +public: + virtual ~slider_changed_notifier() { } + + virtual INT32 slider_changed(running_machine &machine, void *arg, int id, std::string *str, INT32 newval) = 0; +}; + +#endif // __SLIDER_CHANGED_NOTIFIER__ diff --git a/src/frontend/mame/ui/sliders.cpp b/src/frontend/mame/ui/sliders.cpp index 920d2ede4b4..b94b8f00055 100644 --- a/src/frontend/mame/ui/sliders.cpp +++ b/src/frontend/mame/ui/sliders.cpp @@ -43,7 +43,7 @@ void menu_sliders::handle() if (menu_event->itemref != nullptr && menu_event->type == menu_item_type::SLIDER) { const slider_state *slider = (const slider_state *)menu_event->itemref; - INT32 curvalue = (*slider->update)(machine(), slider->arg, slider->id, nullptr, SLIDER_NOCHANGE); + INT32 curvalue = slider->update(machine(), slider->arg, slider->id, nullptr, SLIDER_NOCHANGE); INT32 increment = 0; bool alt_pressed = machine().input().code_pressed(KEYCODE_LALT) || machine().input().code_pressed(KEYCODE_RALT); bool ctrl_pressed = machine().input().code_pressed(KEYCODE_LCONTROL) || machine().input().code_pressed(KEYCODE_RCONTROL); @@ -105,7 +105,7 @@ void menu_sliders::handle() newvalue = slider->maxval; /* update the slider and recompute the menu */ - (*slider->update)(machine(), slider->arg, slider->id, nullptr, newvalue); + slider->update(machine(), slider->arg, slider->id, nullptr, newvalue); reset(reset_options::REMEMBER_REF); } } @@ -147,7 +147,7 @@ void menu_sliders::populate() if (item.type == menu_item_type::SLIDER) { slider_state* slider = reinterpret_cast<slider_state *>(item.ref); - INT32 curval = (*slider->update)(machine(), slider->arg, slider->id, &tempstring, SLIDER_NOCHANGE); + INT32 curval = slider->update(machine(), slider->arg, slider->id, &tempstring, SLIDER_NOCHANGE); UINT32 flags = 0; if (curval > slider->minval) flags |= FLAG_LEFT_ARROW; @@ -170,7 +170,7 @@ void menu_sliders::populate() if (item.type == menu_item_type::SLIDER) { slider_state* slider = reinterpret_cast<slider_state *>(item.ref); - INT32 curval = (*slider->update)(machine(), slider->arg, slider->id, &tempstring, SLIDER_NOCHANGE); + INT32 curval = slider->update(machine(), slider->arg, slider->id, &tempstring, SLIDER_NOCHANGE); UINT32 flags = 0; if (curval > slider->minval) flags |= FLAG_LEFT_ARROW; @@ -205,7 +205,7 @@ void menu_sliders::custom_render(void *selectedref, float top, float bottom, flo INT32 curval; /* determine the current value and text */ - curval = (*curslider->update)(machine(), curslider->arg, curslider->id, &tempstring, SLIDER_NOCHANGE); + curval = curslider->update(machine(), curslider->arg, curslider->id, &tempstring, SLIDER_NOCHANGE); /* compute the current and default percentages */ percentage = (float)(curval - curslider->minval) / (float)(curslider->maxval - curslider->minval); diff --git a/src/frontend/mame/ui/ui.cpp b/src/frontend/mame/ui/ui.cpp index 4f01102abb4..08bcfa0ceac 100644 --- a/src/frontend/mame/ui/ui.cpp +++ b/src/frontend/mame/ui/ui.cpp @@ -126,39 +126,6 @@ slider_state *mame_ui_manager::slider_current; /*************************************************************************** - FUNCTION PROTOTYPES -***************************************************************************/ - -// slider controls -static slider_state *slider_alloc(running_machine &machine, const char *title, INT32 minval, INT32 defval, INT32 maxval, INT32 incval, slider_update update, void *arg); -static INT32 slider_volume(running_machine &machine, void *arg, int id, std::string *str, INT32 newval); -static INT32 slider_mixervol(running_machine &machine, void *arg, int id, std::string *str, INT32 newval); -static INT32 slider_adjuster(running_machine &machine, void *arg, int id, std::string *str, INT32 newval); -static INT32 slider_overclock(running_machine &machine, void *arg, int id, std::string *str, INT32 newval); -static INT32 slider_refresh(running_machine &machine, void *arg, int id, std::string *str, INT32 newval); -static INT32 slider_brightness(running_machine &machine, void *arg, int id, std::string *str, INT32 newval); -static INT32 slider_contrast(running_machine &machine, void *arg, int id, std::string *str, INT32 newval); -static INT32 slider_gamma(running_machine &machine, void *arg, int id, std::string *str, INT32 newval); -static INT32 slider_xscale(running_machine &machine, void *arg, int id, std::string *str, INT32 newval); -static INT32 slider_yscale(running_machine &machine, void *arg, int id, std::string *str, INT32 newval); -static INT32 slider_xoffset(running_machine &machine, void *arg, int id, std::string *str, INT32 newval); -static INT32 slider_yoffset(running_machine &machine, void *arg, int id, std::string *str, INT32 newval); -static INT32 slider_overxscale(running_machine &machine, void *arg, int id, std::string *str, INT32 newval); -static INT32 slider_overyscale(running_machine &machine, void *arg, int id, std::string *str, INT32 newval); -static INT32 slider_overxoffset(running_machine &machine, void *arg, int id, std::string *str, INT32 newval); -static INT32 slider_overyoffset(running_machine &machine, void *arg, int id, std::string *str, INT32 newval); -static INT32 slider_flicker(running_machine &machine, void *arg, int id, std::string *str, INT32 newval); -static INT32 slider_beam_width_min(running_machine &machine, void *arg, int id, std::string *str, INT32 newval); -static INT32 slider_beam_width_max(running_machine &machine, void *arg, int id, std::string *str, INT32 newval); -static INT32 slider_beam_intensity_weight(running_machine &machine, void *arg, int id, std::string *str, INT32 newval); -static std::string slider_get_screen_desc(screen_device &screen); -#ifdef MAME_DEBUG -static INT32 slider_crossscale(running_machine &machine, void *arg, int id, std::string *str, INT32 newval); -static INT32 slider_crossoffset(running_machine &machine, void *arg, int id, std::string *str, INT32 newval); -#endif - - -/*************************************************************************** INLINE FUNCTIONS ***************************************************************************/ @@ -1896,7 +1863,7 @@ std::vector<ui::menu_item>& mame_ui_manager::get_slider_list(void) // slider_alloc - allocate a new slider entry //------------------------------------------------- -static slider_state *slider_alloc(running_machine &machine, const char *title, INT32 minval, INT32 defval, INT32 maxval, INT32 incval, slider_update update, void *arg) +slider_state* mame_ui_manager::slider_alloc(running_machine &machine, int id, const char *title, INT32 minval, INT32 defval, INT32 maxval, INT32 incval, void *arg) { int size = sizeof(slider_state) + strlen(title); slider_state *state = (slider_state *)auto_alloc_array_clear(machine, UINT8, size); @@ -1905,9 +1872,12 @@ static slider_state *slider_alloc(running_machine &machine, const char *title, I state->defval = defval; state->maxval = maxval; state->incval = incval; - state->update = update; + + using namespace std::placeholders; + state->update = std::bind(&mame_ui_manager::slider_changed, this, _1, _2, _3, _4, _5); + state->arg = arg; - state->id = -1; + state->id = id; strcpy(state->description, title); return state; @@ -1924,7 +1894,7 @@ std::vector<ui::menu_item> mame_ui_manager::slider_init(running_machine &machine std::vector<slider_state *> sliders; // add overall volume - sliders.push_back(slider_alloc(machine, _("Master Volume"), -32, 0, 0, 1, slider_volume, nullptr)); + sliders.push_back(slider_alloc(machine, SLIDER_ID_VOLUME, _("Master Volume"), -32, 0, 0, 1, nullptr)); // add per-channel volume mixer_input info; @@ -1934,34 +1904,37 @@ std::vector<ui::menu_item> mame_ui_manager::slider_init(running_machine &machine INT32 defval = 1000; std::string str = string_format(_("%1$s Volume"), info.stream->input_name(info.inputnum)); - sliders.push_back(slider_alloc(machine, str.c_str(), 0, defval, maxval, 20, slider_mixervol, (void *)(FPTR)item)); + sliders.push_back(slider_alloc(machine, SLIDER_ID_MIXERVOL + item, str.c_str(), 0, defval, maxval, 20, (void *)(FPTR)item)); } // add analog adjusters + int slider_index = 0; for (ioport_port &port : machine.ioport().ports()) { for (ioport_field &field : port.fields()) { if (field.type() == IPT_ADJUSTER) { - sliders.push_back(slider_alloc(machine, field.name(), field.minval(), field.defvalue(), field.maxval(), 1, slider_adjuster, (void *)&field)); + sliders.push_back(slider_alloc(machine, SLIDER_ID_ADJUSTER + slider_index++, field.name(), field.minval(), field.defvalue(), field.maxval(), 1, (void *)&field)); } } } // add CPU overclocking (cheat only) + slider_index = 0; if (machine.options().cheat()) { for (device_execute_interface &exec : execute_interface_iterator(machine.root_device())) { void *param = (void *)&exec.device(); std::string str = string_format(_("Overclock CPU %1$s"), exec.device().tag()); - sliders.push_back(slider_alloc(machine, str.c_str(), 10, 1000, 2000, 1, slider_overclock, param)); + sliders.push_back(slider_alloc(machine, SLIDER_ID_OVERCLOCK + slider_index++, str.c_str(), 10, 1000, 2000, 1, param)); } } // add screen parameters screen_device_iterator scriter(machine.root_device()); + slider_index = 0; for (screen_device &screen : scriter) { int defxscale = floor(screen.xscale() * 1000.0f + 0.5f); @@ -1975,28 +1948,30 @@ std::vector<ui::menu_item> mame_ui_manager::slider_init(running_machine &machine if (machine.options().cheat()) { std::string str = string_format(_("%1$s Refresh Rate"), screen_desc); - sliders.push_back(slider_alloc(machine, str.c_str(), -10000, 0, 10000, 1000, slider_refresh, param)); + sliders.push_back(slider_alloc(machine, SLIDER_ID_REFRESH + slider_index, str.c_str(), -10000, 0, 10000, 1000, param)); } // add standard brightness/contrast/gamma controls per-screen std::string str = string_format(_("%1$s Brightness"), screen_desc); - sliders.push_back(slider_alloc(machine, str.c_str(), 100, 1000, 2000, 10, slider_brightness, param)); + sliders.push_back(slider_alloc(machine, SLIDER_ID_BRIGHTNESS + slider_index, str.c_str(), 100, 1000, 2000, 10, param)); str = string_format(_("%1$s Contrast"), screen_desc); - sliders.push_back(slider_alloc(machine, str.c_str(), 100, 1000, 2000, 50, slider_contrast, param)); + sliders.push_back(slider_alloc(machine, SLIDER_ID_CONTRAST + slider_index, str.c_str(), 100, 1000, 2000, 50, param)); str = string_format(_("%1$s Gamma"), screen_desc); - sliders.push_back(slider_alloc(machine, str.c_str(), 100, 1000, 3000, 50, slider_gamma, param)); + sliders.push_back(slider_alloc(machine, SLIDER_ID_GAMMA + slider_index, str.c_str(), 100, 1000, 3000, 50, param)); // add scale and offset controls per-screen str = string_format(_("%1$s Horiz Stretch"), screen_desc); - sliders.push_back(slider_alloc(machine, str.c_str(), 500, defxscale, 1500, 2, slider_xscale, param)); + sliders.push_back(slider_alloc(machine, SLIDER_ID_XSCALE + slider_index, str.c_str(), 500, defxscale, 1500, 2, param)); str = string_format(_("%1$s Horiz Position"), screen_desc); - sliders.push_back(slider_alloc(machine, str.c_str(), -500, defxoffset, 500, 2, slider_xoffset, param)); + sliders.push_back(slider_alloc(machine, SLIDER_ID_XOFFSET + slider_index, str.c_str(), -500, defxoffset, 500, 2, param)); str = string_format(_("%1$s Vert Stretch"), screen_desc); - sliders.push_back(slider_alloc(machine, str.c_str(), 500, defyscale, 1500, 2, slider_yscale, param)); + sliders.push_back(slider_alloc(machine, SLIDER_ID_YSCALE + slider_index, str.c_str(), 500, defyscale, 1500, 2, param)); str = string_format(_("%1$s Vert Position"), screen_desc); - sliders.push_back(slider_alloc(machine, str.c_str(), -500, defyoffset, 500, 2, slider_yoffset, param)); + sliders.push_back(slider_alloc(machine, SLIDER_ID_YOFFSET + slider_index, str.c_str(), -500, defyoffset, 500, 2, param)); + slider_index++; } + slider_index = 0; for (laserdisc_device &laserdisc : laserdisc_device_iterator(machine.root_device())) { if (laserdisc.overlay_configured()) @@ -2011,30 +1986,34 @@ std::vector<ui::menu_item> mame_ui_manager::slider_init(running_machine &machine // add scale and offset controls per-overlay std::string str = string_format(_("Laserdisc '%1$s' Horiz Stretch"), laserdisc.tag()); - sliders.push_back(slider_alloc(machine, str.c_str(), 500, (defxscale == 0) ? 1000 : defxscale, 1500, 2, slider_overxscale, param)); + sliders.push_back(slider_alloc(machine, SLIDER_ID_OVERLAY_XSCALE + slider_index, str.c_str(), 500, (defxscale == 0) ? 1000 : defxscale, 1500, 2, param)); str = string_format(_("Laserdisc '%1$s' Horiz Position"), laserdisc.tag()); - sliders.push_back(slider_alloc(machine, str.c_str(), -500, defxoffset, 500, 2, slider_overxoffset, param)); + sliders.push_back(slider_alloc(machine, SLIDER_ID_OVERLAY_YSCALE + slider_index, str.c_str(), -500, defxoffset, 500, 2, param)); str = string_format(_("Laserdisc '%1$s' Vert Stretch"), laserdisc.tag()); - sliders.push_back(slider_alloc(machine, str.c_str(), 500, (defyscale == 0) ? 1000 : defyscale, 1500, 2, slider_overyscale, param)); + sliders.push_back(slider_alloc(machine, SLIDER_ID_OVERLAY_XOFFSET + slider_index, str.c_str(), 500, (defyscale == 0) ? 1000 : defyscale, 1500, 2, param)); str = string_format(_("Laserdisc '%1$s' Vert Position"), laserdisc.tag()); - sliders.push_back(slider_alloc(machine, str.c_str(), -500, defyoffset, 500, 2, slider_overyoffset, param)); + sliders.push_back(slider_alloc(machine, SLIDER_ID_OVERLAY_YOFFSET + slider_index, str.c_str(), -500, defyoffset, 500, 2, param)); + slider_index++; } } + slider_index = 0; for (screen_device &screen : scriter) { if (screen.screen_type() == SCREEN_TYPE_VECTOR) { // add vector control - sliders.push_back(slider_alloc(machine, _("Vector Flicker"), 0, 0, 1000, 10, slider_flicker, nullptr)); - sliders.push_back(slider_alloc(machine, _("Beam Width Minimum"), 1, 100, 1000, 1, slider_beam_width_min, nullptr)); - sliders.push_back(slider_alloc(machine, _("Beam Width Maximum"), 1, 100, 1000, 1, slider_beam_width_max, nullptr)); - sliders.push_back(slider_alloc(machine, _("Beam Intensity Weight"), -1000, 0, 1000, 10, slider_beam_intensity_weight, nullptr)); + sliders.push_back(slider_alloc(machine, SLIDER_ID_FLICKER + slider_index, _("Vector Flicker"), 0, 0, 1000, 10, nullptr)); + sliders.push_back(slider_alloc(machine, SLIDER_ID_BEAM_WIDTH_MIN + slider_index, _("Beam Width Minimum"), 1, 100, 1000, 1, nullptr)); + sliders.push_back(slider_alloc(machine, SLIDER_ID_BEAM_WIDTH_MAX + slider_index, _("Beam Width Maximum"), 1, 100, 1000, 1, nullptr)); + sliders.push_back(slider_alloc(machine, SLIDER_ID_BEAM_INTENSITY + slider_index, _("Beam Intensity Weight"), -1000, 0, 1000, 10, nullptr)); + slider_index++; break; } } #ifdef MAME_DEBUG + slider_index = 0; // add crosshair adjusters for (ioport_port &port : machine.ioport().ports()) { @@ -2043,9 +2022,9 @@ std::vector<ui::menu_item> mame_ui_manager::slider_init(running_machine &machine if (field.crosshair_axis() != CROSSHAIR_AXIS_NONE && field.player() == 0) { std::string str = string_format(_("Crosshair Scale %1$s"), (field.crosshair_axis() == CROSSHAIR_AXIS_X) ? _("X") : _("Y")); - sliders.push_back(slider_alloc(machine, str.c_str(), -3000, 1000, 3000, 100, slider_crossscale, (void *)&field)); + sliders.push_back(slider_alloc(machine, SLIDER_ID_CROSSHAIR_SCALE + slider_index, str.c_str(), -3000, 1000, 3000, 100, (void *)&field)); str = string_format(_("Crosshair Offset %1$s"), (field.crosshair_axis() == CROSSHAIR_AXIS_X) ? _("X") : _("Y")); - sliders.push_back(slider_alloc(machine, str.c_str(), -3000, 0, 3000, 100, slider_crossoffset, (void *)&field)); + sliders.push_back(slider_alloc(machine, SLIDER_ID_CROSSHAIR_OFFSET + slider_index, str.c_str(), -3000, 0, 3000, 100, (void *)&field)); } } } @@ -2066,12 +2045,92 @@ std::vector<ui::menu_item> mame_ui_manager::slider_init(running_machine &machine return items; } +//---------------------------------------------------- +// slider_changed - global slider-modified callback +//---------------------------------------------------- + +INT32 mame_ui_manager::slider_changed(running_machine &machine, void *arg, int id, std::string *str, INT32 newval) +{ + switch (id) + { + case SLIDER_ID_VOLUME: + return slider_volume(machine, arg, id, str, newval); + + case SLIDER_ID_MIXERVOL ... SLIDER_ID_MIXERVOL_LAST: + return slider_mixervol(machine, arg, id, str, newval); + + case SLIDER_ID_ADJUSTER ... SLIDER_ID_ADJUSTER_LAST: + return slider_adjuster(machine, arg, id, str, newval); + + case SLIDER_ID_OVERCLOCK ... SLIDER_ID_OVERCLOCK_LAST: + return slider_overclock(machine, arg, id, str, newval); + + case SLIDER_ID_REFRESH ... SLIDER_ID_REFRESH_LAST: + return slider_refresh(machine, arg, id, str, newval); + + case SLIDER_ID_BRIGHTNESS ... SLIDER_ID_BRIGHTNESS_LAST: + return slider_brightness(machine, arg, id, str, newval); + + case SLIDER_ID_CONTRAST ... SLIDER_ID_CONTRAST_LAST: + return slider_contrast(machine, arg, id, str, newval); + + case SLIDER_ID_GAMMA ... SLIDER_ID_GAMMA_LAST: + return slider_gamma(machine, arg, id, str, newval); + + case SLIDER_ID_XSCALE ... SLIDER_ID_XSCALE_LAST: + return slider_xscale(machine, arg, id, str, newval); + + case SLIDER_ID_YSCALE ... SLIDER_ID_YSCALE_LAST: + return slider_yscale(machine, arg, id, str, newval); + + case SLIDER_ID_XOFFSET ... SLIDER_ID_XOFFSET_LAST: + return slider_xoffset(machine, arg, id, str, newval); + + case SLIDER_ID_YOFFSET ... SLIDER_ID_YOFFSET_LAST: + return slider_yoffset(machine, arg, id, str, newval); + + case SLIDER_ID_OVERLAY_XSCALE ... SLIDER_ID_OVERLAY_XSCALE_LAST: + return slider_overxscale(machine, arg, id, str, newval); + + case SLIDER_ID_OVERLAY_YSCALE ... SLIDER_ID_OVERLAY_YSCALE_LAST: + return slider_overyscale(machine, arg, id, str, newval); + + case SLIDER_ID_OVERLAY_XOFFSET ... SLIDER_ID_OVERLAY_XOFFSET_LAST: + return slider_overxoffset(machine, arg, id, str, newval); + + case SLIDER_ID_OVERLAY_YOFFSET ... SLIDER_ID_OVERLAY_YOFFSET_LAST: + return slider_overyoffset(machine, arg, id, str, newval); + + case SLIDER_ID_FLICKER ... SLIDER_ID_FLICKER_LAST: + return slider_flicker(machine, arg, id, str, newval); + + case SLIDER_ID_BEAM_WIDTH_MIN ... SLIDER_ID_BEAM_WIDTH_MIN_LAST: + return slider_beam_width_min(machine, arg, id, str, newval); + + case SLIDER_ID_BEAM_WIDTH_MAX ... SLIDER_ID_BEAM_WIDTH_MAX_LAST: + return slider_beam_width_max(machine, arg, id, str, newval); + + case SLIDER_ID_BEAM_INTENSITY ... SLIDER_ID_BEAM_INTENSITY_LAST: + return slider_beam_intensity_weight(machine, arg, id, str, newval); + +#ifdef MAME_DEBUG + case SLIDER_ID_CROSSHAIR_SCALE ... SLIDER_ID_CROSSHAIR_SCALE_LAST: + return slider_crossscale(machine, arg, id, str, newval); + + case SLIDER_ID_CROSSHAIR_OFFSET ... SLIDER_ID_CROSSHAIR_OFFSET_LAST: + return slider_crossoffset(machine, arg, id, str, newval); +#endif + } + + return 0; +} + //------------------------------------------------- // slider_volume - global volume slider callback //------------------------------------------------- -static INT32 slider_volume(running_machine &machine, void *arg, int id, std::string *str, INT32 newval) +INT32 mame_ui_manager::slider_volume(running_machine &machine, void *arg, int id, std::string *str, INT32 newval) { if (newval != SLIDER_NOCHANGE) machine.sound().set_attenuation(newval); @@ -2086,7 +2145,7 @@ static INT32 slider_volume(running_machine &machine, void *arg, int id, std::str // slider callback //------------------------------------------------- -static INT32 slider_mixervol(running_machine &machine, void *arg, int id, std::string *str, INT32 newval) +INT32 mame_ui_manager::slider_mixervol(running_machine &machine, void *arg, int id, std::string *str, INT32 newval) { mixer_input info; if (!machine.sound().indexed_mixer_input((FPTR)arg, info)) @@ -2108,7 +2167,7 @@ static INT32 slider_mixervol(running_machine &machine, void *arg, int id, std::s // callback //------------------------------------------------- -static INT32 slider_adjuster(running_machine &machine, void *arg, int id, std::string *str, INT32 newval) +INT32 mame_ui_manager::slider_adjuster(running_machine &machine, void *arg, int id, std::string *str, INT32 newval) { ioport_field *field = (ioport_field *)arg; ioport_field::user_settings settings; @@ -2130,7 +2189,7 @@ static INT32 slider_adjuster(running_machine &machine, void *arg, int id, std::s // callback //------------------------------------------------- -static INT32 slider_overclock(running_machine &machine, void *arg, int id, std::string *str, INT32 newval) +INT32 mame_ui_manager::slider_overclock(running_machine &machine, void *arg, int id, std::string *str, INT32 newval) { device_t *cpu = (device_t *)arg; if (newval != SLIDER_NOCHANGE) @@ -2145,7 +2204,7 @@ static INT32 slider_overclock(running_machine &machine, void *arg, int id, std:: // slider_refresh - refresh rate slider callback //------------------------------------------------- -static INT32 slider_refresh(running_machine &machine, void *arg, int id, std::string *str, INT32 newval) +INT32 mame_ui_manager::slider_refresh(running_machine &machine, void *arg, int id, std::string *str, INT32 newval) { screen_device *screen = reinterpret_cast<screen_device *>(arg); double defrefresh = ATTOSECONDS_TO_HZ(screen->refresh_attoseconds()); @@ -2170,7 +2229,7 @@ static INT32 slider_refresh(running_machine &machine, void *arg, int id, std::st // callback //------------------------------------------------- -static INT32 slider_brightness(running_machine &machine, void *arg, int id, std::string *str, INT32 newval) +INT32 mame_ui_manager::slider_brightness(running_machine &machine, void *arg, int id, std::string *str, INT32 newval) { screen_device *screen = reinterpret_cast<screen_device *>(arg); render_container::user_settings settings; @@ -2192,7 +2251,7 @@ static INT32 slider_brightness(running_machine &machine, void *arg, int id, std: // callback //------------------------------------------------- -static INT32 slider_contrast(running_machine &machine, void *arg, int id, std::string *str, INT32 newval) +INT32 mame_ui_manager::slider_contrast(running_machine &machine, void *arg, int id, std::string *str, INT32 newval) { screen_device *screen = reinterpret_cast<screen_device *>(arg); render_container::user_settings settings; @@ -2213,7 +2272,7 @@ static INT32 slider_contrast(running_machine &machine, void *arg, int id, std::s // slider_gamma - screen gamma slider callback //------------------------------------------------- -static INT32 slider_gamma(running_machine &machine, void *arg, int id, std::string *str, INT32 newval) +INT32 mame_ui_manager::slider_gamma(running_machine &machine, void *arg, int id, std::string *str, INT32 newval) { screen_device *screen = reinterpret_cast<screen_device *>(arg); render_container::user_settings settings; @@ -2235,7 +2294,7 @@ static INT32 slider_gamma(running_machine &machine, void *arg, int id, std::stri // callback //------------------------------------------------- -static INT32 slider_xscale(running_machine &machine, void *arg, int id, std::string *str, INT32 newval) +INT32 mame_ui_manager::slider_xscale(running_machine &machine, void *arg, int id, std::string *str, INT32 newval) { screen_device *screen = reinterpret_cast<screen_device *>(arg); render_container::user_settings settings; @@ -2257,7 +2316,7 @@ static INT32 slider_xscale(running_machine &machine, void *arg, int id, std::str // callback //------------------------------------------------- -static INT32 slider_yscale(running_machine &machine, void *arg, int id, std::string *str, INT32 newval) +INT32 mame_ui_manager::slider_yscale(running_machine &machine, void *arg, int id, std::string *str, INT32 newval) { screen_device *screen = reinterpret_cast<screen_device *>(arg); render_container::user_settings settings; @@ -2279,7 +2338,7 @@ static INT32 slider_yscale(running_machine &machine, void *arg, int id, std::str // slider callback //------------------------------------------------- -static INT32 slider_xoffset(running_machine &machine, void *arg, int id, std::string *str, INT32 newval) +INT32 mame_ui_manager::slider_xoffset(running_machine &machine, void *arg, int id, std::string *str, INT32 newval) { screen_device *screen = reinterpret_cast<screen_device *>(arg); render_container::user_settings settings; @@ -2301,7 +2360,7 @@ static INT32 slider_xoffset(running_machine &machine, void *arg, int id, std::st // slider callback //------------------------------------------------- -static INT32 slider_yoffset(running_machine &machine, void *arg, int id, std::string *str, INT32 newval) +INT32 mame_ui_manager::slider_yoffset(running_machine &machine, void *arg, int id, std::string *str, INT32 newval) { screen_device *screen = reinterpret_cast<screen_device *>(arg); render_container::user_settings settings; @@ -2323,7 +2382,7 @@ static INT32 slider_yoffset(running_machine &machine, void *arg, int id, std::st // callback //------------------------------------------------- -static INT32 slider_overxscale(running_machine &machine, void *arg, int id, std::string *str, INT32 newval) +INT32 mame_ui_manager::slider_overxscale(running_machine &machine, void *arg, int id, std::string *str, INT32 newval) { laserdisc_device *laserdisc = (laserdisc_device *)arg; laserdisc_overlay_config settings; @@ -2345,7 +2404,7 @@ static INT32 slider_overxscale(running_machine &machine, void *arg, int id, std: // callback //------------------------------------------------- -static INT32 slider_overyscale(running_machine &machine, void *arg, int id, std::string *str, INT32 newval) +INT32 mame_ui_manager::slider_overyscale(running_machine &machine, void *arg, int id, std::string *str, INT32 newval) { laserdisc_device *laserdisc = (laserdisc_device *)arg; laserdisc_overlay_config settings; @@ -2367,7 +2426,7 @@ static INT32 slider_overyscale(running_machine &machine, void *arg, int id, std: // slider callback //------------------------------------------------- -static INT32 slider_overxoffset(running_machine &machine, void *arg, int id, std::string *str, INT32 newval) +INT32 mame_ui_manager::slider_overxoffset(running_machine &machine, void *arg, int id, std::string *str, INT32 newval) { laserdisc_device *laserdisc = (laserdisc_device *)arg; laserdisc_overlay_config settings; @@ -2389,7 +2448,7 @@ static INT32 slider_overxoffset(running_machine &machine, void *arg, int id, std // slider callback //------------------------------------------------- -static INT32 slider_overyoffset(running_machine &machine, void *arg, int id, std::string *str, INT32 newval) +INT32 mame_ui_manager::slider_overyoffset(running_machine &machine, void *arg, int id, std::string *str, INT32 newval) { laserdisc_device *laserdisc = (laserdisc_device *)arg; laserdisc_overlay_config settings; @@ -2411,7 +2470,7 @@ static INT32 slider_overyoffset(running_machine &machine, void *arg, int id, std // callback //------------------------------------------------- -static INT32 slider_flicker(running_machine &machine, void *arg, int id, std::string *str, INT32 newval) +INT32 mame_ui_manager::slider_flicker(running_machine &machine, void *arg, int id, std::string *str, INT32 newval) { if (newval != SLIDER_NOCHANGE) vector_options::s_flicker = (float)newval * 0.001f; @@ -2426,7 +2485,7 @@ static INT32 slider_flicker(running_machine &machine, void *arg, int id, std::st // callback //------------------------------------------------- -static INT32 slider_beam_width_min(running_machine &machine, void *arg, int id, std::string *str, INT32 newval) +INT32 mame_ui_manager::slider_beam_width_min(running_machine &machine, void *arg, int id, std::string *str, INT32 newval) { if (newval != SLIDER_NOCHANGE) vector_options::s_beam_width_min = MIN((float)newval * 0.01f, vector_options::s_beam_width_max); @@ -2441,7 +2500,7 @@ static INT32 slider_beam_width_min(running_machine &machine, void *arg, int id, // callback //------------------------------------------------- -static INT32 slider_beam_width_max(running_machine &machine, void *arg, int id, std::string *str, INT32 newval) +INT32 mame_ui_manager::slider_beam_width_max(running_machine &machine, void *arg, int id, std::string *str, INT32 newval) { if (newval != SLIDER_NOCHANGE) vector_options::s_beam_width_max = MAX((float)newval * 0.01f, vector_options::s_beam_width_min); @@ -2456,7 +2515,7 @@ static INT32 slider_beam_width_max(running_machine &machine, void *arg, int id, // callback //------------------------------------------------- -static INT32 slider_beam_intensity_weight(running_machine &machine, void *arg, int id, std::string *str, INT32 newval) +INT32 mame_ui_manager::slider_beam_intensity_weight(running_machine &machine, void *arg, int id, std::string *str, INT32 newval) { if (newval != SLIDER_NOCHANGE) vector_options::s_beam_intensity_weight = (float)newval * 0.001f; @@ -2471,7 +2530,7 @@ static INT32 slider_beam_intensity_weight(running_machine &machine, void *arg, i // description for a given screen //------------------------------------------------- -static std::string slider_get_screen_desc(screen_device &screen) +std::string mame_ui_manager::slider_get_screen_desc(screen_device &screen) { if (screen_device_iterator(screen.machine().root_device()).count() > 1) return string_format(_("Screen '%1$s'"), screen.tag()); @@ -2485,7 +2544,7 @@ static std::string slider_get_screen_desc(screen_device &screen) //------------------------------------------------- #ifdef MAME_DEBUG -static INT32 slider_crossscale(running_machine &machine, void *arg, int id, std::string *str, INT32 newval) +INT32 mame_ui_manager::slider_crossscale(running_machine &machine, void *arg, int id, std::string *str, INT32 newval) { ioport_field *field = (ioport_field *)arg; @@ -2504,7 +2563,7 @@ static INT32 slider_crossscale(running_machine &machine, void *arg, int id, std: //------------------------------------------------- #ifdef MAME_DEBUG -static INT32 slider_crossoffset(running_machine &machine, void *arg, int id, std::string *str, INT32 newval) +INT32 mame_ui_manager::slider_crossoffset(running_machine &machine, void *arg, int id, std::string *str, INT32 newval) { ioport_field *field = (ioport_field *)arg; diff --git a/src/frontend/mame/ui/ui.h b/src/frontend/mame/ui/ui.h index b81114c939c..299465e2d67 100644 --- a/src/frontend/mame/ui/ui.h +++ b/src/frontend/mame/ui/ui.h @@ -93,6 +93,59 @@ enum DRAW_OPAQUE }; +#define SLIDER_DEVICE_SPACING 0x0ff +#define SLIDER_SCREEN_SPACING 0x0f +#define SLIDER_INPUT_SPACING 0x0f + +enum +{ + SLIDER_ID_VOLUME = 0, + SLIDER_ID_MIXERVOL, + SLIDER_ID_MIXERVOL_LAST = SLIDER_ID_MIXERVOL + SLIDER_DEVICE_SPACING, + SLIDER_ID_ADJUSTER, + SLIDER_ID_ADJUSTER_LAST = SLIDER_ID_ADJUSTER + SLIDER_DEVICE_SPACING, + SLIDER_ID_OVERCLOCK, + SLIDER_ID_OVERCLOCK_LAST = SLIDER_ID_OVERCLOCK + SLIDER_DEVICE_SPACING, + SLIDER_ID_REFRESH, + SLIDER_ID_REFRESH_LAST = SLIDER_ID_REFRESH + SLIDER_SCREEN_SPACING, + SLIDER_ID_BRIGHTNESS, + SLIDER_ID_BRIGHTNESS_LAST = SLIDER_ID_BRIGHTNESS + SLIDER_SCREEN_SPACING, + SLIDER_ID_CONTRAST, + SLIDER_ID_CONTRAST_LAST = SLIDER_ID_CONTRAST + SLIDER_SCREEN_SPACING, + SLIDER_ID_GAMMA, + SLIDER_ID_GAMMA_LAST = SLIDER_ID_GAMMA + SLIDER_SCREEN_SPACING, + SLIDER_ID_XSCALE, + SLIDER_ID_XSCALE_LAST = SLIDER_ID_XSCALE + SLIDER_SCREEN_SPACING, + SLIDER_ID_YSCALE, + SLIDER_ID_YSCALE_LAST = SLIDER_ID_YSCALE + SLIDER_SCREEN_SPACING, + SLIDER_ID_XOFFSET, + SLIDER_ID_XOFFSET_LAST = SLIDER_ID_XOFFSET + SLIDER_SCREEN_SPACING, + SLIDER_ID_YOFFSET, + SLIDER_ID_YOFFSET_LAST = SLIDER_ID_YOFFSET + SLIDER_SCREEN_SPACING, + SLIDER_ID_OVERLAY_XSCALE, + SLIDER_ID_OVERLAY_XSCALE_LAST = SLIDER_ID_OVERLAY_XSCALE + SLIDER_SCREEN_SPACING, + SLIDER_ID_OVERLAY_YSCALE, + SLIDER_ID_OVERLAY_YSCALE_LAST = SLIDER_ID_OVERLAY_YSCALE + SLIDER_SCREEN_SPACING, + SLIDER_ID_OVERLAY_XOFFSET, + SLIDER_ID_OVERLAY_XOFFSET_LAST = SLIDER_ID_OVERLAY_XOFFSET + SLIDER_SCREEN_SPACING, + SLIDER_ID_OVERLAY_YOFFSET, + SLIDER_ID_OVERLAY_YOFFSET_LAST = SLIDER_ID_OVERLAY_YOFFSET + SLIDER_SCREEN_SPACING, + SLIDER_ID_FLICKER, + SLIDER_ID_FLICKER_LAST = SLIDER_ID_FLICKER + SLIDER_SCREEN_SPACING, + SLIDER_ID_BEAM_WIDTH_MIN, + SLIDER_ID_BEAM_WIDTH_MIN_LAST = SLIDER_ID_BEAM_WIDTH_MIN + SLIDER_SCREEN_SPACING, + SLIDER_ID_BEAM_WIDTH_MAX, + SLIDER_ID_BEAM_WIDTH_MAX_LAST = SLIDER_ID_BEAM_WIDTH_MAX + SLIDER_SCREEN_SPACING, + SLIDER_ID_BEAM_INTENSITY, + SLIDER_ID_BEAM_INTENSITY_LAST = SLIDER_ID_BEAM_INTENSITY + SLIDER_SCREEN_SPACING, + SLIDER_ID_CROSSHAIR_SCALE, + SLIDER_ID_CROSSHAIR_SCALE_LAST = SLIDER_ID_CROSSHAIR_SCALE + SLIDER_INPUT_SPACING, + SLIDER_ID_CROSSHAIR_OFFSET, + SLIDER_ID_CROSSHAIR_OFFSET_LAST = SLIDER_ID_CROSSHAIR_OFFSET + SLIDER_INPUT_SPACING, + + SLIDER_ID_CORE_LAST = SLIDER_ID_CROSSHAIR_OFFSET, + SLIDER_ID_CORE_COUNT +}; /*************************************************************************** TYPE DEFINITIONS @@ -103,7 +156,7 @@ typedef UINT32 (*ui_callback)(mame_ui_manager &, render_container *, UINT32); // ======================> mame_ui_manager -class mame_ui_manager : public ui_manager +class mame_ui_manager : public ui_manager, public slider_changed_notifier { public: // construction/destruction @@ -179,6 +232,7 @@ public: virtual void image_display(const device_type &type, device_image_interface *image) override; virtual void menu_reset() override; + private: // instance variables render_font * m_font; @@ -215,6 +269,36 @@ private: // private methods void exit(); + slider_state* slider_alloc(running_machine &machine, int id, const char *title, INT32 minval, INT32 defval, INT32 maxval, INT32 incval, void *arg); + + // slider controls + virtual INT32 slider_changed(running_machine &machine, void *arg, int id, std::string *str, INT32 newval) override; + + INT32 slider_volume(running_machine &machine, void *arg, int id, std::string *str, INT32 newval); + INT32 slider_mixervol(running_machine &machine, void *arg, int id, std::string *str, INT32 newval); + INT32 slider_adjuster(running_machine &machine, void *arg, int id, std::string *str, INT32 newval); + INT32 slider_overclock(running_machine &machine, void *arg, int id, std::string *str, INT32 newval); + INT32 slider_refresh(running_machine &machine, void *arg, int id, std::string *str, INT32 newval); + INT32 slider_brightness(running_machine &machine, void *arg, int id, std::string *str, INT32 newval); + INT32 slider_contrast(running_machine &machine, void *arg, int id, std::string *str, INT32 newval); + INT32 slider_gamma(running_machine &machine, void *arg, int id, std::string *str, INT32 newval); + INT32 slider_xscale(running_machine &machine, void *arg, int id, std::string *str, INT32 newval); + INT32 slider_yscale(running_machine &machine, void *arg, int id, std::string *str, INT32 newval); + INT32 slider_xoffset(running_machine &machine, void *arg, int id, std::string *str, INT32 newval); + INT32 slider_yoffset(running_machine &machine, void *arg, int id, std::string *str, INT32 newval); + INT32 slider_overxscale(running_machine &machine, void *arg, int id, std::string *str, INT32 newval); + INT32 slider_overyscale(running_machine &machine, void *arg, int id, std::string *str, INT32 newval); + INT32 slider_overxoffset(running_machine &machine, void *arg, int id, std::string *str, INT32 newval); + INT32 slider_overyoffset(running_machine &machine, void *arg, int id, std::string *str, INT32 newval); + INT32 slider_flicker(running_machine &machine, void *arg, int id, std::string *str, INT32 newval); + INT32 slider_beam_width_min(running_machine &machine, void *arg, int id, std::string *str, INT32 newval); + INT32 slider_beam_width_max(running_machine &machine, void *arg, int id, std::string *str, INT32 newval); + INT32 slider_beam_intensity_weight(running_machine &machine, void *arg, int id, std::string *str, INT32 newval); + std::string slider_get_screen_desc(screen_device &screen); + #ifdef MAME_DEBUG + INT32 slider_crossscale(running_machine &machine, void *arg, int id, std::string *str, INT32 newval); + INT32 slider_crossoffset(running_machine &machine, void *arg, int id, std::string *str, INT32 newval); + #endif }; |