X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=nageru%2Ftheme.cpp;h=6a4de4baa248ece934994332de8d559b29736010;hb=b7398dd7960ddf07f03b9a9ebc669d29141c09d0;hp=8050003b2025459651d20a99dea5f4d120347da3;hpb=2ba69dc78d091ad92427389147365f39760e0b1f;p=nageru diff --git a/nageru/theme.cpp b/nageru/theme.cpp index 8050003..6a4de4b 100644 --- a/nageru/theme.cpp +++ b/nageru/theme.cpp @@ -1223,6 +1223,17 @@ int call_num_channels(lua_State *L) } // namespace +int Nageru_set_channel_name(lua_State *L) +{ + // NOTE: m is already locked. + Theme *theme = get_theme_updata(L); + unsigned channel = luaL_checknumber(L, 1); + const string text = checkstdstring(L, 2); + theme->channel_names[channel] = text; + lua_pop(L, 2); + return 0; +} + Theme::Theme(const string &filename, const vector &search_dirs, ResourcePool *resource_pool, unsigned num_cards) : resource_pool(resource_pool), num_cards(num_cards), signal_to_card_mapping(global_flags.default_stream_mapping) { @@ -1293,7 +1304,7 @@ Theme::Theme(const string &filename, const vector &search_dirs, Resource } // Set up the API we provide. - register_constants(); + register_globals(); register_class("Scene", Scene_funcs); register_class("Block", Block_funcs); register_class("EffectBlueprint", EffectBlueprint_funcs); @@ -1334,7 +1345,7 @@ Theme::~Theme() lua_close(L); } -void Theme::register_constants() +void Theme::register_globals() { // Set Nageru.VIDEO_FORMAT_BGRA = bmusb::PixelFormat_8BitBGRA, etc. const vector> num_constants = { @@ -1358,6 +1369,13 @@ void Theme::register_constants() lua_settable(L, 1); // t[key] = value } + const luaL_Reg Nageru_funcs[] = { + { "set_channel_name", Nageru_set_channel_name }, + { NULL, NULL } + }; + lua_pushlightuserdata(L, this); + luaL_setfuncs(L, Nageru_funcs, 1); // for (name,f in funcs) { mt[name] = f, with upvalue {theme} } + lua_setglobal(L, "Nageru"); // Nageru = t assert(lua_gettop(L) == 0); } @@ -1484,7 +1502,17 @@ Theme::Chain Theme::get_chain(unsigned num, float t, unsigned width, unsigned he string Theme::get_channel_name(unsigned channel) { lock_guard lock(m); + lua_getglobal(L, "channel_name"); + if (lua_isnil(L, -1)) { + lua_pop(L, 1); + if (channel_names.count(channel)) { + return channel_names[channel]; + } else { + return "(no title)"; + } + } + lua_pushnumber(L, channel); if (lua_pcall(L, 1, 1, 0) != 0) { fprintf(stderr, "error running function `channel_name': %s\n", lua_tostring(L, -1));