summaryrefslogtreecommitdiffstats
path: root/src/frontend/mame/luaengine_render.cpp
diff options
context:
space:
mode:
author Vas Crabb <vas@vastheman.com>2020-11-16 23:11:43 +1100
committer Vas Crabb <vas@vastheman.com>2020-11-16 23:11:43 +1100
commitb524aa701af544f4b673bb810a67719230a6858a (patch)
tree816c2931a9d5e7e983fbc600cf2ef7ff86ccf53c /src/frontend/mame/luaengine_render.cpp
parent7e7b5f488eac3592c982e9d7d1266157e98a0519 (diff)
frontend: split lua_engine user type registrations across a few files to make it a bit more manageable
Diffstat (limited to 'src/frontend/mame/luaengine_render.cpp')
-rw-r--r--src/frontend/mame/luaengine_render.cpp108
1 files changed, 108 insertions, 0 deletions
diff --git a/src/frontend/mame/luaengine_render.cpp b/src/frontend/mame/luaengine_render.cpp
new file mode 100644
index 00000000000..01fdbe9add9
--- /dev/null
+++ b/src/frontend/mame/luaengine_render.cpp
@@ -0,0 +1,108 @@
+// license:BSD-3-Clause
+// copyright-holders:Miodrag Milanovic,Luca Bruno
+/***************************************************************************
+
+ luaengine_input.cpp
+
+ Controls execution of the core MAME system.
+
+***************************************************************************/
+
+#include "emu.h"
+#include "luaengine.ipp"
+
+#include "render.h"
+
+
+//-------------------------------------------------
+// initialize_render - register render user types
+//-------------------------------------------------
+
+void lua_engine::initialize_render()
+{
+
+/* render_target library
+ *
+ * manager:machine():render().targets[target_index]
+ * manager:machine():render():ui_target()
+ *
+ * target:view_bounds() - get x0, x1, y0, y1 bounds 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", "new", sol::no_constructor);
+ target_type.set("view_bounds", [](render_target &rt) {
+ const render_bounds b = rt.current_view().bounds();
+ return std::tuple<float, float, float, float>(b.x0, b.x1, b.y0, b.y1);
+ });
+ target_type.set("width", &render_target::width);
+ target_type.set("height", &render_target::height);
+ target_type.set("pixel_aspect", &render_target::pixel_aspect);
+ target_type.set("hidden", &render_target::hidden);
+ target_type.set("is_ui_target", &render_target::is_ui_target);
+ target_type.set("index", &render_target::index);
+ target_type.set("view_name", &render_target::view_name);
+ target_type.set("max_update_rate", sol::property(&render_target::max_update_rate, &render_target::set_max_update_rate));
+ target_type.set("view", sol::property(&render_target::view, &render_target::set_view));
+ target_type.set("orientation", sol::property(&render_target::orientation, &render_target::set_orientation));
+ target_type.set("screen_overlay", sol::property(&render_target::screen_overlay_enabled, &render_target::set_screen_overlay_enabled));
+ target_type.set("zoom", 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", "new", sol::no_constructor);
+ render_container_type.set("orientation", &render_container::orientation);
+ render_container_type.set("xscale", &render_container::xscale);
+ render_container_type.set("yscale", &render_container::yscale);
+ render_container_type.set("xoffset", &render_container::xoffset);
+ render_container_type.set("yoffset", &render_container::yoffset);
+ render_container_type.set("is_empty", &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 render_type = sol().registry().new_usertype<render_manager>("render", "new", sol::no_constructor);
+ render_type.set("max_update_rate", &render_manager::max_update_rate);
+ render_type.set("ui_target", &render_manager::ui_target);
+ render_type.set("ui_container", &render_manager::ui_container);
+ render_type.set("targets", sol::property([this](render_manager &r) {
+ sol::table target_table = sol().create_table();
+ int tc = 0;
+ for(render_target &curr_rt : r.targets())
+ target_table[tc++] = &curr_rt;
+ return target_table;
+ }));
+
+}