summaryrefslogtreecommitdiffstatshomepage
path: root/src/osd/modules/render/bgfx/sliderreader.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/osd/modules/render/bgfx/sliderreader.cpp')
-rw-r--r--src/osd/modules/render/bgfx/sliderreader.cpp151
1 files changed, 114 insertions, 37 deletions
diff --git a/src/osd/modules/render/bgfx/sliderreader.cpp b/src/osd/modules/render/bgfx/sliderreader.cpp
index 2cd56d52457..dd59f308220 100644
--- a/src/osd/modules/render/bgfx/sliderreader.cpp
+++ b/src/osd/modules/render/bgfx/sliderreader.cpp
@@ -6,69 +6,146 @@
//
//==============================================================
-#include "emu.h"
-
#include "sliderreader.h"
+#include "emu.h"
#include "slider.h"
const slider_reader::string_to_enum slider_reader::TYPE_NAMES[slider_reader::TYPE_COUNT] = {
- { "bool", uint64_t(bgfx_slider::slider_type::SLIDER_BOOL) },
- { "float", uint64_t(bgfx_slider::slider_type::SLIDER_FLOAT) },
- { "int", uint64_t(bgfx_slider::slider_type::SLIDER_INT) },
- { "color", uint64_t(bgfx_slider::slider_type::SLIDER_COLOR) },
- { "vec2", uint64_t(bgfx_slider::slider_type::SLIDER_VEC2) }
+ { "int_enum", uint64_t(bgfx_slider::slider_type::SLIDER_INT_ENUM) },
+ { "float", uint64_t(bgfx_slider::slider_type::SLIDER_FLOAT) },
+ { "int", uint64_t(bgfx_slider::slider_type::SLIDER_INT) },
+ { "color", uint64_t(bgfx_slider::slider_type::SLIDER_COLOR) },
+ { "vec2", uint64_t(bgfx_slider::slider_type::SLIDER_VEC2) }
};
-bgfx_slider* slider_reader::read_from_value(const Value& value)
+const slider_reader::string_to_enum slider_reader::SCREEN_NAMES[slider_reader::SCREEN_COUNT] = {
+ { "none", uint64_t(bgfx_slider::screen_type::SLIDER_SCREEN_TYPE_NONE) },
+ { "raster", uint64_t(bgfx_slider::screen_type::SLIDER_SCREEN_TYPE_RASTER) },
+ { "vector", uint64_t(bgfx_slider::screen_type::SLIDER_SCREEN_TYPE_VECTOR) },
+ { "crt", uint64_t(bgfx_slider::screen_type::SLIDER_SCREEN_TYPE_VECTOR_OR_RASTER) },
+ { "vector_raster", uint64_t(bgfx_slider::screen_type::SLIDER_SCREEN_TYPE_VECTOR_OR_RASTER) },
+ { "lcd", uint64_t(bgfx_slider::screen_type::SLIDER_SCREEN_TYPE_LCD) },
+ { "non_vector", uint64_t(bgfx_slider::screen_type::SLIDER_SCREEN_TYPE_LCD_OR_RASTER) },
+ { "lcd_raster", uint64_t(bgfx_slider::screen_type::SLIDER_SCREEN_TYPE_LCD_OR_RASTER) },
+ { "lcd_vector", uint64_t(bgfx_slider::screen_type::SLIDER_SCREEN_TYPE_LCD_OR_VECTOR) },
+ { "any", uint64_t(bgfx_slider::screen_type::SLIDER_SCREEN_TYPE_ANY) },
+ { "all", uint64_t(bgfx_slider::screen_type::SLIDER_SCREEN_TYPE_ANY) }
+};
+
+std::vector<bgfx_slider*> slider_reader::read_from_value(const Value& value, running_machine& machine)
{
validate_parameters(value);
- bgfx_slider::slider_type type = bgfx_slider::slider_type(get_enum_from_value(value, "type", uint64_t(bgfx_slider::slider_type::SLIDER_FLOAT), TYPE_NAMES, TYPE_COUNT));
std::string name = value["name"].GetString();
+ int step = value["step"].GetInt();
+ bgfx_slider::slider_type type = bgfx_slider::slider_type(get_enum_from_value(value, "type", uint64_t(bgfx_slider::slider_type::SLIDER_FLOAT), TYPE_NAMES, TYPE_COUNT));
+ bgfx_slider::screen_type screen_type = bgfx_slider::screen_type(get_enum_from_value(value, "screen", uint64_t(bgfx_slider::screen_type::SLIDER_SCREEN_TYPE_ANY), SCREEN_NAMES, SCREEN_COUNT));
+ float scale = value["scale"].GetFloat();
+ std::string format = value["format"].GetString();
std::string description = value["text"].GetString();
- float defaults[4];
- float min[4];
- float max[4];
- get_values(value, "default", defaults);
- get_values(value, "min", min);
- get_values(value, "max", max);
+ std::vector<std::string> strings;
+ if (value.HasMember("strings"))
+ {
+ const Value& string_array = value["strings"];
+ for (UINT32 i = 0; i < string_array.Size(); i++)
+ {
+ strings.push_back(std::string(string_array[i].GetString()));
+ }
+ }
- return new bgfx_slider(type, name, description, defaults, min, max);
+ int slider_count;
+ std::vector<bgfx_slider*> sliders;
+ switch (type)
+ {
+ case bgfx_slider::slider_type::SLIDER_FLOAT:
+ case bgfx_slider::slider_type::SLIDER_INT:
+ case bgfx_slider::slider_type::SLIDER_INT_ENUM:
+ slider_count = 1;
+ break;
+ case bgfx_slider::slider_type::SLIDER_VEC2:
+ slider_count = 2;
+ break;
+ case bgfx_slider::slider_type::SLIDER_COLOR:
+ slider_count = 3;
+ break;
+ default:
+ slider_count = 0;
+ break;
+ }
+
+ if (slider_count > 1)
+ {
+ int min[3];
+ int defaults[3];
+ int max[3];
+ get_values(value, "min", min, slider_count);
+ get_values(value, "default", defaults, slider_count);
+ get_values(value, "max", max, slider_count);
+ for (int index = 0; index < slider_count; index++)
+ {
+ std::string desc;
+ char full_name[1024]; // arbitrary
+ snprintf(full_name, 1024, "%s%d", name.c_str(), index);
+ switch (index)
+ {
+ case 0:
+ desc = description + (type == bgfx_slider::slider_type::SLIDER_VEC2 ? "X" : "Red");
+ break;
+ case 1:
+ desc = description + (type == bgfx_slider::slider_type::SLIDER_VEC2 ? "Y" : "Green");
+ break;
+ case 2:
+ desc = description + (type == bgfx_slider::slider_type::SLIDER_VEC2 ? "Invalid" : "Blue");
+ break;
+ default:
+ desc = description + "Invalid";
+ break;
+ }
+ sliders.push_back(new bgfx_slider(machine, full_name, min[index], defaults[index], max[index], step, type, screen_type, scale, format, desc, strings));
+ }
+ }
+ else
+ {
+ int min = get_int(value, "min", 0);
+ int def = get_int(value, "default", 0);
+ int max = get_int(value, "max", 100);
+ sliders.push_back(new bgfx_slider(machine, name + "0", min, def, max, step, type, screen_type, scale, format, description, strings));
+ }
+ return sliders;
}
-void slider_reader::get_values(const Value& value, std::string name, float* values)
+void slider_reader::get_values(const Value& value, std::string name, int* values, const int count)
{
const char* name_str = name.c_str();
- if (value.HasMember(name_str))
+ assert(value.HasMember(name_str));
+ assert(value[name_str].IsArray());
+
+ const Value& value_array = value[name_str];
+ for (UINT32 i = 0; i < value_array.Size() && i < count; i++)
{
- if (value[name_str].IsBool())
- {
- values[0] = value[name_str].GetBool() ? 1.0f : 0.0f;
- }
- else if (value[name_str].IsDouble())
- {
- values[0] = float(value[name_str].GetDouble());
- }
- else
- {
- const Value& value_array = value[name_str];
- for (UINT32 i = 0; i < value_array.Size() && i < 4; i++)
- {
- values[i] = float(value_array[i].GetDouble());
- }
- }
+ values[i] = value_array[i].GetInt();
}
}
void slider_reader::validate_parameters(const Value& value)
{
- assert(value.HasMember("type"));
- assert(value["type"].IsString());
assert(value.HasMember("name"));
assert(value["name"].IsString());
+ assert(value.HasMember("min"));
+ assert(value.HasMember("default"));
+ assert(value.HasMember("max"));
+ assert(value.HasMember("step"));
+ assert(value["step"].IsInt());
+ assert(value.HasMember("type"));
+ assert(value["type"].IsString());
+ assert(value.HasMember("screen"));
+ assert(value["screen"].IsString());
+ assert(value.HasMember("scale"));
+ assert(value["scale"].IsFloat());
+ assert(value.HasMember("format"));
+ assert(value["format"].IsString());
assert(value.HasMember("text"));
assert(value["text"].IsString());
- assert(value.HasMember("default"));
}