summaryrefslogtreecommitdiffstats
path: root/src/frontend/mame/luaengine_render.cpp
blob: 01fdbe9add992b1d17776ba4d71191aee49ebdab (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
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;
		}));

}