summaryrefslogtreecommitdiffstats
path: root/src/frontend/mame/luaengine_render.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/frontend/mame/luaengine_render.cpp')
-rw-r--r--src/frontend/mame/luaengine_render.cpp65
1 files changed, 65 insertions, 0 deletions
diff --git a/src/frontend/mame/luaengine_render.cpp b/src/frontend/mame/luaengine_render.cpp
index 2cf8cc6878d..ea40a34c02a 100644
--- a/src/frontend/mame/luaengine_render.cpp
+++ b/src/frontend/mame/luaengine_render.cpp
@@ -11,6 +11,9 @@
#include "emu.h"
#include "luaengine.ipp"
+#include "mame.h"
+#include "ui/ui.h"
+
#include "render.h"
#include "rendlay.h"
@@ -351,6 +354,68 @@ void lua_engine::initialize_render(sol::table &emu)
auto render_container_type = sol().registry().new_usertype<render_container>("render_container", sol::no_constructor);
+ render_container_type["draw_box"] =
+ [] (render_container &ctnr, float x1, float y1, float x2, float y2, std::optional<uint32_t> fgcolor, std::optional<uint32_t> bgcolor)
+ {
+ x1 = std::clamp(x1, 0.0f, 1.0f);
+ y1 = std::clamp(y1, 0.0f, 1.0f);
+ x2 = std::clamp(x2, 0.0f, 1.0f);
+ y2 = std::clamp(y2, 0.0f, 1.0f);
+ mame_ui_manager &ui(mame_machine_manager::instance()->ui());
+ if (!fgcolor)
+ fgcolor = ui.colors().text_color();
+ if (!bgcolor)
+ bgcolor = ui.colors().background_color();
+ ui.draw_outlined_box(ctnr, x1, y1, x2, y2, *fgcolor, *bgcolor);
+ };
+ render_container_type["draw_line"] =
+ [] (render_container &ctnr, float x1, float y1, float x2, float y2, std::optional<uint32_t> color)
+ {
+ x1 = std::clamp(x1, 0.0f, 1.0f);
+ y1 = std::clamp(y1, 0.0f, 1.0f);
+ x2 = std::clamp(x2, 0.0f, 1.0f);
+ y2 = std::clamp(y2, 0.0f, 1.0f);
+ if (!color)
+ color = mame_machine_manager::instance()->ui().colors().text_color();
+ ctnr.add_line(x1, y1, x2, y2, UI_LINE_WIDTH, rgb_t(*color), PRIMFLAG_BLENDMODE(BLENDMODE_ALPHA));
+ };
+ render_container_type["draw_text"] =
+ [this] (render_container &ctnr, sol::object xobj, float y, char const *msg, std::optional<uint32_t> fgcolor, std::optional<uint32_t> bgcolor)
+ {
+ auto justify = ui::text_layout::text_justify::LEFT;
+ float x = 0;
+ if (xobj.is<float>())
+ {
+ x = std::clamp(xobj.as<float>(), 0.0f, 1.0f);
+ }
+ else if (xobj.is<char const *>())
+ {
+ char const *const justifystr(xobj.as<char const *>());
+ if (!strcmp(justifystr, "left"))
+ justify = ui::text_layout::text_justify::LEFT;
+ else if (!strcmp(justifystr, "right"))
+ justify = ui::text_layout::text_justify::RIGHT;
+ else if (!strcmp(justifystr, "center"))
+ justify = ui::text_layout::text_justify::CENTER;
+ }
+ else
+ {
+ luaL_error(m_lua_state, "Error in param 1 to draw_text");
+ return;
+ }
+ y = std::clamp(y, 0.0f, 1.0f);
+ mame_ui_manager &ui(mame_machine_manager::instance()->ui());
+ if (!fgcolor)
+ fgcolor = ui.colors().text_color();
+ if (!bgcolor)
+ bgcolor = 0;
+ ui.draw_text_full(
+ ctnr,
+ msg,
+ x, y, (1.0f - x),
+ justify, ui::text_layout::word_wrapping::WORD,
+ mame_ui_manager::OPAQUE_, *fgcolor, *bgcolor);
+ };
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,