1 #include "lua/internal.hpp"
2 #include "core/emustatus.hpp"
3 #include "core/instance.hpp"
4 #include "core/window.hpp"
5 #include "library/minmax.hpp"
9 template<uint32_t lua::render_context::*gap
, bool delta
>
10 int lua_gui_set_gap(lua::state
& L
, lua::parameters
& P
)
14 if(!core
.lua2
->render_ctx
)
19 if(core
.lua2
->render_ctx
->*gap
== std::numeric_limits
<uint32_t>::max())
20 core
.lua2
->render_ctx
->*gap
= 0; //Handle default gap of render queue.
21 if(delta
) g
+= core
.lua2
->render_ctx
->*gap
;
23 return 0; //Ignore ridiculous gap.
24 uint32_t old
= core
.lua2
->render_ctx
->*gap
;
25 core
.lua2
->render_ctx
->*gap
= g
;
30 int resolution(lua::state
& L
, lua::parameters
& P
)
33 if(!core
.lua2
->render_ctx
)
35 L
.pushnumber(core
.lua2
->render_ctx
->width
);
36 L
.pushnumber(core
.lua2
->render_ctx
->height
);
40 int repaint(lua::state
& L
, lua::parameters
& P
)
42 CORE().lua2
->requests_repaint
= true;
46 int subframe_update(lua::state
& L
, lua::parameters
& P
)
48 P(CORE().lua2
->requests_subframe_paint
);
52 int color(lua::state
& L
, lua::parameters
& P
)
57 framebuffer::color
c(P
.arg
<std::string
>());
58 L
.pushnumber(c
.asnumber());
62 P(r
, g
, b
, P
.optional(a
, 256));
65 L
.pushnumber(((256 - a
) << 24) | (r
<< 16) | (g
<< 8) | b
);
71 int status(lua::state
& L
, lua::parameters
& P
)
74 std::string name
, value
;
79 core
.lua2
->watch_vars
.erase(name
);
81 core
.lua2
->watch_vars
[name
] = utf8::to32(value
);
82 core
.supdater
->update();
86 int rainbow(lua::state
& L
, lua::parameters
& P
)
91 P(step
, steps
, P
.optional(c
, 0x00FF0000));
93 auto basecolor
= c
.asnumber();
95 throw std::runtime_error("Expected nonzero steps for gui.rainbow");
96 basecolor
= framebuffer::color_rotate_hue(basecolor
, step
, steps
);
97 L
.pushnumber(basecolor
);
101 int kill_frame(lua::state
& L
, lua::parameters
& P
)
104 if(core
.lua2
->kill_frame
)
105 *core
.lua2
->kill_frame
= true;
109 int set_video_scale(lua::state
& L
, lua::parameters
& P
)
112 if(core
.lua2
->hscl
&& core
.lua2
->vscl
) {
117 *core
.lua2
->hscl
= h
;
118 *core
.lua2
->vscl
= v
;
123 lua::functions
LUA_guicore_fns(lua_func_misc
, "gui", {
124 {"left_gap", lua_gui_set_gap
<&lua::render_context::left_gap
, false>},
125 {"right_gap", lua_gui_set_gap
<&lua::render_context::right_gap
, false>},
126 {"top_gap", lua_gui_set_gap
<&lua::render_context::top_gap
, false>},
127 {"bottom_gap", lua_gui_set_gap
<&lua::render_context::bottom_gap
, false>},
128 {"delta_left_gap", lua_gui_set_gap
<&lua::render_context::left_gap
, true>},
129 {"delta_right_gap", lua_gui_set_gap
<&lua::render_context::right_gap
, true>},
130 {"delta_top_gap", lua_gui_set_gap
<&lua::render_context::top_gap
, true>},
131 {"delta_bottom_gap", lua_gui_set_gap
<&lua::render_context::bottom_gap
, true>},
132 {"resolution", resolution
},
133 {"repaint", repaint
},
134 {"subframe_update", subframe_update
},
137 {"rainbow", rainbow
},
138 {"kill_frame", kill_frame
},
139 {"set_video_scale", set_video_scale
},