parent
490b067b76
commit
a78614a580
@ -0,0 +1,15 @@ |
|||||||
|
/*
|
||||||
|
* Copyright 2024 ailurux <ailuruxx@gmail.com> |
||||||
|
* |
||||||
|
* SPDX-License-Identifier: GPL-3.0-only |
||||||
|
*/ |
||||||
|
|
||||||
|
#pragma once |
||||||
|
|
||||||
|
#include "lua.hpp" |
||||||
|
|
||||||
|
namespace lua { |
||||||
|
|
||||||
|
auto RegisterThemeModule(lua_State*) -> void; |
||||||
|
|
||||||
|
} // namespace lua
|
@ -0,0 +1,89 @@ |
|||||||
|
|
||||||
|
/*
|
||||||
|
* Copyright 2023 ailurux <ailuruxx@gmail.com> |
||||||
|
* |
||||||
|
* SPDX-License-Identifier: GPL-3.0-only |
||||||
|
*/ |
||||||
|
|
||||||
|
#include "lua_version.hpp" |
||||||
|
|
||||||
|
#include <string> |
||||||
|
|
||||||
|
#include "bridge.hpp" |
||||||
|
#include "lua.hpp" |
||||||
|
|
||||||
|
#include "esp_app_desc.h" |
||||||
|
#include "esp_log.h" |
||||||
|
#include "lauxlib.h" |
||||||
|
#include "lua.h" |
||||||
|
#include "lua_thread.hpp" |
||||||
|
#include "luavgl.h" |
||||||
|
#include "themes.hpp" |
||||||
|
|
||||||
|
namespace lua { |
||||||
|
|
||||||
|
static auto set_theme(lua_State* L) -> int { |
||||||
|
// lv_style_t* style = luavgl_to_style(L, -1);
|
||||||
|
// if (style == NULL) {
|
||||||
|
// ESP_LOGI("DANIEL", "Style was null or malformed??");
|
||||||
|
// return 0;
|
||||||
|
// }
|
||||||
|
|
||||||
|
// ESP_LOGI("DANIEL", "GOT ONE!");
|
||||||
|
// themes::Theme::instance()->...;
|
||||||
|
|
||||||
|
/* table is in the stack at index 't' */ |
||||||
|
std::string class_name; |
||||||
|
lua_pushnil(L); /* first key */ |
||||||
|
while (lua_next(L, -2) != 0) { |
||||||
|
/* uses 'key' (at index -2) and 'value' (at index -1) */ |
||||||
|
if (lua_type(L, -2) == LUA_TSTRING) { |
||||||
|
class_name = lua_tostring(L, -2); |
||||||
|
} |
||||||
|
if (lua_type(L, -1) == LUA_TTABLE) { |
||||||
|
// Nesting
|
||||||
|
lua_pushnil(L); // First key
|
||||||
|
while (lua_next(L, -2) != 0) { |
||||||
|
// Nesting the second
|
||||||
|
int selector = -1; |
||||||
|
lv_style_t* style = NULL; |
||||||
|
lua_pushnil(L); // First key
|
||||||
|
while (lua_next(L, -2) != 0) { |
||||||
|
int idx = lua_tointeger(L, -2); |
||||||
|
if (idx == 1) { |
||||||
|
// Selector
|
||||||
|
selector = lua_tointeger(L, -1); |
||||||
|
} else if (idx == 2) { |
||||||
|
// Style
|
||||||
|
lv_style_t* style = luavgl_to_style(L, -1); |
||||||
|
if (style == NULL) { |
||||||
|
ESP_LOGI("DANIEL", "Style was null or malformed??"); |
||||||
|
return 0; |
||||||
|
} else { |
||||||
|
ESP_LOGI("DANIEL", "Got style for class %s with selector %d", class_name.c_str(), selector); |
||||||
|
} |
||||||
|
} |
||||||
|
lua_pop(L, 1);
|
||||||
|
} |
||||||
|
lua_pop(L, 1);
|
||||||
|
} |
||||||
|
} |
||||||
|
/* removes 'value'; keeps 'key' for next iteration */ |
||||||
|
lua_pop(L, 1); |
||||||
|
} |
||||||
|
return 0; |
||||||
|
} |
||||||
|
|
||||||
|
static const struct luaL_Reg kThemeFuncs[] = {{"set", set_theme}, {NULL, NULL}}; |
||||||
|
|
||||||
|
static auto lua_theme(lua_State* L) -> int { |
||||||
|
luaL_newlib(L, kThemeFuncs); |
||||||
|
return 1; |
||||||
|
} |
||||||
|
|
||||||
|
auto RegisterThemeModule(lua_State* L) -> void { |
||||||
|
luaL_requiref(L, "theme", lua_theme, true); |
||||||
|
lua_pop(L, 1); |
||||||
|
} |
||||||
|
|
||||||
|
} // namespace lua
|
Loading…
Reference in new issue