summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
author therealmogminer@gmail.com <therealmogminer@gmail.com>2016-04-10 19:22:13 +0200
committer therealmogminer@gmail.com <therealmogminer@gmail.com>2016-04-10 19:22:31 +0200
commitdd9c9a0fb3778f0d3cfbd65674d2a2f0f22f38aa (patch)
tree4e069fde013972f6974d5ff8183b779f487f232d
parentd4670d848831a77d32d560e12c084cfd6e08e817 (diff)
Make OSDs return ui_menu_item lists, not slider_state lists
-rw-r--r--src/emu/render.h5
-rw-r--r--src/emu/ui/menu.h3
-rw-r--r--src/emu/ui/sliders.cpp57
-rw-r--r--src/emu/ui/ui.cpp22
-rw-r--r--src/emu/ui/ui.h8
-rw-r--r--src/osd/modules/lib/osdobj_common.cpp2
-rw-r--r--src/osd/modules/lib/osdobj_common.h6
-rw-r--r--src/osd/modules/osdwindow.h5
-rw-r--r--src/osd/modules/render/bgfx/chainmanager.cpp38
-rw-r--r--src/osd/modules/render/bgfx/chainmanager.h4
-rw-r--r--src/osd/modules/render/d3d/d3dhlsl.cpp21
-rw-r--r--src/osd/modules/render/d3d/d3dhlsl.h6
-rw-r--r--src/osd/modules/render/drawbgfx.cpp2
-rw-r--r--src/osd/modules/render/drawbgfx.h2
-rw-r--r--src/osd/osdepend.h5
-rw-r--r--src/osd/sdl/osdsdl.h3
-rw-r--r--src/osd/windows/window.cpp2
17 files changed, 125 insertions, 66 deletions
diff --git a/src/emu/render.h b/src/emu/render.h
index 68bc65a0072..6092a37b45a 100644
--- a/src/emu/render.h
+++ b/src/emu/render.h
@@ -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
diff --git a/src/emu/ui/menu.h b/src/emu/ui/menu.h
index 80584673344..a07bcd1c519 100644
--- a/src/emu/ui/menu.h
+++ b/src/emu/ui/menu.h
@@ -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
};
diff --git a/src/emu/ui/sliders.cpp b/src/emu/ui/sliders.cpp
index 0960cf364b6..20cb435233a 100644
--- a/src/emu/ui/sliders.cpp
+++ b/src/emu/ui/sliders.cpp
@@ -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;
diff --git a/src/emu/ui/ui.cpp b/src/emu/ui/ui.cpp
index 2645e6c1b6f..b8ad5ee7f9c 100644
--- a/src/emu/ui/ui.cpp
+++ b/src/emu/ui/ui.cpp
@@ -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;
}
diff --git a/src/emu/ui/ui.h b/src/emu/ui/ui.h
index eaef943cade..9af361c8cc5 100644
--- a/src/emu/ui/ui.h
+++ b/src/emu/ui/ui.h
@@ -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
diff --git a/src/osd/modules/lib/osdobj_common.cpp b/src/osd/modules/lib/osdobj_common.cpp
index 568b68e57c2..32f1a6047ac 100644
--- a/src/osd/modules/lib/osdobj_common.cpp
+++ b/src/osd/modules/lib/osdobj_common.cpp
@@ -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;
}
diff --git a/src/osd/modules/lib/osdobj_common.h b/src/osd/modules/lib/osdobj_common.h
index d07702ee814..cd83ba61e7b 100644
--- a/src/osd/modules/lib/osdobj_common.h
+++ b/src/osd/modules/lib/osdobj_common.h
@@ -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;
diff --git a/src/osd/modules/osdwindow.h b/src/osd/modules/osdwindow.h
index 3543273e031..60d2cccc700 100644
--- a/src/osd/modules/osdwindow.h
+++ b/src/osd/modules/osdwindow.h
@@ -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;
diff --git a/src/osd/modules/render/bgfx/chainmanager.cpp b/src/osd/modules/render/bgfx/chainmanager.cpp
index c15aa84d1cd..5eaf6fc1378 100644
--- a/src/osd/modules/render/bgfx/chainmanager.cpp
+++ b/src/osd/modules/render/bgfx/chainmanager.cpp
@@ -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);
}
}
diff --git a/src/osd/modules/render/bgfx/chainmanager.h b/src/osd/modules/render/bgfx/chainmanager.h
index fa2808f0242..7d8d0c16eb3 100644
--- a/src/osd/modules/render/bgfx/chainmanager.h
+++ b/src/osd/modules/render/bgfx/chainmanager.h
@@ -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;
diff --git a/src/osd/modules/render/d3d/d3dhlsl.cpp b/src/osd/modules/render/d3d/d3dhlsl.cpp
index b753bdf1842..4cf8c96a164 100644
--- a/src/osd/modules/render/d3d/d3dhlsl.cpp
+++ b/src/osd/modules/render/d3d/d3dhlsl.cpp
@@ -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);
}
}
}
diff --git a/src/osd/modules/render/d3d/d3dhlsl.h b/src/osd/modules/render/d3d/d3dhlsl.h
index b4ae929c2dc..e5e6ad600b7 100644
--- a/src/osd/modules/render/d3d/d3dhlsl.h
+++ b/src/osd/modules/render/d3d/d3dhlsl.h
@@ -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:
diff --git a/src/osd/modules/render/drawbgfx.cpp b/src/osd/modules/render/drawbgfx.cpp
index 43c39ad10c9..32f45515a08 100644
--- a/src/osd/modules/render/drawbgfx.cpp
+++ b/src/osd/modules/render/drawbgfx.cpp
@@ -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();
diff --git a/src/osd/modules/render/drawbgfx.h b/src/osd/modules/render/drawbgfx.h
index 0107789b6e8..d48bb5914e6 100644
--- a/src/osd/modules/render/drawbgfx.h
+++ b/src/osd/modules/render/drawbgfx.h
@@ -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
diff --git a/src/osd/osdepend.h b/src/osd/osdepend.h
index 2ae7ab9001b..661160cb271 100644
--- a/src/osd/osdepend.h
+++ b/src/osd/osdepend.h
@@ -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;
diff --git a/src/osd/sdl/osdsdl.h b/src/osd/sdl/osdsdl.h
index 4d3a960f8b9..d3ce734b4d2 100644
--- a/src/osd/sdl/osdsdl.h
+++ b/src/osd/sdl/osdsdl.h
@@ -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;
diff --git a/src/osd/windows/window.cpp b/src/osd/windows/window.cpp
index 206155f5e37..0e30da1b93d 100644
--- a/src/osd/windows/window.cpp
+++ b/src/osd/windows/window.cpp
@@ -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());
}
}