diff options
| author | jacqueline <me@jacqueline.id.au> | 2024-05-02 19:12:26 +1000 |
|---|---|---|
| committer | jacqueline <me@jacqueline.id.au> | 2024-05-02 19:12:26 +1000 |
| commit | 1573a8c4cde1cd9528b422b2dcc598e37ffe94a7 (patch) | |
| tree | d162822b8fd7054f81bace0c7a65ab4d5e6f93ef /src/lua/bridge.cpp | |
| parent | a231fd1c8afedbeb14b0bc77d76bad61db986059 (diff) | |
| download | tangara-fw-1573a8c4cde1cd9528b422b2dcc598e37ffe94a7.tar.gz | |
WIP merge cyclically dependent components into one big component
Diffstat (limited to 'src/lua/bridge.cpp')
| -rw-r--r-- | src/lua/bridge.cpp | 143 |
1 files changed, 0 insertions, 143 deletions
diff --git a/src/lua/bridge.cpp b/src/lua/bridge.cpp deleted file mode 100644 index cfa9d5f7..00000000 --- a/src/lua/bridge.cpp +++ /dev/null @@ -1,143 +0,0 @@ -/* - * Copyright 2023 jacqueline <me@jacqueline.id.au> - * - * SPDX-License-Identifier: GPL-3.0-only - */ - -#include "bridge.hpp" -#include <sys/_stdint.h> - -#include <memory> -#include <string> - -#include "database.hpp" -#include "esp_log.h" -#include "index.hpp" -#include "lauxlib.h" -#include "lua.h" -#include "lua.hpp" -#include "lua_controls.hpp" -#include "lua_database.hpp" -#include "lua_queue.hpp" -#include "lua_screen.hpp" -#include "lua_version.hpp" -#include "lua_theme.hpp" -#include "lvgl.h" - -#include "font/lv_font_loader.h" -#include "luavgl.h" - -#include "event_queue.hpp" -#include "property.hpp" -#include "service_locator.hpp" -#include "ui_events.hpp" - -extern "C" { -int luaopen_linenoise(lua_State* L); -int luaopen_term_core(lua_State* L); -} - -LV_FONT_DECLARE(font_fusion_12); -LV_FONT_DECLARE(font_fusion_10); - -namespace lua { - -[[maybe_unused]] static constexpr char kTag[] = "lua_bridge"; - -static constexpr char kBridgeKey[] = "bridge"; - -static auto make_font_cb(const char* name, int size, int weight) - -> const lv_font_t* { - if (std::string{"fusion"} == name) { - if (size == 12) { - return &font_fusion_12; - } - if (size == 10) { - return &font_fusion_10; - } - } - return NULL; -} - -static auto delete_font_cb(lv_font_t* font) -> void {} - -auto Bridge::Get(lua_State* state) -> Bridge* { - lua_pushstring(state, kBridgeKey); - lua_gettable(state, LUA_REGISTRYINDEX); - return reinterpret_cast<Bridge*>(lua_touserdata(state, -1)); -} - -Bridge::Bridge(system_fsm::ServiceLocator& services) : services_(services) {} - -auto Bridge::installBaseModules(lua_State* L) -> void { - lua_pushstring(L, kBridgeKey); - lua_pushlightuserdata(L, this); - lua_settable(L, LUA_REGISTRYINDEX); - - bindings_.install(L); - - luaL_requiref(L, "linenoise", luaopen_linenoise, true); - lua_pop(L, 1); - - luaL_requiref(L, "term.core", luaopen_term_core, true); - lua_pop(L, 1); - - RegisterControlsModule(L); - RegisterDatabaseModule(L); - RegisterQueueModule(L); - RegisterVersionModule(L); - RegisterThemeModule(L); - RegisterScreenModule(L); -} - -auto Bridge::installLvgl(lua_State* L) -> void { - luavgl_set_pcall(L, CallProtected); - luavgl_set_font_extension(L, make_font_cb, delete_font_cb); - luaL_requiref(L, "lvgl", luaopen_lvgl, true); - lua_pop(L, 1); -} - -static auto new_property_module(lua_State* state) -> int { - const char* name = luaL_checkstring(state, 1); - luaL_newmetatable(state, name); - - lua_pushstring(state, "__index"); - lua_pushvalue(state, -2); - lua_settable(state, -3); // metatable.__index = metatable - - return 1; -} - -template <class... Ts> -inline constexpr bool always_false_v = false; - -auto Bridge::installPropertyModule( - lua_State* L, - const std::string& name, - std::vector<std::pair<std::string, std::variant<LuaFunction, Property*>>>& - props) -> void { - // Create the module (or retrieve it if one with this name already exists) - luaL_requiref(L, name.c_str(), new_property_module, true); - - for (const auto& prop : props) { - lua_pushstring(L, prop.first.c_str()); - std::visit( - [&](auto&& arg) { - using T = std::decay_t<decltype(arg)>; - if constexpr (std::is_same_v<T, LuaFunction>) { - bindings_.Register(L, arg); - } else if constexpr (std::is_same_v<T, Property*>) { - bindings_.Register(L, arg); - } else { - static_assert(always_false_v<T>, "missing case"); - } - }, - prop.second); - - lua_settable(L, -3); // metatable.propname = property - } - - lua_pop(L, 1); // pop the module off the stack -} - -} // namespace lua |
