summaryrefslogtreecommitdiffstatshomepage
path: root/src/frontend/mame
diff options
context:
space:
mode:
author Vas Crabb <vas@vastheman.com>2020-12-13 09:54:03 +1100
committer Vas Crabb <vas@vastheman.com>2020-12-13 09:54:03 +1100
commit4d7ef2749083e5e3aaf41e5b2c6b03a93c237c47 (patch)
tree47076411b64212db0145e73f953325affa9d49dc /src/frontend/mame
parentbc951bcfa9c9b4a54e40dc3ab5559531f820fafc (diff)
-luaengine.cpp: Clean up render classes and expose screen image adjustments.
* Started moving Lua class reference to docs. Expecting people to find the class reference material in the source isn’t going to help make it approachable. The docs allow longer explanations, better formatting, and cross reference links. * Added another layout scripting example to the docs. -goldnpkr.cpp: Minor clean-up. * Improved the short names for Witch Card and Witch Game clone sets. * Made Witch Up & Down artwork clickable. * Added working Video Klein sets where the parent is a working Video Klein set to the tiny subtarget. * Removed history from the header comment - we have version control for a readon.
Diffstat (limited to 'src/frontend/mame')
-rw-r--r--src/frontend/mame/luaengine.cpp16
-rw-r--r--src/frontend/mame/luaengine.h3
-rw-r--r--src/frontend/mame/luaengine.ipp53
-rw-r--r--src/frontend/mame/luaengine_input.cpp23
-rw-r--r--src/frontend/mame/luaengine_render.cpp306
-rw-r--r--src/frontend/mame/ui/ui.cpp21
-rw-r--r--src/frontend/mame/ui/videoopt.cpp3
7 files changed, 227 insertions, 198 deletions
diff --git a/src/frontend/mame/luaengine.cpp b/src/frontend/mame/luaengine.cpp
index 488bd2bc571..45e6367bdfc 100644
--- a/src/frontend/mame/luaengine.cpp
+++ b/src/frontend/mame/luaengine.cpp
@@ -79,7 +79,7 @@ int sol_lua_push(sol::types<buffer *>, lua_State *L, buffer *value)
}
template <typename T>
-struct usertype_container<lua_engine::devenum<T> > : lua_engine::immutable_container_helper<lua_engine::devenum<T>, T>
+struct usertype_container<lua_engine::devenum<T> > : lua_engine::immutable_collection_helper<lua_engine::devenum<T>, T>
{
private:
using enumerator = lua_engine::devenum<T>;
@@ -182,7 +182,7 @@ public:
template <typename T>
-struct usertype_container<lua_engine::object_ptr_vector_wrapper<T> > : lua_engine::immutable_container_helper<lua_engine::object_ptr_vector_wrapper<T>, std::vector<std::unique_ptr<T>> const, typename std::vector<std::unique_ptr<T>>::const_iterator>
+struct usertype_container<lua_engine::object_ptr_vector_wrapper<T> > : lua_engine::immutable_collection_helper<lua_engine::object_ptr_vector_wrapper<T>, std::vector<std::unique_ptr<T>> const, typename std::vector<std::unique_ptr<T>>::const_iterator>
{
private:
static int next_pairs(lua_State *L)
@@ -1173,6 +1173,7 @@ void lua_engine::initialize()
* machine:popmessage(str) - print str as popup
* machine:popmessage() - clear displayed popup message
* machine:logerror(str) - print str to log
+ *
* machine:system() - get game_driver for running driver
* machine:video() - get video_manager
* machine:sound() - get sound_manager
@@ -1196,7 +1197,7 @@ void lua_engine::initialize()
* machine.images[] - get available image devices table (k=type, v=device_image_interface)
*/
- auto machine_type = sol().registry().new_usertype<running_machine>("machine", "new", sol::no_constructor);
+ auto machine_type = sol().registry().new_usertype<running_machine>("machine", sol::no_constructor);
machine_type["exit"] = &running_machine::schedule_exit;
machine_type["hard_reset"] = &running_machine::schedule_hard_reset;
machine_type["soft_reset"] = &running_machine::schedule_soft_reset;
@@ -1231,6 +1232,9 @@ void lua_engine::initialize()
return false;
}
};
+ machine_type["popmessage"] = sol::overload(
+ [](running_machine &m, const char *str) { m.popmessage("%s", str); },
+ [](running_machine &m) { m.popmessage(); });
machine_type["system"] = &running_machine::system;
machine_type["video"] = &running_machine::video;
machine_type["sound"] = &running_machine::sound;
@@ -1245,7 +1249,7 @@ void lua_engine::initialize()
machine_type["debugger"] =
[this] (running_machine &m) -> sol::object
{
- if(!(m.debug_flags & DEBUG_FLAG_ENABLED))
+ if (!(m.debug_flags & DEBUG_FLAG_ENABLED))
return sol::make_object(sol(), sol::lua_nil);
return sol::make_object(sol(), &m.debugger());
};
@@ -1258,9 +1262,6 @@ void lua_engine::initialize()
machine_type["cassettes"] = sol::property([] (running_machine &m) { return devenum<cassette_device_enumerator>(m.root_device()); });
machine_type["images"] = sol::property([] (running_machine &m) { return devenum<image_interface_enumerator>(m.root_device()); });
machine_type["slots"] = sol::property([](running_machine &m) { return devenum<slot_interface_enumerator>(m.root_device()); });
- machine_type["popmessage"] = sol::overload(
- [](running_machine &m, const char *str) { m.popmessage("%s", str); },
- [](running_machine &m) { m.popmessage(); });
machine_type["logerror"] = [] (running_machine &m, const char *str) { m.logerror("[luaengine] %s\n", str); };
@@ -1608,6 +1609,7 @@ void lua_engine::initialize()
"screen_dev",
sol::no_constructor,
sol::base_classes, sol::bases<device_t>());
+ screen_dev_type.set("container", sol::property(&screen_device::container));
screen_dev_type.set("draw_box", [](screen_device &sdev, float x1, float y1, float x2, float y2, uint32_t bgcolor, uint32_t fgcolor) {
int sc_width = sdev.visible_area().width();
int sc_height = sdev.visible_area().height();
diff --git a/src/frontend/mame/luaengine.h b/src/frontend/mame/luaengine.h
index 1157d2083c2..b0bbf2210c3 100644
--- a/src/frontend/mame/luaengine.h
+++ b/src/frontend/mame/luaengine.h
@@ -37,7 +37,8 @@ public:
template <typename T> struct object_ptr_vector_wrapper;
template <typename T> struct tag_object_ptr_map;
template <typename T> using standard_tag_object_ptr_map = tag_object_ptr_map<std::unordered_map<std::string, std::unique_ptr<T> > >;
- template <typename T, typename C, typename I = typename C::iterator> struct immutable_container_helper;
+ template <typename T> struct immutable_container_helper;
+ template <typename T, typename C, typename I = typename C::iterator> struct immutable_collection_helper;
// construction/destruction
lua_engine();
diff --git a/src/frontend/mame/luaengine.ipp b/src/frontend/mame/luaengine.ipp
index ee4eb5d0030..3c878b68c2a 100644
--- a/src/frontend/mame/luaengine.ipp
+++ b/src/frontend/mame/luaengine.ipp
@@ -96,7 +96,7 @@ template <typename T> struct usertype_container<lua_engine::devenum<T> >;
template <typename T>
-struct usertype_container<lua_engine::simple_list_wrapper<T> > : lua_engine::immutable_container_helper<lua_engine::simple_list_wrapper<T>, simple_list<T> const, typename simple_list<T>::auto_iterator>
+struct usertype_container<lua_engine::simple_list_wrapper<T> > : lua_engine::immutable_collection_helper<lua_engine::simple_list_wrapper<T>, simple_list<T> const, typename simple_list<T>::auto_iterator>
{
private:
static int next_pairs(lua_State *L)
@@ -163,7 +163,7 @@ public:
template <typename T>
-struct usertype_container<lua_engine::tag_object_ptr_map<T> > : lua_engine::immutable_container_helper<lua_engine::tag_object_ptr_map<T>, T const, typename T::const_iterator>
+struct usertype_container<lua_engine::tag_object_ptr_map<T> > : lua_engine::immutable_collection_helper<lua_engine::tag_object_ptr_map<T>, T const, typename T::const_iterator>
{
private:
template <bool Indexed>
@@ -269,12 +269,10 @@ bool sol_lua_check(sol::types<osd_file::error>, lua_State *L, int index, Handler
int sol_lua_push(sol::types<map_handler_type>, lua_State *L, map_handler_type &&value);
-template <typename T, typename C, typename I>
+template <typename T>
struct lua_engine::immutable_container_helper
{
protected:
- using iterator = I;
-
static T &get_self(lua_State *L)
{
auto p(sol::stack::unqualified_check_get<T *>(L, 1));
@@ -285,22 +283,6 @@ protected:
return **p;
}
- struct indexed_iterator
- {
- indexed_iterator(C &s, iterator i) : src(s), it(i), ix(0U) { }
-
- C &src;
- iterator it;
- std::size_t ix;
-
- indexed_iterator &operator++()
- {
- ++it;
- ++ix;
- return *this;
- }
- };
-
public:
static int set(lua_State *L)
{
@@ -327,6 +309,11 @@ public:
return luaL_error(L, "sol: cannot call 'find' on type '%s': no supported comparison operator for the value type", sol::detail::demangle<T>().c_str());
}
+ static int index_of(lua_State *L)
+ {
+ return luaL_error(L, "sol: cannot call 'index_of' on type '%s': no supported comparison operator for the value type", sol::detail::demangle<T>().c_str());
+ }
+
static int clear(lua_State *L)
{
return luaL_error(L, "sol: cannot call 'clear' on type '%s': container is not modifiable", sol::detail::demangle<T>().c_str());
@@ -339,6 +326,30 @@ public:
};
+template <typename T, typename C, typename I>
+struct lua_engine::immutable_collection_helper : immutable_container_helper<T>
+{
+protected:
+ using iterator = I;
+
+ struct indexed_iterator
+ {
+ indexed_iterator(C &s, iterator i) : src(s), it(i), ix(0U) { }
+
+ C &src;
+ iterator it;
+ std::size_t ix;
+
+ indexed_iterator &operator++()
+ {
+ ++it;
+ ++ix;
+ return *this;
+ }
+ };
+};
+
+
struct lua_engine::addr_space
{
addr_space(address_space &s, device_memory_interface &d) : space(s), dev(d) { }
diff --git a/src/frontend/mame/luaengine_input.cpp b/src/frontend/mame/luaengine_input.cpp
index 30a4d34c181..77e002ce848 100644
--- a/src/frontend/mame/luaengine_input.cpp
+++ b/src/frontend/mame/luaengine_input.cpp
@@ -48,19 +48,9 @@ template <> struct is_container<natkbd_kbd_list> : std::true_type { };
template <>
-struct usertype_container<natkbd_kbd_list>
+struct usertype_container<natkbd_kbd_list> : lua_engine::immutable_container_helper<natkbd_kbd_list>
{
private:
- static natkbd_kbd_list &get_self(lua_State *L)
- {
- auto p(sol::stack::unqualified_check_get<natkbd_kbd_list *>(L, 1));
- if (!p)
- luaL_error(L, "sol: 'self' is not of type 'natkbd_kbd_list' (pass 'self' as first argument with ':' or call on proper type)");
- if (!*p)
- luaL_error(L, "sol: 'self' argument is nil (pass 'self' as first argument with ':' or call on a 'natkbd_kbd_list' type");
- return **p;
- }
-
template <bool Indexed>
static int next_pairs(lua_State *L)
{
@@ -127,17 +117,6 @@ public:
return stack::push(L, !self.manager.keyboard_count());
}
- // produce errors for unsupported operations
- static int set(lua_State *L) { return luaL_error(L, "sol: cannot call 'set(key, value)' on type 'natkbd_kbd_list': container is not modifiable"); }
- static int index_set(lua_State *L) { return luaL_error(L, "sol: cannot call 'container[key] = value' on type 'natkbd_kbd_list': container is not modifiable"); }
- static int add(lua_State *L) { return luaL_error(L, "sol: cannot call 'add' on type 'natkbd_kbd_list': container is not modifiable"); }
- static int insert(lua_State *L) { return luaL_error(L, "sol: cannot call 'insert' on type 'natkbd_kbd_list': container is not modifiable"); }
- static int find(lua_State *L) { return luaL_error(L, "sol: cannot call 'find' on type 'natkbd_kbd_list': no supported comparison operator for the value type"); }
- static int index_of(lua_State *L) { return luaL_error(L, "sol: cannot call 'index_of' on type 'natkbd_kbd_list': no supported comparison operator for the value type"); }
- static int clear(lua_State *L) { return luaL_error(L, "sol: cannot call 'clear' on type 'natkbd_kbd_list': container is not modifiable"); }
- static int erase(lua_State *L) { return luaL_error(L, "sol: cannot call 'erase' on type 'natkbd_kbd_list': container is not modifiable"); }
-
- // support for iteration with pairs and ipairs
static int next(lua_State *L) { return stack::push(L, next_pairs<false>); }
static int pairs(lua_State *L) { return start_pairs<false>(L); }
static int ipairs(lua_State *L) { return start_pairs<true>(L); }
diff --git a/src/frontend/mame/luaengine_render.cpp b/src/frontend/mame/luaengine_render.cpp
index 9fff8f4171b..ca472dba675 100644
--- a/src/frontend/mame/luaengine_render.cpp
+++ b/src/frontend/mame/luaengine_render.cpp
@@ -33,6 +33,15 @@ struct layout_view_items
layout_view &view;
};
+
+struct render_target_view_names
+{
+ render_target_view_names(render_target &t) : target(t), count(-1) { }
+
+ render_target &target;
+ int count;
+};
+
} // anonymous namespace
@@ -40,10 +49,11 @@ namespace sol {
template <> struct is_container<layout_file_views> : std::true_type { };
template <> struct is_container<layout_view_items> : std::true_type { };
+template <> struct is_container<render_target_view_names> : std::true_type { };
template <>
-struct usertype_container<layout_file_views> : lua_engine::immutable_container_helper<layout_file_views, layout_file::view_list>
+struct usertype_container<layout_file_views> : lua_engine::immutable_collection_helper<layout_file_views, layout_file::view_list>
{
private:
using view_list = layout_file::view_list;
@@ -140,7 +150,7 @@ public:
template <>
-struct usertype_container<layout_view_items> : lua_engine::immutable_container_helper<layout_view_items, layout_view::item_list>
+struct usertype_container<layout_view_items> : lua_engine::immutable_collection_helper<layout_view_items, layout_view::item_list>
{
private:
using item_list = layout_view::item_list;
@@ -231,6 +241,102 @@ public:
}
};
+
+template <>
+struct usertype_container<render_target_view_names> : lua_engine::immutable_container_helper<render_target_view_names>
+{
+private:
+ struct iterator
+ {
+ iterator(render_target &t, unsigned i) : target(t), index(i) { }
+
+ render_target &target;
+ unsigned index;
+ };
+
+ static int next_pairs(lua_State *L)
+ {
+ iterator &i(stack::unqualified_get<user<iterator> >(L, 1));
+ char const *name(i.target.view_name(i.index));
+ if (!name)
+ return stack::push(L, lua_nil);
+ int result = stack::push(L, i.index + 1);
+ result += stack::push(L, name);
+ ++i.index;
+ return result;
+ }
+
+public:
+ static int at(lua_State *L)
+ {
+ render_target_view_names &self(get_self(L));
+ unsigned const index(stack::unqualified_get<unsigned>(L, 2));
+ return stack::push(L, self.target.view_name(index - 1));
+ }
+
+ static int get(lua_State *L)
+ {
+ return at(L);
+ }
+
+ static int index_get(lua_State *L)
+ {
+ return at(L);
+ }
+
+ static int find(lua_State *L)
+ {
+ render_target_view_names &self(get_self(L));
+ char const *const key(stack::unqualified_get<char const *>(L, 2));
+ for (unsigned i = 0; ; ++i)
+ {
+ char const *const name(self.target.view_name(i));
+ if (!name)
+ return stack::push(L, lua_nil);
+ else if (!std::strcmp(key, name))
+ return stack::push(L, i + 1);
+ }
+ }
+
+ static int index_of(lua_State *L)
+ {
+ return find(L);
+ }
+
+ static int size(lua_State *L)
+ {
+ render_target_view_names &self(get_self(L));
+ if (0 > self.count)
+ for (self.count = 0; self.target.view_name(self.count); ++self.count) { }
+ return stack::push(L, self.count);
+ }
+
+ static int empty(lua_State *L)
+ {
+ render_target_view_names &self(get_self(L));
+ return stack::push(L, !self.target.view_name(0));
+ }
+
+ static int next(lua_State *L)
+ {
+ return stack::push(L, next_pairs);
+ }
+
+ static int pairs(lua_State *L)
+ {
+ render_target_view_names &self(get_self(L));
+ stack::push(L, next_pairs);
+ stack::push<user<iterator> >(L, self.target, 0);
+ stack::push(L, lua_nil);
+ return 3;
+ }
+
+ static int ipairs(lua_State *L)
+ {
+ return pairs(L);
+ }
+};
+
} // namespace sol
@@ -241,20 +347,6 @@ public:
void lua_engine::initialize_render(sol::table &emu)
{
-/* render_bounds library
- *
- * bounds:includes(x, y) - returns true if point is within bounds
- * bounds:set_xy(left, top, right, bottom) - set bounds
- * bounds:set_wh(left, top, width, height) - set bounds
- *
- * bounds.x0 - leftmost X coordinate
- * bounds.y0 - topmost Y coordinate
- * bounds.x1 - rightmost X coordinate
- * bounds.y1 - bottommost Y coordinate
- * bounds.width - get/set width
- * bounds.height - get/set height
- * bounds.aspect - read-only aspect ratio width:height
- */
auto bounds_type = emu.new_usertype<render_bounds>(
"render_bounds",
sol::call_constructor, sol::initializers(
@@ -272,15 +364,6 @@ void lua_engine::initialize_render(sol::table &emu)
bounds_type["aspect"] = sol::property(&render_bounds::aspect);
-/* render_color library
- *
- * set(a, r, g, b) - set color
- *
- * color.a - alpha channel
- * color.r - red channel
- * color.g - green channel
- * color.b - blue channel
- */
auto color_type = emu.new_usertype<render_color>(
"render_color",
sol::call_constructor, sol::initializers(
@@ -293,24 +376,6 @@ void lua_engine::initialize_render(sol::table &emu)
color_type["b"] = &render_color::b;
-/* layout_view library
- *
- * manager:machine():render().targets[target_index]:current_view()
- *
- * view:has_screen(screen) - returns whether a given screen is present in the view (including hidden screens)
- * view:set_prepare_items_callback(cb) - set additional tasks before adding items to render target
- * view:set_preload_callback(cb) - set additional tasks after preloading visible items
- * view:set_recomputed_callback(cb) - set additional tasks after recomputing for resize or visibility change
- *
- * view.items - get the items in the view (including hidden items)
- * view.name - display name for the view
- * view.unqualified_name - name of the view as specified in the layout file
- * view.visible_screen_count - number of screens items currently enabled
- * view.effective_aspect - effective aspect ratio in current configuration
- * view.bounds - effective bounds in current configuration
- * view.has_art - true if the view has non-screen items
- */
-
auto layout_view_type = sol().registry().new_usertype<layout_view>("layout_view", sol::no_constructor);
layout_view_type["has_screen"] = &layout_view::has_screen;
layout_view_type["set_prepare_items_callback"] =
@@ -340,25 +405,6 @@ void lua_engine::initialize_render(sol::table &emu)
layout_view_type["has_art"] = sol::property(&layout_view::has_art);
-/* layout_view::item library
- *
- * item:set_state(state) - set state value used in absence of bindings
- * item.set_element_state_callback(cb) - set callback to obtain element state
- * item.set_animation_state_callback(cb) - set callback to obtain animation state
- * item.set_bounds_callback(cb) - set callback to obtain item bounds
- * item.set_color_callback(cb) - set callback to obtain item color
- *
- * item.id - get optional item identifier
- * item.bounds_animated - true if bounds depend on state
- * item.color_animated - true if color depends on state
- * item.bounds - get bounds for current state
- * item.color - get color for current state
- * item.blend_mode - get blend mode or -1
- * item.orientation - get item orientation
- * item.element_state - get effective element state
- * item.animation_state - get effective animation state
- */
-
auto layout_view_item_type = sol().registry().new_usertype<layout_view::item>("layout_item", sol::no_constructor);
layout_view_item_type["set_state"] = &layout_view::item::set_state;
layout_view_item_type["set_element_state_callback"] =
@@ -449,14 +495,6 @@ void lua_engine::initialize_render(sol::table &emu)
layout_view_item_type["animation_state"] = sol::property(&layout_view::item::animation_state);
-/* layout_file library
- *
- * file:set_resolve_tags_callback(cb) - set additional tasks after resolving tags
- *
- * file.device - get device that caused the file to be loaded
- * file.views[] - get view table (k=name, v=layout_view)
- */
-
auto layout_file_type = sol().registry().new_usertype<layout_file>("layout_file", sol::no_constructor);
layout_file_type["set_resolve_tags_callback"] =
make_simple_callback_setter<void>(
@@ -468,79 +506,85 @@ void lua_engine::initialize_render(sol::table &emu)
layout_file_type["views"] = sol::property([] (layout_file &f) { return layout_file_views(f); });
-/* render_target library
- *
- * manager:machine():render().targets[target_index]
- * manager:machine():render():ui_target()
- *
- * target:current_view() - get current view for target
- * target:width() - get target width
- * target:height() - get target height
- * target:pixel_aspect() - get target aspect
- * target:hidden() - is target hidden
- * target:is_ui_target() - is ui render target
- * target:index() - target index
- * target:view_name([opt] index) - current target layout view name
- *
- * target.max_update_rate -
- * target.view - current target layout view
- * target.orientation - current target orientation
- * target.screen_overlay - enable overlays
- * target.zoom - enable zoom
- */
-
auto target_type = sol().registry().new_usertype<render_target>("target", sol::no_constructor);
- target_type["current_view"] = &render_target::current_view;
- target_type["width"] = &render_target::width;
- target_type["height"] = &render_target::height;
- target_type["pixel_aspect"] = &render_target::pixel_aspect;
- target_type["hidden"] = &render_target::hidden;
- target_type["is_ui_target"] = &render_target::is_ui_target;
- target_type["index"] = &render_target::index;
- target_type["view_name"] = &render_target::view_name;
+ target_type["index"] = sol::property([] (render_target const &t) { return t.index() + 1; });
+ target_type["width"] = sol::property(&render_target::width);
+ target_type["height"] = sol::property(&render_target::height);
+ target_type["pixel_aspect"] = sol::property(&render_target::pixel_aspect);
+ target_type["hidden"] = sol::property(&render_target::hidden);
+ target_type["is_ui_target"] = sol::property(&render_target::is_ui_target);
target_type["max_update_rate"] = sol::property(&render_target::max_update_rate, &render_target::set_max_update_rate);
- target_type["view"] = sol::property(&render_target::view, &render_target::set_view);
target_type["orientation"] = sol::property(&render_target::orientation, &render_target::set_orientation);
+ target_type["view_names"] = sol::property([] (render_target &t) { return render_target_view_names(t); });
+ target_type["current_view"] = sol::property(&render_target::current_view);
+ target_type["view_index"] = sol::property(
+ [] (render_target const &t) { return t.view() + 1; },
+ [] (render_target &t, unsigned v) { t.set_view(v - 1); });
+ target_type["visibility_mask"] = sol::property(&render_target::visibility_mask);
target_type["screen_overlay"] = sol::property(&render_target::screen_overlay_enabled, &render_target::set_screen_overlay_enabled);
- target_type["zoom"] = sol::property(&render_target::zoom_to_screen, &render_target::set_zoom_to_screen);
-
+ target_type["zoom_to_screen"] = sol::property(&render_target::zoom_to_screen, &render_target::set_zoom_to_screen);
-/* render_container library
- *
- * manager:machine():render():ui_container()
- *
- * container.orientation
- * container.xscale
- * container.yscale
- * container.xoffset
- * container.yoffset
- * container.is_empty
- */
auto render_container_type = sol().registry().new_usertype<render_container>("render_container", sol::no_constructor);
- render_container_type["orientation"] = sol::property(&render_container::orientation);
- render_container_type["xscale"] = sol::property(&render_container::xscale);
- render_container_type["yscale"] = sol::property(&render_container::yscale);
- render_container_type["xoffset"] = sol::property(&render_container::xoffset);
- render_container_type["yoffset"] = sol::property(&render_container::yoffset);
+ render_container_type["user_settings"] = sol::property(&render_container::get_user_settings, &render_container::set_user_settings);
+ render_container_type["orientation"] = sol::property(
+ &render_container::orientation,
+ [] (render_container &c, int v)
+ {
+ render_container::user_settings s(c.get_user_settings());
+ s.m_orientation = v;
+ c.set_user_settings(s);
+ });
+ render_container_type["xscale"] = sol::property(
+ &render_container::xscale,
+ [] (render_container &c, float v)
+ {
+ render_container::user_settings s(c.get_user_settings());
+ s.m_xscale = v;
+ c.set_user_settings(s);
+ });
+ render_container_type["yscale"] = sol::property(
+ &render_container::yscale,
+ [] (render_container &c, float v)
+ {
+ render_container::user_settings s(c.get_user_settings());
+ s.m_yscale = v;
+ c.set_user_settings(s);
+ });
+ render_container_type["xoffset"] = sol::property(
+ &render_container::xoffset,
+ [] (render_container &c, float v)
+ {
+ render_container::user_settings s(c.get_user_settings());
+ s.m_xoffset = v;
+ c.set_user_settings(s);
+ });
+ render_container_type["yoffset"] = sol::property(
+ &render_container::yoffset,
+ [] (render_container &c, float v)
+ {
+ render_container::user_settings s(c.get_user_settings());
+ s.m_yoffset = v;
+ c.set_user_settings(s);
+ });
render_container_type["is_empty"] = sol::property(&render_container::is_empty);
-/* render_manager library
- *
- * manager:machine():render()
- *
- * render:max_update_rate() -
- * render:ui_target() - render_target for ui drawing
- * render:ui_container() - render_container for ui drawing
- *
- * render.targets[] - render_target table
- */
+ auto user_settings_type = sol().registry().new_usertype<render_container::user_settings>("render_container_settings", sol::no_constructor);
+ user_settings_type["orientation"] = &render_container::user_settings::m_orientation;
+ user_settings_type["brightness"] = &render_container::user_settings::m_brightness;
+ user_settings_type["contrast"] = &render_container::user_settings::m_contrast;
+ user_settings_type["gamma"] = &render_container::user_settings::m_gamma;
+ user_settings_type["xscale"] = &render_container::user_settings::m_xscale;
+ user_settings_type["yscale"] = &render_container::user_settings::m_yscale;
+ user_settings_type["xoffset"] = &render_container::user_settings::m_xoffset;
+ user_settings_type["yoffset"] = &render_container::user_settings::m_yoffset;
+
auto render_type = sol().registry().new_usertype<render_manager>("render", sol::no_constructor);
- render_type["max_update_rate"] = &render_manager::max_update_rate;
- render_type["ui_target"] = &render_manager::ui_target;
- render_type["ui_container"] = &render_manager::ui_container;
+ render_type["max_update_rate"] = sol::property(&render_manager::max_update_rate);
+ render_type["ui_target"] = sol::property(&render_manager::ui_target);
+ render_type["ui_container"] = sol::property(&render_manager::ui_container);
render_type["targets"] = sol::property([] (render_manager &m) { return simple_list_wrapper<render_target>(m.targets()); });
}
diff --git a/src/frontend/mame/ui/ui.cpp b/src/frontend/mame/ui/ui.cpp
index 1400cc19295..5918d0e13d6 100644
--- a/src/frontend/mame/ui/ui.cpp
+++ b/src/frontend/mame/ui/ui.cpp
@@ -1839,9 +1839,8 @@ int32_t mame_ui_manager::slider_refresh(running_machine &machine, void *arg, int
int32_t mame_ui_manager::slider_brightness(running_machine &machine, void *arg, int id, std::string *str, int32_t newval)
{
screen_device *screen = reinterpret_cast<screen_device *>(arg);
- render_container::user_settings settings;
- screen->container().get_user_settings(settings);
+ render_container::user_settings settings = screen->container().get_user_settings();
if (newval != SLIDER_NOCHANGE)
{
settings.m_brightness = (float)newval * 0.001f;
@@ -1861,9 +1860,8 @@ int32_t mame_ui_manager::slider_brightness(running_machine &machine, void *arg,
int32_t mame_ui_manager::slider_contrast(running_machine &machine, void *arg, int id, std::string *str, int32_t newval)
{
screen_device *screen = reinterpret_cast<screen_device *>(arg);
- render_container::user_settings settings;
- screen->container().get_user_settings(settings);
+ render_container::user_settings settings = screen->container().get_user_settings();
if (newval != SLIDER_NOCHANGE)
{
settings.m_contrast = (float)newval * 0.001f;
@@ -1882,9 +1880,8 @@ int32_t mame_ui_manager::slider_contrast(running_machine &machine, void *arg, in
int32_t mame_ui_manager::slider_gamma(running_machine &machine, void *arg, int id, std::string *str, int32_t newval)
{
screen_device *screen = reinterpret_cast<screen_device *>(arg);
- render_container::user_settings settings;
- screen->container().get_user_settings(settings);
+ render_container::user_settings settings = screen->container().get_user_settings();
if (newval != SLIDER_NOCHANGE)
{
settings.m_gamma = (float)newval * 0.001f;
@@ -1904,9 +1901,8 @@ int32_t mame_ui_manager::slider_gamma(running_machine &machine, void *arg, int i
int32_t mame_ui_manager::slider_xscale(running_machine &machine, void *arg, int id, std::string *str, int32_t newval)
{
screen_device *screen = reinterpret_cast<screen_device *>(arg);
- render_container::user_settings settings;
- screen->container().get_user_settings(settings);
+ render_container::user_settings settings = screen->container().get_user_settings();
if (newval != SLIDER_NOCHANGE)
{
settings.m_xscale = (float)newval * 0.001f;
@@ -1926,9 +1922,8 @@ int32_t mame_ui_manager::slider_xscale(running_machine &machine, void *arg, int
int32_t mame_ui_manager::slider_yscale(running_machine &machine, void *arg, int id, std::string *str, int32_t newval)
{
screen_device *screen = reinterpret_cast<screen_device *>(arg);
- render_container::user_settings settings;
- screen->container().get_user_settings(settings);
+ render_container::user_settings settings = screen->container().get_user_settings();
if (newval != SLIDER_NOCHANGE)
{
settings.m_yscale = (float)newval * 0.001f;
@@ -1948,9 +1943,8 @@ int32_t mame_ui_manager::slider_yscale(running_machine &machine, void *arg, int
int32_t mame_ui_manager::slider_xoffset(running_machine &machine, void *arg, int id, std::string *str, int32_t newval)
{
screen_device *screen = reinterpret_cast<screen_device *>(arg);
- render_container::user_settings settings;
- screen->container().get_user_settings(settings);
+ render_container::user_settings settings = screen->container().get_user_settings();
if (newval != SLIDER_NOCHANGE)
{
settings.m_xoffset = (float)newval * 0.001f;
@@ -1970,9 +1964,8 @@ int32_t mame_ui_manager::slider_xoffset(running_machine &machine, void *arg, int
int32_t mame_ui_manager::slider_yoffset(running_machine &machine, void *arg, int id, std::string *str, int32_t newval)
{
screen_device *screen = reinterpret_cast<screen_device *>(arg);
- render_container::user_settings settings;
- screen->container().get_user_settings(settings);
+ render_container::user_settings settings = screen->container().get_user_settings();
if (newval != SLIDER_NOCHANGE)
{
settings.m_yoffset = (float)newval * 0.001f;
diff --git a/src/frontend/mame/ui/videoopt.cpp b/src/frontend/mame/ui/videoopt.cpp
index da8a554d550..81b01365764 100644
--- a/src/frontend/mame/ui/videoopt.cpp
+++ b/src/frontend/mame/ui/videoopt.cpp
@@ -152,8 +152,7 @@ void menu_video_options::handle()
m_target.set_orientation(orientation_add(delta, m_target.orientation()));
if (m_target.is_ui_target())
{
- render_container::user_settings settings;
- container().get_user_settings(settings);
+ render_container::user_settings settings = container().get_user_settings();
settings.m_orientation = orientation_add(delta ^ ROT180, settings.m_orientation);
container().set_user_settings(settings);
}