mirror of
https://github.com/holub/mame
synced 2025-04-23 08:49:55 +03:00
Make OSDs return ui_menu_item lists, not slider_state lists
This commit is contained in:
parent
d4670d8488
commit
dd9c9a0fb3
@ -51,8 +51,9 @@
|
||||
#include <math.h>
|
||||
#include <mutex>
|
||||
|
||||
#include "emucore.h"
|
||||
#include "bitmap.h"
|
||||
#include "emu.h"
|
||||
//#include "bitmap.h"
|
||||
//#include "screen.h"
|
||||
|
||||
//**************************************************************************
|
||||
// CONSTANTS
|
||||
|
@ -57,7 +57,8 @@ enum ui_menu_reset_options
|
||||
enum class ui_menu_item_type
|
||||
{
|
||||
UI_MENU_ITEM_TYPE_UNKNOWN,
|
||||
UI_MENU_ITEM_TYPE_SLIDER
|
||||
UI_MENU_ITEM_TYPE_SLIDER,
|
||||
UI_MENU_ITEM_TYPE_SEPARATOR
|
||||
};
|
||||
|
||||
|
||||
|
@ -140,36 +140,47 @@ void ui_menu_sliders::populate()
|
||||
std::string tempstring;
|
||||
|
||||
/* add UI sliders */
|
||||
std::vector<slider_state *> ui_sliders = machine().ui().get_slider_list();
|
||||
for (slider_state* slider : ui_sliders)
|
||||
std::vector<ui_menu_item> ui_sliders = machine().ui().get_slider_list();
|
||||
for (ui_menu_item item : ui_sliders)
|
||||
{
|
||||
INT32 curval = (*slider->update)(machine(), slider->arg, slider->id, &tempstring, SLIDER_NOCHANGE);
|
||||
UINT32 flags = 0;
|
||||
if (curval > slider->minval)
|
||||
flags |= MENU_FLAG_LEFT_ARROW;
|
||||
if (curval < slider->maxval)
|
||||
flags |= MENU_FLAG_RIGHT_ARROW;
|
||||
item_append(slider->description, tempstring.c_str(), flags, (void *)slider, ui_menu_item_type::UI_MENU_ITEM_TYPE_SLIDER);
|
||||
if (item.type == ui_menu_item_type::UI_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);
|
||||
UINT32 flags = 0;
|
||||
if (curval > slider->minval)
|
||||
flags |= MENU_FLAG_LEFT_ARROW;
|
||||
if (curval < slider->maxval)
|
||||
flags |= MENU_FLAG_RIGHT_ARROW;
|
||||
item_append(slider->description, tempstring.c_str(), flags, (void *)slider, ui_menu_item_type::UI_MENU_ITEM_TYPE_SLIDER);
|
||||
}
|
||||
else
|
||||
{
|
||||
item_append(item);
|
||||
}
|
||||
}
|
||||
|
||||
item_append(MENU_SEPARATOR_ITEM, nullptr, 0, nullptr);
|
||||
|
||||
/* add OSD options */
|
||||
std::vector<slider_state *> osd_sliders = machine().osd().get_slider_list();
|
||||
for (slider_state* slider : osd_sliders)
|
||||
std::vector<ui_menu_item> osd_sliders = machine().osd().get_slider_list();
|
||||
for (ui_menu_item item : osd_sliders)
|
||||
{
|
||||
if (slider == nullptr)
|
||||
{
|
||||
item_append(MENU_SEPARATOR_ITEM, nullptr, 0, nullptr);
|
||||
continue;
|
||||
}
|
||||
INT32 curval = (*slider->update)(machine(), slider->arg, slider->id, &tempstring, SLIDER_NOCHANGE);
|
||||
UINT32 flags = 0;
|
||||
if (curval > slider->minval)
|
||||
flags |= MENU_FLAG_LEFT_ARROW;
|
||||
if (curval < slider->maxval)
|
||||
flags |= MENU_FLAG_RIGHT_ARROW;
|
||||
item_append(slider->description, tempstring.c_str(), flags, (void *)slider, ui_menu_item_type::UI_MENU_ITEM_TYPE_SLIDER);
|
||||
if (item.type == ui_menu_item_type::UI_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);
|
||||
UINT32 flags = 0;
|
||||
if (curval > slider->minval)
|
||||
flags |= MENU_FLAG_LEFT_ARROW;
|
||||
if (curval < slider->maxval)
|
||||
flags |= MENU_FLAG_RIGHT_ARROW;
|
||||
item_append(slider->description, tempstring.c_str(), flags, (void *)slider, ui_menu_item_type::UI_MENU_ITEM_TYPE_SLIDER);
|
||||
}
|
||||
else
|
||||
{
|
||||
item_append(item);
|
||||
}
|
||||
}
|
||||
|
||||
custombottom = 2.0f * machine().ui().get_line_height() + 2.0f * UI_BOX_TB_BORDER;
|
||||
|
@ -118,7 +118,7 @@ std::string ui_manager::messagebox_poptext;
|
||||
rgb_t ui_manager::messagebox_backcolor;
|
||||
|
||||
// slider info
|
||||
std::vector<slider_state *> ui_manager::slider_list;
|
||||
std::vector<ui_menu_item> ui_manager::slider_list;
|
||||
slider_state *ui_manager::slider_current;
|
||||
|
||||
|
||||
@ -340,7 +340,7 @@ void ui_manager::initialize(running_machine &machine)
|
||||
slider_list = slider_init(machine);
|
||||
if (slider_list.size() > 0)
|
||||
{
|
||||
slider_current = slider_list[0];
|
||||
slider_current = reinterpret_cast<slider_state *>(slider_list[0].ref);
|
||||
}
|
||||
else
|
||||
{
|
||||
@ -1873,7 +1873,7 @@ UINT32 ui_manager::handler_confirm_quit(running_machine &machine, render_contain
|
||||
// ui_get_slider_list - get the list of sliders
|
||||
//-------------------------------------------------
|
||||
|
||||
std::vector<slider_state *>& ui_manager::get_slider_list(void)
|
||||
std::vector<ui_menu_item>& ui_manager::get_slider_list(void)
|
||||
{
|
||||
return slider_list;
|
||||
}
|
||||
@ -1906,7 +1906,7 @@ static slider_state *slider_alloc(running_machine &machine, const char *title, I
|
||||
// controls
|
||||
//----------------------------------------------------------
|
||||
|
||||
std::vector<slider_state *> ui_manager::slider_init(running_machine &machine)
|
||||
std::vector<ui_menu_item> ui_manager::slider_init(running_machine &machine)
|
||||
{
|
||||
std::vector<slider_state *> sliders;
|
||||
|
||||
@ -2040,7 +2040,19 @@ std::vector<slider_state *> ui_manager::slider_init(running_machine &machine)
|
||||
}
|
||||
#endif
|
||||
|
||||
return sliders;
|
||||
std::vector<ui_menu_item> items;
|
||||
for (slider_state *slider : sliders)
|
||||
{
|
||||
ui_menu_item item;
|
||||
item.text = slider->description;
|
||||
item.subtext = "";
|
||||
item.flags = 0;
|
||||
item.ref = slider;
|
||||
item.type = ui_menu_item_type::UI_MENU_ITEM_TYPE_SLIDER;
|
||||
items.push_back(item);
|
||||
}
|
||||
|
||||
return items;
|
||||
}
|
||||
|
||||
|
||||
|
@ -18,6 +18,8 @@
|
||||
#include "render.h"
|
||||
#include "moptions.h"
|
||||
|
||||
class ui_menu_item;
|
||||
|
||||
/***************************************************************************
|
||||
CONSTANTS
|
||||
***************************************************************************/
|
||||
@ -130,7 +132,7 @@ public:
|
||||
|
||||
// methods
|
||||
void initialize(running_machine &machine);
|
||||
std::vector<slider_state *> slider_init(running_machine &machine);
|
||||
std::vector<ui_menu_item> slider_init(running_machine &machine);
|
||||
UINT32 set_handler(ui_callback callback, UINT32 param);
|
||||
void display_startup_screens(bool first_time);
|
||||
void set_startup_text(const char *text, bool force);
|
||||
@ -169,7 +171,7 @@ public:
|
||||
std::string &game_info_astring(std::string &str);
|
||||
|
||||
// slider controls
|
||||
std::vector<slider_state *>& get_slider_list(void);
|
||||
std::vector<ui_menu_item>& get_slider_list(void);
|
||||
|
||||
// other
|
||||
void process_natural_keyboard();
|
||||
@ -212,7 +214,7 @@ private:
|
||||
static std::string messagebox_poptext;
|
||||
static rgb_t messagebox_backcolor;
|
||||
|
||||
static std::vector<slider_state *> slider_list;
|
||||
static std::vector<ui_menu_item> slider_list;
|
||||
static slider_state *slider_current;
|
||||
|
||||
// text generators
|
||||
|
@ -537,7 +537,7 @@ void osd_common_t::customize_input_type_list(simple_list<input_type_entry> &type
|
||||
// list of OS-dependent slider values.
|
||||
//-------------------------------------------------
|
||||
|
||||
std::vector<slider_state*> osd_common_t::get_slider_list()
|
||||
std::vector<ui_menu_item> osd_common_t::get_slider_list()
|
||||
{
|
||||
return m_sliders;
|
||||
}
|
||||
|
@ -24,6 +24,8 @@
|
||||
#include "modules/output/output_module.h"
|
||||
#include "cliopts.h"
|
||||
|
||||
class ui_menu_item;
|
||||
|
||||
//============================================================
|
||||
// Defines
|
||||
//============================================================
|
||||
@ -189,7 +191,7 @@ public:
|
||||
virtual void customize_input_type_list(simple_list<input_type_entry> &typelist) override;
|
||||
|
||||
// video overridables
|
||||
virtual std::vector<slider_state *> get_slider_list() override;
|
||||
virtual std::vector<ui_menu_item> get_slider_list() override;
|
||||
|
||||
// command option overrides
|
||||
virtual bool execute_command(const char *command) override;
|
||||
@ -279,7 +281,7 @@ protected:
|
||||
input_module* m_lightgun_input;
|
||||
input_module* m_joystick_input;
|
||||
output_module* m_output;
|
||||
std::vector<slider_state *> m_sliders;
|
||||
std::vector<ui_menu_item> m_sliders;
|
||||
|
||||
private:
|
||||
std::vector<const char *> m_video_names;
|
||||
|
@ -11,6 +11,7 @@
|
||||
|
||||
#include "emu.h"
|
||||
#include "ui/ui.h"
|
||||
#include "ui/menu.h"
|
||||
#include "osdhelper.h"
|
||||
|
||||
// standard windows headers
|
||||
@ -197,7 +198,7 @@ public:
|
||||
virtual int create() = 0;
|
||||
virtual render_primitive_list *get_primitives() = 0;
|
||||
|
||||
virtual std::vector<slider_state*> get_slider_list() { return m_sliders; }
|
||||
virtual std::vector<ui_menu_item> get_slider_list() { return m_sliders; }
|
||||
virtual int draw(const int update) = 0;
|
||||
virtual int xy_to_render_target(const int x, const int y, int *xt, int *yt) { return 0; };
|
||||
virtual void save() { };
|
||||
@ -213,7 +214,7 @@ protected:
|
||||
/* Internal flags */
|
||||
static const int FI_CHANGED = 0x010000;
|
||||
bool m_sliders_dirty;
|
||||
std::vector<slider_state*> m_sliders;
|
||||
std::vector<ui_menu_item> m_sliders;
|
||||
|
||||
private:
|
||||
osd_window *m_window;
|
||||
|
@ -10,6 +10,9 @@
|
||||
//============================================================
|
||||
|
||||
#include "emu.h"
|
||||
#include "ui/ui.h"
|
||||
#include "ui/menu.h"
|
||||
|
||||
#include "osdcore.h"
|
||||
#include "modules/osdwindow.h"
|
||||
|
||||
@ -29,8 +32,6 @@
|
||||
#include "target.h"
|
||||
#include "slider.h"
|
||||
|
||||
#include "ui/ui.h"
|
||||
|
||||
#include "sliderdirtynotifier.h"
|
||||
|
||||
using namespace rapidjson;
|
||||
@ -367,7 +368,13 @@ void chain_manager::create_selection_slider(uint32_t screen_index)
|
||||
state->id = screen_index;
|
||||
strcpy(state->description, description.c_str());
|
||||
|
||||
m_selection_sliders.push_back(state);
|
||||
ui_menu_item item;
|
||||
item.text = state->description;
|
||||
item.subtext = "";
|
||||
item.flags = 0;
|
||||
item.ref = state;
|
||||
item.type = ui_menu_item_type::UI_MENU_ITEM_TYPE_SLIDER;
|
||||
m_selection_sliders.push_back(item);
|
||||
}
|
||||
|
||||
uint32_t chain_manager::handle_screen_chains(uint32_t view, render_primitive *starting_prim, osd_window& window)
|
||||
@ -419,9 +426,9 @@ bool chain_manager::needs_sliders()
|
||||
return m_screen_count > 0 && m_available_chains.size() > 1;
|
||||
}
|
||||
|
||||
std::vector<slider_state*> chain_manager::get_slider_list()
|
||||
std::vector<ui_menu_item> chain_manager::get_slider_list()
|
||||
{
|
||||
std::vector<slider_state*> sliders;
|
||||
std::vector<ui_menu_item> sliders;
|
||||
|
||||
if (!needs_sliders())
|
||||
{
|
||||
@ -441,12 +448,29 @@ std::vector<slider_state*> chain_manager::get_slider_list()
|
||||
std::vector<bgfx_slider*> chain_sliders = chain->sliders();
|
||||
for (bgfx_slider* slider : chain_sliders)
|
||||
{
|
||||
sliders.push_back(slider->core_slider());
|
||||
slider_state* core_slider = slider->core_slider();
|
||||
|
||||
ui_menu_item item;
|
||||
item.text = core_slider->description;
|
||||
item.subtext = "";
|
||||
item.flags = 0;
|
||||
item.ref = core_slider;
|
||||
item.type = ui_menu_item_type::UI_MENU_ITEM_TYPE_SLIDER;
|
||||
m_selection_sliders.push_back(item);
|
||||
|
||||
sliders.push_back(item);
|
||||
}
|
||||
|
||||
if (chain_sliders.size() > 0)
|
||||
{
|
||||
sliders.push_back(nullptr);
|
||||
ui_menu_item item;
|
||||
item.text = MENU_SEPARATOR_ITEM;
|
||||
item.subtext = "";
|
||||
item.flags = 0;
|
||||
item.ref = nullptr;
|
||||
item.type = ui_menu_item_type::UI_MENU_ITEM_TYPE_SEPARATOR;
|
||||
|
||||
sliders.push_back(item);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -41,7 +41,7 @@ public:
|
||||
bgfx_chain* screen_chain(uint32_t screen);
|
||||
bgfx_chain* load_chain(std::string name, uint32_t screen_index);
|
||||
bool has_applicable_chain(uint32_t screen);
|
||||
std::vector<slider_state*> get_slider_list();
|
||||
std::vector<ui_menu_item> get_slider_list();
|
||||
|
||||
private:
|
||||
void load_chains();
|
||||
@ -69,7 +69,7 @@ private:
|
||||
uint32_t m_screen_count;
|
||||
std::vector<std::string> m_available_chains;
|
||||
std::vector<bgfx_chain*> m_screen_chains;
|
||||
std::vector<slider_state*> m_selection_sliders;
|
||||
std::vector<ui_menu_item> m_selection_sliders;
|
||||
std::vector<int32_t> m_current_chain;
|
||||
|
||||
static const uint32_t CHAIN_NONE;
|
||||
|
@ -400,7 +400,7 @@ void shaders::end_avi_recording()
|
||||
// shaders::toggle
|
||||
//============================================================
|
||||
|
||||
void shaders::toggle(std::vector<slider_state*>& sliders)
|
||||
void shaders::toggle(std::vector<ui_menu_item>& sliders)
|
||||
{
|
||||
if (master_enable)
|
||||
{
|
||||
@ -827,7 +827,7 @@ void shaders::init_fsfx_quad(void *vertbuf)
|
||||
// shaders::create_resources
|
||||
//============================================================
|
||||
|
||||
int shaders::create_resources(bool reset, std::vector<slider_state*>& sliders)
|
||||
int shaders::create_resources(bool reset, std::vector<ui_menu_item>& sliders)
|
||||
{
|
||||
if (!master_enable || !d3dintf->post_fx_available)
|
||||
{
|
||||
@ -1003,7 +1003,7 @@ int shaders::create_resources(bool reset, std::vector<slider_state*>& sliders)
|
||||
|
||||
initialized = true;
|
||||
|
||||
std::vector<slider_state*> my_sliders = init_slider_list();
|
||||
std::vector<ui_menu_item> my_sliders = init_slider_list();
|
||||
sliders.insert(sliders.end(), my_sliders.begin(), my_sliders.end());
|
||||
|
||||
return 0;
|
||||
@ -2447,9 +2447,9 @@ void *shaders::get_slider_option(int id, int index)
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
std::vector<slider_state*> shaders::init_slider_list()
|
||||
std::vector<ui_menu_item> shaders::init_slider_list()
|
||||
{
|
||||
std::vector<slider_state*> sliders;
|
||||
std::vector<ui_menu_item> sliders;
|
||||
|
||||
for (slider* slider : internal_sliders)
|
||||
{
|
||||
@ -2502,7 +2502,16 @@ std::vector<slider_state*> shaders::init_slider_list()
|
||||
default:
|
||||
break;
|
||||
}
|
||||
sliders.push_back(slider_alloc(*machine, desc->id, name.c_str(), desc->minval, desc->defval, desc->maxval, desc->step, slider_update_trampoline, slider_arg));
|
||||
|
||||
slider_state* core_slider = slider_alloc(*machine, desc->id, name.c_str(), desc->minval, desc->defval, desc->maxval, desc->step, slider_update_trampoline, slider_arg);
|
||||
|
||||
ui_menu_item item;
|
||||
item.text = core_slider->description;
|
||||
item.subtext = "";
|
||||
item.flags = 0;
|
||||
item.ref = core_slider;
|
||||
item.type = ui_menu_item_type::UI_MENU_ITEM_TYPE_SLIDER;
|
||||
sliders.push_back(item);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -303,7 +303,7 @@ public:
|
||||
void init(d3d_base *d3dintf, running_machine *machine, renderer_d3d9 *renderer);
|
||||
|
||||
bool enabled() { return master_enable; }
|
||||
void toggle(std::vector<slider_state*>& sliders);
|
||||
void toggle(std::vector<ui_menu_item>& sliders);
|
||||
|
||||
bool vector_enabled() { return master_enable && vector_enable; }
|
||||
d3d_render_target* get_vector_target(render_primitive *prim);
|
||||
@ -338,11 +338,11 @@ public:
|
||||
void remove_render_target(int source_width, int source_height, UINT32 screen_index, UINT32 page_index);
|
||||
void remove_render_target(d3d_render_target *rt);
|
||||
|
||||
int create_resources(bool reset, std::vector<slider_state*>& sliders);
|
||||
int create_resources(bool reset, std::vector<ui_menu_item>& sliders);
|
||||
void delete_resources(bool reset);
|
||||
|
||||
// slider-related functions
|
||||
std::vector<slider_state*> init_slider_list();
|
||||
std::vector<ui_menu_item> init_slider_list();
|
||||
void *get_slider_option(int id, int index = 0);
|
||||
|
||||
private:
|
||||
|
@ -1118,7 +1118,7 @@ void renderer_bgfx::allocate_buffer(render_primitive *prim, UINT32 blend, bgfx::
|
||||
}
|
||||
}
|
||||
|
||||
std::vector<slider_state*> renderer_bgfx::get_slider_list()
|
||||
std::vector<ui_menu_item> renderer_bgfx::get_slider_list()
|
||||
{
|
||||
m_sliders_dirty = false;
|
||||
return m_chains->get_slider_list();
|
||||
|
@ -42,7 +42,7 @@ public:
|
||||
virtual int create() override;
|
||||
virtual int draw(const int update) override;
|
||||
|
||||
virtual std::vector<slider_state*> get_slider_list() override;
|
||||
virtual std::vector<ui_menu_item> get_slider_list() override;
|
||||
virtual void set_sliders_dirty() override;
|
||||
|
||||
#ifdef OSD_SDL
|
||||
|
@ -17,6 +17,7 @@
|
||||
#include "osdcore.h"
|
||||
#include "unicode.h"
|
||||
#include "cliopts.h"
|
||||
#include "ui/menu.h"
|
||||
|
||||
#include <memory>
|
||||
#include <string>
|
||||
@ -56,8 +57,6 @@ public:
|
||||
|
||||
// ======================> osd_interface
|
||||
|
||||
struct slider_state;
|
||||
|
||||
// description of the currently-running machine
|
||||
class osd_interface
|
||||
{
|
||||
@ -80,7 +79,7 @@ public:
|
||||
virtual void customize_input_type_list(simple_list<input_type_entry> &typelist) = 0;
|
||||
|
||||
// video overridables
|
||||
virtual std::vector<slider_state *> get_slider_list() = 0;
|
||||
virtual std::vector<ui_menu_item> get_slider_list() = 0;
|
||||
|
||||
// font interface
|
||||
virtual osd_font::ptr font_alloc() = 0;
|
||||
|
@ -140,9 +140,6 @@ public:
|
||||
virtual void init(running_machine &machine) override;
|
||||
virtual void update(bool skip_redraw) override;
|
||||
|
||||
// video overridables
|
||||
// virtual std::vector<slider_state *> get_slider_list() override;
|
||||
|
||||
// input overridables
|
||||
virtual void customize_input_type_list(simple_list<input_type_entry> &typelist) override;
|
||||
|
||||
|
@ -277,7 +277,7 @@ void windows_osd_interface::build_slider_list()
|
||||
for (win_window_info *window = win_window_list; window != nullptr; window = window->m_next)
|
||||
{
|
||||
// take the sliders of the first window
|
||||
std::vector<slider_state*> window_sliders = window->m_renderer->get_slider_list();
|
||||
std::vector<ui_menu_item> window_sliders = window->m_renderer->get_slider_list();
|
||||
m_sliders.insert(m_sliders.end(), window_sliders.begin(), window_sliders.end());
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user