|
|
@ -1,5 +1,3 @@ |
|
|
|
#include "core/lv_group.h" |
|
|
|
|
|
|
|
#include "core/lv_obj.h" |
|
|
|
|
|
|
|
#include "luavgl.h" |
|
|
|
#include "luavgl.h" |
|
|
|
#include "private.h" |
|
|
|
#include "private.h" |
|
|
|
|
|
|
|
|
|
|
@ -10,16 +8,18 @@ |
|
|
|
|
|
|
|
|
|
|
|
static int luavgl_anim_create(lua_State *L); |
|
|
|
static int luavgl_anim_create(lua_State *L); |
|
|
|
static int luavgl_obj_delete(lua_State *L); |
|
|
|
static int luavgl_obj_delete(lua_State *L); |
|
|
|
|
|
|
|
static int luavgl_obj_clean(lua_State *L); |
|
|
|
|
|
|
|
|
|
|
|
static void _lv_obj_set_align(void *obj, lua_State *L) { |
|
|
|
static void _lv_obj_set_align(void *obj, lua_State *L) |
|
|
|
|
|
|
|
{ |
|
|
|
if (lua_isinteger(L, -1)) { |
|
|
|
if (lua_isinteger(L, -1)) { |
|
|
|
lv_obj_align(obj, lua_tointeger(L, -1), 0, 0); |
|
|
|
lv_obj_align(obj, lua_tointeger(L, -1), 0, 0); |
|
|
|
return; |
|
|
|
return; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
if (!lua_istable(L, -1)) { |
|
|
|
if (!lua_istable(L, -1)) { |
|
|
|
luaL_argerror(L, -1, "should be table."); |
|
|
|
luaL_argerror(L, -1, "should be table"); |
|
|
|
debug("para should be table."); |
|
|
|
LV_LOG_ERROR("para should be table"); |
|
|
|
return; |
|
|
|
return; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
@ -43,11 +43,13 @@ static void _lv_obj_set_align(void *obj, lua_State *L) { |
|
|
|
* |
|
|
|
* |
|
|
|
* Internally used. |
|
|
|
* Internally used. |
|
|
|
*/ |
|
|
|
*/ |
|
|
|
static inline void luavgl_setup_obj(lua_State *L, lv_obj_t *obj) { |
|
|
|
static inline void luavgl_setup_obj(lua_State *L, lv_obj_t *obj) |
|
|
|
|
|
|
|
{ |
|
|
|
luavgl_iterate(L, -1, luavgl_obj_set_property_kv, obj); |
|
|
|
luavgl_iterate(L, -1, luavgl_obj_set_property_kv, obj); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
static void obj_delete_cb(lv_event_t *e) { |
|
|
|
static void obj_delete_cb(lv_event_t *e) |
|
|
|
|
|
|
|
{ |
|
|
|
lua_State *L = e->user_data; |
|
|
|
lua_State *L = e->user_data; |
|
|
|
lua_pushlightuserdata(L, e->current_target); |
|
|
|
lua_pushlightuserdata(L, e->current_target); |
|
|
|
lua_rawget(L, LUA_REGISTRYINDEX); |
|
|
|
lua_rawget(L, LUA_REGISTRYINDEX); |
|
|
@ -67,7 +69,33 @@ static void obj_delete_cb(lv_event_t *e) { |
|
|
|
goto pop_exit; |
|
|
|
goto pop_exit; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
luavgl_obj_delete(L); |
|
|
|
/* Clean its children firstly */ |
|
|
|
|
|
|
|
luavgl_obj_clean(L); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/* Remove events added from lua, but keep them unremoved */ |
|
|
|
|
|
|
|
int size = lv_array_size(&lobj->events); |
|
|
|
|
|
|
|
struct event_callback_s *event; |
|
|
|
|
|
|
|
struct event_callback_s **events = lv_array_front(&lobj->events); |
|
|
|
|
|
|
|
for (int i = 0; i < size; i++) { |
|
|
|
|
|
|
|
event = events[i]; |
|
|
|
|
|
|
|
if (event == NULL || event->dsc == NULL) { |
|
|
|
|
|
|
|
continue; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
luaL_unref(L, LUA_REGISTRYINDEX, event->ref); |
|
|
|
|
|
|
|
lv_free(event); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
lv_array_deinit(&lobj->events); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/* remove userdata from registry. */ |
|
|
|
|
|
|
|
lua_checkstack(L, 2); |
|
|
|
|
|
|
|
lua_pushlightuserdata(L, lobj->obj); |
|
|
|
|
|
|
|
lua_pushnil(L); |
|
|
|
|
|
|
|
lua_rawset(L, LUA_REGISTRYINDEX); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
LV_LOG_INFO("delete obj: %p", lobj->obj); |
|
|
|
|
|
|
|
lobj->obj = NULL; |
|
|
|
return; |
|
|
|
return; |
|
|
|
|
|
|
|
|
|
|
|
pop_exit: |
|
|
|
pop_exit: |
|
|
@ -80,7 +108,8 @@ pop_exit: |
|
|
|
* one. result stack: table(from uservalue) |
|
|
|
* one. result stack: table(from uservalue) |
|
|
|
* return uservalue type: LUA_TTABLE |
|
|
|
* return uservalue type: LUA_TTABLE |
|
|
|
*/ |
|
|
|
*/ |
|
|
|
LUALIB_API int luavgl_obj_getuserdatauv(lua_State *L, int idx) { |
|
|
|
LUALIB_API int luavgl_obj_getuserdatauv(lua_State *L, int idx) |
|
|
|
|
|
|
|
{ |
|
|
|
int type = lua_getuservalue(L, idx); |
|
|
|
int type = lua_getuservalue(L, idx); |
|
|
|
if (type == LUA_TTABLE) |
|
|
|
if (type == LUA_TTABLE) |
|
|
|
return type; |
|
|
|
return type; |
|
|
@ -99,11 +128,13 @@ LUALIB_API int luavgl_obj_getuserdatauv(lua_State *L, int idx) { |
|
|
|
return LUA_TTABLE; |
|
|
|
return LUA_TTABLE; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
static int luavgl_obj_create(lua_State *L) { |
|
|
|
static int luavgl_obj_create(lua_State *L) |
|
|
|
|
|
|
|
{ |
|
|
|
return luavgl_obj_create_helper(L, lv_obj_create); |
|
|
|
return luavgl_obj_create_helper(L, lv_obj_create); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
static int luavgl_obj_delete(lua_State *L) { |
|
|
|
static int luavgl_obj_delete(lua_State *L) |
|
|
|
|
|
|
|
{ |
|
|
|
luavgl_obj_t *lobj; |
|
|
|
luavgl_obj_t *lobj; |
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
/**
|
|
|
@ -146,14 +177,15 @@ static int luavgl_obj_delete(lua_State *L) { |
|
|
|
lua_pushnil(L); |
|
|
|
lua_pushnil(L); |
|
|
|
lua_rawset(L, LUA_REGISTRYINDEX); |
|
|
|
lua_rawset(L, LUA_REGISTRYINDEX); |
|
|
|
|
|
|
|
|
|
|
|
debug("delete obj: %p\n", lobj->obj); |
|
|
|
LV_LOG_INFO("delete obj: %p", lobj->obj); |
|
|
|
lobj->obj = NULL; |
|
|
|
lobj->obj = NULL; |
|
|
|
|
|
|
|
|
|
|
|
lua_pop(L, 1); /* remove the userdata para */ |
|
|
|
lua_pop(L, 1); /* remove the userdata para */ |
|
|
|
return 0; |
|
|
|
return 0; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
static int luavgl_obj_clean(lua_State *L) { |
|
|
|
static int luavgl_obj_clean(lua_State *L) |
|
|
|
|
|
|
|
{ |
|
|
|
luavgl_obj_t *lobj = luavgl_to_lobj(L, -1); |
|
|
|
luavgl_obj_t *lobj = luavgl_to_lobj(L, -1); |
|
|
|
if (lobj == NULL || lobj->obj == NULL) |
|
|
|
if (lobj == NULL || lobj->obj == NULL) |
|
|
|
return 0; |
|
|
|
return 0; |
|
|
@ -170,31 +202,36 @@ static int luavgl_obj_clean(lua_State *L) { |
|
|
|
luavgl_obj_delete(L); |
|
|
|
luavgl_obj_delete(L); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
lua_pop(L, 1); /* remove the userdata para */ |
|
|
|
lua_settop(L, 1); |
|
|
|
return 0; |
|
|
|
return 1; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
static int luavgl_obj_set(lua_State *L) { |
|
|
|
static int luavgl_obj_set(lua_State *L) |
|
|
|
|
|
|
|
{ |
|
|
|
lv_obj_t *obj = luavgl_to_obj(L, 1); |
|
|
|
lv_obj_t *obj = luavgl_to_obj(L, 1); |
|
|
|
|
|
|
|
|
|
|
|
if (!lua_istable(L, -1)) { |
|
|
|
if (!lua_istable(L, -1)) { |
|
|
|
luaL_error(L, "expect a table on 2nd para."); |
|
|
|
luaL_error(L, "expect a table on 2nd para"); |
|
|
|
return 0; |
|
|
|
lua_settop(L, 1); |
|
|
|
|
|
|
|
return 1; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
luavgl_setup_obj(L, obj); |
|
|
|
luavgl_setup_obj(L, obj); |
|
|
|
return 0; |
|
|
|
|
|
|
|
|
|
|
|
lua_settop(L, 1); |
|
|
|
|
|
|
|
return 1; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
/**
|
|
|
|
* obj:align_to({base=base, type=type, x_ofs=0, y_ofs=0}) |
|
|
|
* obj:align_to({base=base, type=type, x_ofs=0, y_ofs=0}) |
|
|
|
*/ |
|
|
|
*/ |
|
|
|
static int luavgl_obj_align_to(lua_State *L) { |
|
|
|
static int luavgl_obj_align_to(lua_State *L) |
|
|
|
|
|
|
|
{ |
|
|
|
lv_obj_t *obj = luavgl_to_obj(L, 1); |
|
|
|
lv_obj_t *obj = luavgl_to_obj(L, 1); |
|
|
|
|
|
|
|
|
|
|
|
if (!lua_istable(L, 2)) { |
|
|
|
if (!lua_istable(L, 2)) { |
|
|
|
debug("para should be table."); |
|
|
|
LV_LOG_ERROR("para should be table"); |
|
|
|
return luaL_argerror(L, 2, "should be table."); |
|
|
|
return luaL_argerror(L, 2, "should be table"); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
lua_getfield(L, 2, "type"); |
|
|
|
lua_getfield(L, 2, "type"); |
|
|
@ -205,7 +242,7 @@ static int luavgl_obj_align_to(lua_State *L) { |
|
|
|
lv_obj_t *base = luavgl_to_lobj(L, -1)->obj; |
|
|
|
lv_obj_t *base = luavgl_to_lobj(L, -1)->obj; |
|
|
|
lua_pop(L, 1); |
|
|
|
lua_pop(L, 1); |
|
|
|
if (base == NULL) { |
|
|
|
if (base == NULL) { |
|
|
|
debug("base is not lua obj"); |
|
|
|
LV_LOG_ERROR("base is not lua obj"); |
|
|
|
return luaL_argerror(L, -1, "base is not lua obj"); |
|
|
|
return luaL_argerror(L, -1, "base is not lua obj"); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
@ -218,17 +255,22 @@ static int luavgl_obj_align_to(lua_State *L) { |
|
|
|
lua_pop(L, 1); |
|
|
|
lua_pop(L, 1); |
|
|
|
|
|
|
|
|
|
|
|
lv_obj_align_to(obj, base, align, x_ofs, y_ofs); |
|
|
|
lv_obj_align_to(obj, base, align, x_ofs, y_ofs); |
|
|
|
return 0; |
|
|
|
|
|
|
|
|
|
|
|
lua_settop(L, 1); |
|
|
|
|
|
|
|
return 1; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
static int luavgl_obj_set_parent(lua_State *L) { |
|
|
|
static int luavgl_obj_set_parent(lua_State *L) |
|
|
|
|
|
|
|
{ |
|
|
|
lv_obj_t *obj = luavgl_to_obj(L, 1); |
|
|
|
lv_obj_t *obj = luavgl_to_obj(L, 1); |
|
|
|
lv_obj_t *parent = luavgl_to_obj(L, 2); |
|
|
|
lv_obj_t *parent = luavgl_to_obj(L, 2); |
|
|
|
lv_obj_set_parent(obj, parent); |
|
|
|
lv_obj_set_parent(obj, parent); |
|
|
|
return 0; |
|
|
|
lua_pop(L, 1); |
|
|
|
|
|
|
|
return 1; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
static int luavgl_obj_get_screen(lua_State *L) { |
|
|
|
static int luavgl_obj_get_screen(lua_State *L) |
|
|
|
|
|
|
|
{ |
|
|
|
lv_obj_t *obj = luavgl_to_obj(L, 1); |
|
|
|
lv_obj_t *obj = luavgl_to_obj(L, 1); |
|
|
|
lv_obj_t *screen = lv_obj_get_screen(obj); |
|
|
|
lv_obj_t *screen = lv_obj_get_screen(obj); |
|
|
|
|
|
|
|
|
|
|
@ -246,7 +288,8 @@ static int luavgl_obj_get_screen(lua_State *L) { |
|
|
|
return 1; |
|
|
|
return 1; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
static int luavgl_obj_get_parent(lua_State *L) { |
|
|
|
static int luavgl_obj_get_parent(lua_State *L) |
|
|
|
|
|
|
|
{ |
|
|
|
lv_obj_t *obj = luavgl_to_obj(L, 1); |
|
|
|
lv_obj_t *obj = luavgl_to_obj(L, 1); |
|
|
|
lv_obj_t *parent = lv_obj_get_parent(obj); |
|
|
|
lv_obj_t *parent = lv_obj_get_parent(obj); |
|
|
|
|
|
|
|
|
|
|
@ -263,7 +306,8 @@ static int luavgl_obj_get_parent(lua_State *L) { |
|
|
|
return 1; |
|
|
|
return 1; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
static int luavgl_obj_set_get_parent(lua_State *L) { |
|
|
|
static int luavgl_obj_set_get_parent(lua_State *L) |
|
|
|
|
|
|
|
{ |
|
|
|
lv_obj_t *obj = luavgl_to_obj(L, 1); |
|
|
|
lv_obj_t *obj = luavgl_to_obj(L, 1); |
|
|
|
if (!lua_isnoneornil(L, 2)) { |
|
|
|
if (!lua_isnoneornil(L, 2)) { |
|
|
|
lv_obj_t *parent = luavgl_to_obj(L, 2); |
|
|
|
lv_obj_t *parent = luavgl_to_obj(L, 2); |
|
|
@ -273,7 +317,8 @@ static int luavgl_obj_set_get_parent(lua_State *L) { |
|
|
|
return luavgl_obj_get_parent(L); |
|
|
|
return luavgl_obj_get_parent(L); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
static int luavgl_obj_get_child(lua_State *L) { |
|
|
|
static int luavgl_obj_get_child(lua_State *L) |
|
|
|
|
|
|
|
{ |
|
|
|
lv_obj_t *obj = luavgl_to_obj(L, 1); |
|
|
|
lv_obj_t *obj = luavgl_to_obj(L, 1); |
|
|
|
|
|
|
|
|
|
|
|
int id = luavgl_tointeger(L, 2); |
|
|
|
int id = luavgl_tointeger(L, 2); |
|
|
@ -293,13 +338,15 @@ static int luavgl_obj_get_child(lua_State *L) { |
|
|
|
return 1; |
|
|
|
return 1; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
static int luavgl_obj_get_child_cnt(lua_State *L) { |
|
|
|
static int luavgl_obj_get_child_cnt(lua_State *L) |
|
|
|
|
|
|
|
{ |
|
|
|
lv_obj_t *obj = luavgl_to_obj(L, 1); |
|
|
|
lv_obj_t *obj = luavgl_to_obj(L, 1); |
|
|
|
lua_pushinteger(L, lv_obj_get_child_cnt(obj)); |
|
|
|
lua_pushinteger(L, lv_obj_get_child_cnt(obj)); |
|
|
|
return 1; |
|
|
|
return 1; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
static int luavgl_obj_get_state(lua_State *L) { |
|
|
|
static int luavgl_obj_get_state(lua_State *L) |
|
|
|
|
|
|
|
{ |
|
|
|
lv_obj_t *obj = luavgl_to_obj(L, 1); |
|
|
|
lv_obj_t *obj = luavgl_to_obj(L, 1); |
|
|
|
lv_state_t state = lv_obj_get_state(obj); |
|
|
|
lv_state_t state = lv_obj_get_state(obj); |
|
|
|
lua_pushinteger(L, state); |
|
|
|
lua_pushinteger(L, state); |
|
|
@ -312,7 +359,8 @@ static int luavgl_obj_get_state(lua_State *L) { |
|
|
|
* obj:scroll_to({x=10, anim=true}) |
|
|
|
* obj:scroll_to({x=10, anim=true}) |
|
|
|
* obj:scroll_to({x=10, y=100, anim=false}) |
|
|
|
* obj:scroll_to({x=10, y=100, anim=false}) |
|
|
|
*/ |
|
|
|
*/ |
|
|
|
static int luavgl_obj_scroll_to(lua_State *L) { |
|
|
|
static int luavgl_obj_scroll_to(lua_State *L) |
|
|
|
|
|
|
|
{ |
|
|
|
lv_obj_t *obj = luavgl_to_obj(L, 1); |
|
|
|
lv_obj_t *obj = luavgl_to_obj(L, 1); |
|
|
|
|
|
|
|
|
|
|
|
if (!lua_istable(L, -1)) { |
|
|
|
if (!lua_istable(L, -1)) { |
|
|
@ -338,176 +386,231 @@ static int luavgl_obj_scroll_to(lua_State *L) { |
|
|
|
} |
|
|
|
} |
|
|
|
lua_pop(L, 1); |
|
|
|
lua_pop(L, 1); |
|
|
|
|
|
|
|
|
|
|
|
return 0; |
|
|
|
lua_settop(L, 1); |
|
|
|
|
|
|
|
return 1; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
static int luavgl_obj_is_visible(lua_State *L) { |
|
|
|
static int luavgl_obj_is_visible(lua_State *L) |
|
|
|
|
|
|
|
{ |
|
|
|
lv_obj_t *obj = luavgl_to_obj(L, 1); |
|
|
|
lv_obj_t *obj = luavgl_to_obj(L, 1); |
|
|
|
lua_pushboolean(L, lv_obj_is_visible(obj)); |
|
|
|
lua_pushboolean(L, lv_obj_is_visible(obj)); |
|
|
|
|
|
|
|
|
|
|
|
return 1; |
|
|
|
return 1; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
static int luavgl_obj_add_flag(lua_State *L) { |
|
|
|
static int luavgl_obj_add_flag(lua_State *L) |
|
|
|
|
|
|
|
{ |
|
|
|
lv_obj_t *obj = luavgl_to_obj(L, 1); |
|
|
|
lv_obj_t *obj = luavgl_to_obj(L, 1); |
|
|
|
lv_obj_flag_t flag = lua_tointeger(L, 2); |
|
|
|
lv_obj_flag_t flag = lua_tointeger(L, 2); |
|
|
|
lv_obj_add_flag(obj, flag); |
|
|
|
lv_obj_add_flag(obj, flag); |
|
|
|
|
|
|
|
|
|
|
|
return 0; |
|
|
|
lua_settop(L, 1); |
|
|
|
|
|
|
|
return 1; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
static int luavgl_obj_clear_flag(lua_State *L) { |
|
|
|
static int luavgl_obj_clear_flag(lua_State *L) |
|
|
|
|
|
|
|
{ |
|
|
|
lv_obj_t *obj = luavgl_to_obj(L, 1); |
|
|
|
lv_obj_t *obj = luavgl_to_obj(L, 1); |
|
|
|
lv_obj_flag_t flag = lua_tointeger(L, 2); |
|
|
|
lv_obj_flag_t flag = lua_tointeger(L, 2); |
|
|
|
lv_obj_clear_flag(obj, flag); |
|
|
|
lv_obj_clear_flag(obj, flag); |
|
|
|
|
|
|
|
|
|
|
|
return 0; |
|
|
|
lua_settop(L, 1); |
|
|
|
|
|
|
|
return 1; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
static int luavgl_obj_add_state(lua_State *L) { |
|
|
|
static int luavgl_obj_add_state(lua_State *L) |
|
|
|
|
|
|
|
{ |
|
|
|
lv_obj_t *obj = luavgl_to_obj(L, 1); |
|
|
|
lv_obj_t *obj = luavgl_to_obj(L, 1); |
|
|
|
lv_state_t state = lua_tointeger(L, 2); |
|
|
|
lv_state_t state = lua_tointeger(L, 2); |
|
|
|
lv_obj_add_state(obj, state); |
|
|
|
lv_obj_add_state(obj, state); |
|
|
|
return 0; |
|
|
|
|
|
|
|
|
|
|
|
lua_settop(L, 1); |
|
|
|
|
|
|
|
return 1; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
static int luavgl_obj_clear_state(lua_State *L) { |
|
|
|
static int luavgl_obj_clear_state(lua_State *L) |
|
|
|
|
|
|
|
{ |
|
|
|
lv_obj_t *obj = luavgl_to_obj(L, 1); |
|
|
|
lv_obj_t *obj = luavgl_to_obj(L, 1); |
|
|
|
lv_state_t state = lua_tointeger(L, 2); |
|
|
|
lv_state_t state = lua_tointeger(L, 2); |
|
|
|
lv_obj_clear_state(obj, state); |
|
|
|
lv_obj_clear_state(obj, state); |
|
|
|
return 0; |
|
|
|
|
|
|
|
|
|
|
|
lua_settop(L, 1); |
|
|
|
|
|
|
|
return 1; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
/**
|
|
|
|
* obj:scroll_by(x, y, anim_en) |
|
|
|
* obj:scroll_by(x, y, anim_en) |
|
|
|
*/ |
|
|
|
*/ |
|
|
|
static int luavgl_obj_scroll_by(lua_State *L) { |
|
|
|
static int luavgl_obj_scroll_by(lua_State *L) |
|
|
|
|
|
|
|
{ |
|
|
|
lv_obj_t *obj = luavgl_to_obj(L, 1); |
|
|
|
lv_obj_t *obj = luavgl_to_obj(L, 1); |
|
|
|
int x = luavgl_tointeger(L, 2); |
|
|
|
int x = luavgl_tointeger(L, 2); |
|
|
|
int y = luavgl_tointeger(L, 3); |
|
|
|
int y = luavgl_tointeger(L, 3); |
|
|
|
int anim_en = luavgl_tointeger(L, 4); |
|
|
|
int anim_en = luavgl_tointeger(L, 4); |
|
|
|
|
|
|
|
|
|
|
|
lv_obj_scroll_by(obj, x, y, anim_en); |
|
|
|
lv_obj_scroll_by(obj, x, y, anim_en); |
|
|
|
return 0; |
|
|
|
|
|
|
|
|
|
|
|
lua_settop(L, 1); |
|
|
|
|
|
|
|
return 1; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
static int luavgl_obj_scroll_by_bounded(lua_State *L) { |
|
|
|
static int luavgl_obj_scroll_by_bounded(lua_State *L) |
|
|
|
|
|
|
|
{ |
|
|
|
lv_obj_t *obj = luavgl_to_obj(L, 1); |
|
|
|
lv_obj_t *obj = luavgl_to_obj(L, 1); |
|
|
|
int dx = luavgl_tointeger(L, 2); |
|
|
|
int dx = luavgl_tointeger(L, 2); |
|
|
|
int dy = luavgl_tointeger(L, 3); |
|
|
|
int dy = luavgl_tointeger(L, 3); |
|
|
|
int anim_en = luavgl_tointeger(L, 4); |
|
|
|
int anim_en = luavgl_tointeger(L, 4); |
|
|
|
|
|
|
|
|
|
|
|
lv_obj_scroll_by_bounded(obj, dx, dy, anim_en); |
|
|
|
lv_obj_scroll_by_bounded(obj, dx, dy, anim_en); |
|
|
|
return 0; |
|
|
|
lua_settop(L, 1); |
|
|
|
|
|
|
|
return 1; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
static int luavgl_obj_scroll_to_view(lua_State *L) { |
|
|
|
static int luavgl_obj_scroll_to_view(lua_State *L) |
|
|
|
|
|
|
|
{ |
|
|
|
lv_obj_t *obj = luavgl_to_obj(L, 1); |
|
|
|
lv_obj_t *obj = luavgl_to_obj(L, 1); |
|
|
|
int anim_en = luavgl_tointeger(L, 2); |
|
|
|
int anim_en = luavgl_tointeger(L, 2); |
|
|
|
|
|
|
|
|
|
|
|
lv_obj_scroll_to_view(obj, anim_en); |
|
|
|
lv_obj_scroll_to_view(obj, anim_en); |
|
|
|
return 0; |
|
|
|
lua_settop(L, 1); |
|
|
|
|
|
|
|
return 1; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
static int luavgl_obj_scroll_to_view_recursive(lua_State *L) { |
|
|
|
static int luavgl_obj_scroll_to_view_recursive(lua_State *L) |
|
|
|
|
|
|
|
{ |
|
|
|
lv_obj_t *obj = luavgl_to_obj(L, 1); |
|
|
|
lv_obj_t *obj = luavgl_to_obj(L, 1); |
|
|
|
int anim_en = luavgl_tointeger(L, 2); |
|
|
|
int anim_en = luavgl_tointeger(L, 2); |
|
|
|
|
|
|
|
|
|
|
|
lv_obj_scroll_to_view_recursive(obj, anim_en); |
|
|
|
lv_obj_scroll_to_view_recursive(obj, anim_en); |
|
|
|
return 0; |
|
|
|
|
|
|
|
|
|
|
|
lua_settop(L, 1); |
|
|
|
|
|
|
|
return 1; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
static int luavgl_obj_scroll_by_raw(lua_State *L) { |
|
|
|
static int luavgl_obj_scroll_by_raw(lua_State *L) |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
#if LV_VERSION_CHECK(8, 3, 0) |
|
|
|
lv_obj_t *obj = luavgl_to_obj(L, 1); |
|
|
|
lv_obj_t *obj = luavgl_to_obj(L, 1); |
|
|
|
int x = luavgl_tointeger(L, 2); |
|
|
|
int x = luavgl_tointeger(L, 2); |
|
|
|
int y = luavgl_tointeger(L, 3); |
|
|
|
int y = luavgl_tointeger(L, 3); |
|
|
|
|
|
|
|
|
|
|
|
_lv_obj_scroll_by_raw(obj, x, y); |
|
|
|
_lv_obj_scroll_by_raw(obj, x, y); |
|
|
|
return 0; |
|
|
|
#endif |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
lua_settop(L, 1); |
|
|
|
|
|
|
|
return 1; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
static int luavgl_obj_is_scrolling(lua_State *L) { |
|
|
|
static int luavgl_obj_is_scrolling(lua_State *L) |
|
|
|
|
|
|
|
{ |
|
|
|
lv_obj_t *obj = luavgl_to_obj(L, 1); |
|
|
|
lv_obj_t *obj = luavgl_to_obj(L, 1); |
|
|
|
lua_pushboolean(L, lv_obj_is_scrolling(obj)); |
|
|
|
lua_pushboolean(L, lv_obj_is_scrolling(obj)); |
|
|
|
return 1; |
|
|
|
return 1; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
static int luavgl_obj_scrollbar_invalidate(lua_State *L) { |
|
|
|
static int luavgl_obj_scrollbar_invalidate(lua_State *L) |
|
|
|
|
|
|
|
{ |
|
|
|
lv_obj_t *obj = luavgl_to_obj(L, 1); |
|
|
|
lv_obj_t *obj = luavgl_to_obj(L, 1); |
|
|
|
lv_obj_scrollbar_invalidate(obj); |
|
|
|
lv_obj_scrollbar_invalidate(obj); |
|
|
|
return 0; |
|
|
|
|
|
|
|
|
|
|
|
lua_settop(L, 1); |
|
|
|
|
|
|
|
return 1; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
static int luavgl_obj_readjust_scroll(lua_State *L) { |
|
|
|
static int luavgl_obj_readjust_scroll(lua_State *L) |
|
|
|
|
|
|
|
{ |
|
|
|
lv_obj_t *obj = luavgl_to_obj(L, 1); |
|
|
|
lv_obj_t *obj = luavgl_to_obj(L, 1); |
|
|
|
int anim_en = luavgl_tointeger(L, 2); |
|
|
|
int anim_en = luavgl_tointeger(L, 2); |
|
|
|
lv_obj_readjust_scroll(obj, anim_en); |
|
|
|
lv_obj_readjust_scroll(obj, anim_en); |
|
|
|
return 0; |
|
|
|
|
|
|
|
|
|
|
|
lua_settop(L, 1); |
|
|
|
|
|
|
|
return 1; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
static int luavgl_obj_is_editable(lua_State *L) { |
|
|
|
static int luavgl_obj_is_editable(lua_State *L) |
|
|
|
|
|
|
|
{ |
|
|
|
lv_obj_t *obj = luavgl_to_obj(L, 1); |
|
|
|
lv_obj_t *obj = luavgl_to_obj(L, 1); |
|
|
|
lua_pushboolean(L, lv_obj_is_editable(obj)); |
|
|
|
lua_pushboolean(L, lv_obj_is_editable(obj)); |
|
|
|
return 1; |
|
|
|
return 1; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
static int luavgl_obj_is_group_def(lua_State *L) { |
|
|
|
static int luavgl_obj_is_group_def(lua_State *L) |
|
|
|
|
|
|
|
{ |
|
|
|
lv_obj_t *obj = luavgl_to_obj(L, 1); |
|
|
|
lv_obj_t *obj = luavgl_to_obj(L, 1); |
|
|
|
lua_pushboolean(L, lv_obj_is_group_def(obj)); |
|
|
|
lua_pushboolean(L, lv_obj_is_group_def(obj)); |
|
|
|
return 1; |
|
|
|
return 1; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
static int luavgl_obj_is_layout_positioned(lua_State *L) { |
|
|
|
static int luavgl_obj_is_layout_positioned(lua_State *L) |
|
|
|
|
|
|
|
{ |
|
|
|
lv_obj_t *obj = luavgl_to_obj(L, 1); |
|
|
|
lv_obj_t *obj = luavgl_to_obj(L, 1); |
|
|
|
lua_pushboolean(L, lv_obj_is_layout_positioned(obj)); |
|
|
|
lua_pushboolean(L, lv_obj_is_layout_positioned(obj)); |
|
|
|
return 1; |
|
|
|
return 1; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
static int luavgl_obj_mark_layout_as_dirty(lua_State *L) { |
|
|
|
static int luavgl_obj_mark_layout_as_dirty(lua_State *L) |
|
|
|
|
|
|
|
{ |
|
|
|
lv_obj_t *obj = luavgl_to_obj(L, 1); |
|
|
|
lv_obj_t *obj = luavgl_to_obj(L, 1); |
|
|
|
lv_obj_mark_layout_as_dirty(obj); |
|
|
|
lv_obj_mark_layout_as_dirty(obj); |
|
|
|
return 0; |
|
|
|
|
|
|
|
|
|
|
|
lua_settop(L, 1); |
|
|
|
|
|
|
|
return 1; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
static int luavgl_obj_center(lua_State *L) { |
|
|
|
static int luavgl_obj_center(lua_State *L) |
|
|
|
|
|
|
|
{ |
|
|
|
lv_obj_t *obj = luavgl_to_obj(L, 1); |
|
|
|
lv_obj_t *obj = luavgl_to_obj(L, 1); |
|
|
|
lv_obj_center(obj); |
|
|
|
lv_obj_center(obj); |
|
|
|
return 0; |
|
|
|
|
|
|
|
|
|
|
|
lua_settop(L, 1); |
|
|
|
|
|
|
|
return 1; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
static int luavgl_obj_invalidate(lua_State *L) { |
|
|
|
static int luavgl_obj_invalidate(lua_State *L) |
|
|
|
|
|
|
|
{ |
|
|
|
lv_obj_t *obj = luavgl_to_obj(L, 1); |
|
|
|
lv_obj_t *obj = luavgl_to_obj(L, 1); |
|
|
|
lv_obj_invalidate(obj); |
|
|
|
lv_obj_invalidate(obj); |
|
|
|
return 0; |
|
|
|
|
|
|
|
|
|
|
|
return 1; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
static int luavgl_obj_set_flex_flow(lua_State *L) { |
|
|
|
static int luavgl_obj_set_flex_flow(lua_State *L) |
|
|
|
|
|
|
|
{ |
|
|
|
lv_obj_t *obj = luavgl_to_obj(L, 1); |
|
|
|
lv_obj_t *obj = luavgl_to_obj(L, 1); |
|
|
|
lv_flex_flow_t flow = luavgl_tointeger(L, 2); |
|
|
|
lv_flex_flow_t flow = luavgl_tointeger(L, 2); |
|
|
|
|
|
|
|
|
|
|
|
lv_obj_set_flex_flow(obj, flow); |
|
|
|
lv_obj_set_flex_flow(obj, flow); |
|
|
|
return 0; |
|
|
|
|
|
|
|
|
|
|
|
lua_settop(L, 1); |
|
|
|
|
|
|
|
return 1; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
static int luavgl_obj_set_flex_align(lua_State *L) { |
|
|
|
static int luavgl_obj_set_flex_align(lua_State *L) |
|
|
|
|
|
|
|
{ |
|
|
|
lv_obj_t *obj = luavgl_to_obj(L, 1); |
|
|
|
lv_obj_t *obj = luavgl_to_obj(L, 1); |
|
|
|
lv_flex_align_t m = luavgl_tointeger(L, 2); |
|
|
|
lv_flex_align_t m = luavgl_tointeger(L, 2); |
|
|
|
lv_flex_align_t c = luavgl_tointeger(L, 3); |
|
|
|
lv_flex_align_t c = luavgl_tointeger(L, 3); |
|
|
|
lv_flex_align_t t = luavgl_tointeger(L, 4); |
|
|
|
lv_flex_align_t t = luavgl_tointeger(L, 4); |
|
|
|
|
|
|
|
|
|
|
|
lv_obj_set_flex_align(obj, m, c, t); |
|
|
|
lv_obj_set_flex_align(obj, m, c, t); |
|
|
|
return 0; |
|
|
|
|
|
|
|
|
|
|
|
lua_settop(L, 1); |
|
|
|
|
|
|
|
return 1; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
static int luavgl_obj_set_flex_grow(lua_State *L) { |
|
|
|
static int luavgl_obj_set_flex_grow(lua_State *L) |
|
|
|
|
|
|
|
{ |
|
|
|
lv_obj_t *obj = luavgl_to_obj(L, 1); |
|
|
|
lv_obj_t *obj = luavgl_to_obj(L, 1); |
|
|
|
uint8_t grow = luavgl_tointeger(L, 2); |
|
|
|
uint8_t grow = luavgl_tointeger(L, 2); |
|
|
|
|
|
|
|
|
|
|
|
lv_obj_set_flex_grow(obj, grow); |
|
|
|
lv_obj_set_flex_grow(obj, grow); |
|
|
|
return 0; |
|
|
|
|
|
|
|
|
|
|
|
lua_settop(L, 1); |
|
|
|
|
|
|
|
return 1; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
static int luavgl_obj_indev_search(lua_State *L) { |
|
|
|
static int luavgl_obj_indev_search(lua_State *L) |
|
|
|
|
|
|
|
{ |
|
|
|
lv_obj_t *obj = luavgl_to_obj(L, 1); |
|
|
|
lv_obj_t *obj = luavgl_to_obj(L, 1); |
|
|
|
lv_point_t point; |
|
|
|
lv_point_t point; |
|
|
|
if (lua_istable(L, 2)) { |
|
|
|
if (lua_istable(L, 2)) { |
|
|
@ -537,7 +640,8 @@ static int luavgl_obj_indev_search(lua_State *L) { |
|
|
|
return 1; |
|
|
|
return 1; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
static int luavgl_obj_get_coords(lua_State *L) { |
|
|
|
static int luavgl_obj_get_coords(lua_State *L) |
|
|
|
|
|
|
|
{ |
|
|
|
lv_area_t area; |
|
|
|
lv_area_t area; |
|
|
|
lv_obj_t *obj = luavgl_to_obj(L, 1); |
|
|
|
lv_obj_t *obj = luavgl_to_obj(L, 1); |
|
|
|
lv_obj_get_coords(obj, &area); |
|
|
|
lv_obj_get_coords(obj, &area); |
|
|
@ -561,7 +665,8 @@ static int luavgl_obj_get_coords(lua_State *L) { |
|
|
|
/**
|
|
|
|
/**
|
|
|
|
* get object real position using lv_obj_get_x/x2/y/y2 |
|
|
|
* get object real position using lv_obj_get_x/x2/y/y2 |
|
|
|
*/ |
|
|
|
*/ |
|
|
|
static int luavgl_obj_get_pos(lua_State *L) { |
|
|
|
static int luavgl_obj_get_pos(lua_State *L) |
|
|
|
|
|
|
|
{ |
|
|
|
lv_obj_t *obj = luavgl_to_obj(L, 1); |
|
|
|
lv_obj_t *obj = luavgl_to_obj(L, 1); |
|
|
|
lua_newtable(L); |
|
|
|
lua_newtable(L); |
|
|
|
|
|
|
|
|
|
|
@ -580,39 +685,18 @@ static int luavgl_obj_get_pos(lua_State *L) { |
|
|
|
return 1; |
|
|
|
return 1; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
|
|
|
* set this object as the current selection |
|
|
|
|
|
|
|
*/ |
|
|
|
|
|
|
|
static int luavgl_obj_focus(lua_State *L) { |
|
|
|
|
|
|
|
lv_obj_t *obj = luavgl_to_obj(L, 1); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
lv_group_t *group = lv_obj_get_group(obj); |
|
|
|
|
|
|
|
if (group == NULL) { |
|
|
|
|
|
|
|
return 0; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
lv_group_focus_obj(obj); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
return 0; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
static int luavgl_obj_move_to_index(lua_State *L) { |
|
|
|
|
|
|
|
lv_obj_t *obj = luavgl_to_obj(L, 1); |
|
|
|
|
|
|
|
int idx = luavgl_tointeger(L, 2); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
lv_obj_move_to_index(obj, idx); |
|
|
|
|
|
|
|
return 0; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
/**
|
|
|
|
* Remove all animations associates to this object |
|
|
|
* Remove all animations associates to this object |
|
|
|
*/ |
|
|
|
*/ |
|
|
|
static int luavgl_obj_remove_anim_all(lua_State *L) { |
|
|
|
static int luavgl_obj_remove_anim_all(lua_State *L) |
|
|
|
|
|
|
|
{ |
|
|
|
lv_obj_t *obj = luavgl_to_obj(L, 1); |
|
|
|
lv_obj_t *obj = luavgl_to_obj(L, 1); |
|
|
|
lv_anim_del(obj, NULL); |
|
|
|
lv_anim_del(obj, NULL); |
|
|
|
return 1; |
|
|
|
return 1; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
static int luavgl_obj_gc(lua_State *L) { |
|
|
|
static int luavgl_obj_gc(lua_State *L) |
|
|
|
|
|
|
|
{ |
|
|
|
if (lua_type(L, 1) != LUA_TUSERDATA) { |
|
|
|
if (lua_type(L, 1) != LUA_TUSERDATA) { |
|
|
|
/* If t = setmetatable({}, obj_meta_table), this will happen when t is
|
|
|
|
/* If t = setmetatable({}, obj_meta_table), this will happen when t is
|
|
|
|
* gc;ed. Currently all metatables for classes based on obj, that has no own |
|
|
|
* gc;ed. Currently all metatables for classes based on obj, that has no own |
|
|
@ -621,7 +705,7 @@ static int luavgl_obj_gc(lua_State *L) { |
|
|
|
return 0; |
|
|
|
return 0; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
debug("\n"); |
|
|
|
LV_LOG_INFO("enter"); |
|
|
|
|
|
|
|
|
|
|
|
luavgl_obj_t *lobj = lua_touserdata(L, 1); |
|
|
|
luavgl_obj_t *lobj = lua_touserdata(L, 1); |
|
|
|
if (lobj == NULL || lobj->obj == NULL) { |
|
|
|
if (lobj == NULL || lobj->obj == NULL) { |
|
|
@ -629,70 +713,69 @@ static int luavgl_obj_gc(lua_State *L) { |
|
|
|
return 0; |
|
|
|
return 0; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
debug("GC for obj: %p\n", lobj->obj); |
|
|
|
LV_LOG_INFO("GC for obj: %p", lobj->obj); |
|
|
|
luavgl_obj_delete(L); |
|
|
|
luavgl_obj_delete(L); |
|
|
|
|
|
|
|
|
|
|
|
return 0; |
|
|
|
return 0; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
static const luaL_Reg luavgl_obj_methods[] = { |
|
|
|
static const luaL_Reg luavgl_obj_methods[] = { |
|
|
|
{"set", luavgl_obj_set}, |
|
|
|
{"set", luavgl_obj_set }, |
|
|
|
{"set_style", luavgl_obj_set_style}, |
|
|
|
{"set_style", luavgl_obj_set_style }, |
|
|
|
{"align_to", luavgl_obj_align_to}, |
|
|
|
{"align_to", luavgl_obj_align_to }, |
|
|
|
{"delete", luavgl_obj_delete}, |
|
|
|
{"delete", luavgl_obj_delete }, |
|
|
|
{"clean", luavgl_obj_clean}, |
|
|
|
{"clean", luavgl_obj_clean }, |
|
|
|
|
|
|
|
|
|
|
|
/* misc. functions */ |
|
|
|
/* misc. functions */ |
|
|
|
{"parent", luavgl_obj_set_get_parent}, |
|
|
|
{"parent", luavgl_obj_set_get_parent }, |
|
|
|
{"set_parent", luavgl_obj_set_parent}, |
|
|
|
{"set_parent", luavgl_obj_set_parent }, |
|
|
|
{"get_parent", luavgl_obj_get_parent}, |
|
|
|
{"get_parent", luavgl_obj_get_parent }, |
|
|
|
{"get_child", luavgl_obj_get_child}, |
|
|
|
{"get_child", luavgl_obj_get_child }, |
|
|
|
{"get_child_cnt", luavgl_obj_get_child_cnt}, |
|
|
|
{"get_child_cnt", luavgl_obj_get_child_cnt }, |
|
|
|
{"get_screen", luavgl_obj_get_screen}, |
|
|
|
{"get_screen", luavgl_obj_get_screen }, |
|
|
|
{"get_state", luavgl_obj_get_state}, |
|
|
|
{"get_state", luavgl_obj_get_state }, |
|
|
|
{"scroll_to", luavgl_obj_scroll_to}, |
|
|
|
{"scroll_to", luavgl_obj_scroll_to }, |
|
|
|
{"is_scrolling", luavgl_obj_is_scrolling}, |
|
|
|
{"is_scrolling", luavgl_obj_is_scrolling }, |
|
|
|
{"is_visible", luavgl_obj_is_visible}, |
|
|
|
{"is_visible", luavgl_obj_is_visible }, |
|
|
|
{"add_flag", luavgl_obj_add_flag}, |
|
|
|
{"add_flag", luavgl_obj_add_flag }, |
|
|
|
{"clear_flag", luavgl_obj_clear_flag}, |
|
|
|
{"clear_flag", luavgl_obj_clear_flag }, |
|
|
|
{"add_state", luavgl_obj_add_state}, |
|
|
|
{"add_state", luavgl_obj_add_state }, |
|
|
|
{"clear_state", luavgl_obj_clear_state}, |
|
|
|
{"clear_state", luavgl_obj_clear_state }, |
|
|
|
{"add_style", luavgl_obj_add_style}, |
|
|
|
{"add_style", luavgl_obj_add_style }, |
|
|
|
{"remove_style", luavgl_obj_remove_style}, |
|
|
|
{"remove_style", luavgl_obj_remove_style }, |
|
|
|
{"remove_style_all", luavgl_obj_remove_style_all}, |
|
|
|
{"remove_style_all", luavgl_obj_remove_style_all }, |
|
|
|
{"scroll_by", luavgl_obj_scroll_by}, |
|
|
|
{"scroll_by", luavgl_obj_scroll_by }, |
|
|
|
{"scroll_by_bounded", luavgl_obj_scroll_by_bounded}, |
|
|
|
{"scroll_by_bounded", luavgl_obj_scroll_by_bounded }, |
|
|
|
{"scroll_to_view", luavgl_obj_scroll_to_view}, |
|
|
|
{"scroll_to_view", luavgl_obj_scroll_to_view }, |
|
|
|
{"scroll_to_view_recursive", luavgl_obj_scroll_to_view_recursive}, |
|
|
|
{"scroll_to_view_recursive", luavgl_obj_scroll_to_view_recursive}, |
|
|
|
{"scroll_by_raw", luavgl_obj_scroll_by_raw}, |
|
|
|
{"scroll_by_raw", luavgl_obj_scroll_by_raw }, |
|
|
|
{"scrollbar_invalidate", luavgl_obj_scrollbar_invalidate}, |
|
|
|
{"scrollbar_invalidate", luavgl_obj_scrollbar_invalidate }, |
|
|
|
{"readjust_scroll", luavgl_obj_readjust_scroll}, |
|
|
|
{"readjust_scroll", luavgl_obj_readjust_scroll }, |
|
|
|
{"is_editable", luavgl_obj_is_editable}, |
|
|
|
{"is_editable", luavgl_obj_is_editable }, |
|
|
|
{"is_group_def", luavgl_obj_is_group_def}, |
|
|
|
{"is_group_def", luavgl_obj_is_group_def }, |
|
|
|
{"is_layout_positioned", luavgl_obj_is_layout_positioned}, |
|
|
|
{"is_layout_positioned", luavgl_obj_is_layout_positioned }, |
|
|
|
{"mark_layout_as_dirty", luavgl_obj_mark_layout_as_dirty}, |
|
|
|
{"mark_layout_as_dirty", luavgl_obj_mark_layout_as_dirty }, |
|
|
|
{"center", luavgl_obj_center}, |
|
|
|
{"center", luavgl_obj_center }, |
|
|
|
{"invalidate", luavgl_obj_invalidate}, |
|
|
|
{"invalidate", luavgl_obj_invalidate }, |
|
|
|
{"set_flex_flow", luavgl_obj_set_flex_flow}, |
|
|
|
{"set_flex_flow", luavgl_obj_set_flex_flow }, |
|
|
|
{"set_flex_align", luavgl_obj_set_flex_align}, |
|
|
|
{"set_flex_align", luavgl_obj_set_flex_align }, |
|
|
|
{"set_flex_grow", luavgl_obj_set_flex_grow}, |
|
|
|
{"set_flex_grow", luavgl_obj_set_flex_grow }, |
|
|
|
{"indev_search", luavgl_obj_indev_search}, |
|
|
|
{"indev_search", luavgl_obj_indev_search }, |
|
|
|
{"get_coords", luavgl_obj_get_coords}, |
|
|
|
{"get_coords", luavgl_obj_get_coords }, |
|
|
|
{"get_pos", luavgl_obj_get_pos}, |
|
|
|
{"get_pos", luavgl_obj_get_pos }, |
|
|
|
{"focus", luavgl_obj_focus}, |
|
|
|
|
|
|
|
{"move_to_index", luavgl_obj_move_to_index}, |
|
|
|
{"onevent", luavgl_obj_on_event }, |
|
|
|
|
|
|
|
{"onPressed", luavgl_obj_on_pressed }, |
|
|
|
{"onevent", luavgl_obj_on_event}, |
|
|
|
{"onClicked", luavgl_obj_on_clicked }, |
|
|
|
{"onPressed", luavgl_obj_on_pressed}, |
|
|
|
{"onShortClicked", luavgl_obj_on_short_clicked }, |
|
|
|
{"onClicked", luavgl_obj_on_clicked}, |
|
|
|
{"anim", luavgl_anim_create }, |
|
|
|
{"onShortClicked", luavgl_obj_on_short_clicked}, |
|
|
|
{"Anim", luavgl_anim_create }, |
|
|
|
{"anim", luavgl_anim_create}, |
|
|
|
{"remove_all_anim", luavgl_obj_remove_anim_all }, /* remove all */ |
|
|
|
{"Anim", luavgl_anim_create}, |
|
|
|
{NULL, NULL }, |
|
|
|
{"remove_all_anim", luavgl_obj_remove_anim_all}, /* remove all */ |
|
|
|
|
|
|
|
{NULL, NULL}, |
|
|
|
|
|
|
|
}; |
|
|
|
}; |
|
|
|
|
|
|
|
|
|
|
|
static void luavgl_obj_init(lua_State *L) { |
|
|
|
static void luavgl_obj_init(lua_State *L) |
|
|
|
|
|
|
|
{ |
|
|
|
/* base lv_obj */ |
|
|
|
/* base lv_obj */ |
|
|
|
luavgl_obj_newmetatable(L, &lv_obj_class, "lv_obj", luavgl_obj_methods); |
|
|
|
luavgl_obj_newmetatable(L, &lv_obj_class, "lv_obj", luavgl_obj_methods); |
|
|
|
lua_pushcfunction(L, luavgl_obj_gc); |
|
|
|
lua_pushcfunction(L, luavgl_obj_gc); |
|
|
@ -718,16 +801,16 @@ static void luavgl_obj_init(lua_State *L) { |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
static const luavgl_value_setter_t obj_property_table[] = { |
|
|
|
static const luavgl_value_setter_t obj_property_table[] = { |
|
|
|
{"x", 0, {.setter = (setter_int_t)lv_obj_set_x}}, |
|
|
|
{"x", 0, {.setter = (setter_int_t)lv_obj_set_x} }, |
|
|
|
{"y", 0, {.setter = (setter_int_t)lv_obj_set_y}}, |
|
|
|
{"y", 0, {.setter = (setter_int_t)lv_obj_set_y} }, |
|
|
|
{"w", 0, {.setter = (setter_int_t)lv_obj_set_width}}, |
|
|
|
{"w", 0, {.setter = (setter_int_t)lv_obj_set_width} }, |
|
|
|
{"h", 0, {.setter = (setter_int_t)lv_obj_set_height}}, |
|
|
|
{"h", 0, {.setter = (setter_int_t)lv_obj_set_height} }, |
|
|
|
{"align", SETTER_TYPE_STACK, {.setter_stack = _lv_obj_set_align}}, |
|
|
|
{"align", SETTER_TYPE_STACK, {.setter_stack = _lv_obj_set_align} }, |
|
|
|
|
|
|
|
|
|
|
|
{"scrollbar_mode", 0, {.setter = (setter_int_t)lv_obj_set_scrollbar_mode}}, |
|
|
|
{"scrollbar_mode", 0, {.setter = (setter_int_t)lv_obj_set_scrollbar_mode}}, |
|
|
|
{"scroll_dir", 0, {.setter = (setter_int_t)lv_obj_set_scroll_dir}}, |
|
|
|
{"scroll_dir", 0, {.setter = (setter_int_t)lv_obj_set_scroll_dir} }, |
|
|
|
{"scroll_snap_x", 0, {.setter = (setter_int_t)lv_obj_set_scroll_snap_x}}, |
|
|
|
{"scroll_snap_x", 0, {.setter = (setter_int_t)lv_obj_set_scroll_snap_x} }, |
|
|
|
{"scroll_snap_y", 0, {.setter = (setter_int_t)lv_obj_set_scroll_snap_y}}, |
|
|
|
{"scroll_snap_y", 0, {.setter = (setter_int_t)lv_obj_set_scroll_snap_y} }, |
|
|
|
}; |
|
|
|
}; |
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
/**
|
|
|
@ -741,8 +824,17 @@ static const luavgl_value_setter_t obj_property_table[] = { |
|
|
|
* stack[-2]: key(property name) |
|
|
|
* stack[-2]: key(property name) |
|
|
|
* stack[-1]: value(could be any lua data) |
|
|
|
* stack[-1]: value(could be any lua data) |
|
|
|
*/ |
|
|
|
*/ |
|
|
|
LUALIB_API int luavgl_obj_set_property_kv(lua_State *L, void *data) { |
|
|
|
LUALIB_API int luavgl_obj_set_property_kv(lua_State *L, void *data) |
|
|
|
|
|
|
|
{ |
|
|
|
lv_obj_t *obj = data; |
|
|
|
lv_obj_t *obj = data; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/* Check for integer key with userdata as value */ |
|
|
|
|
|
|
|
if (lua_type(L, -2) == LUA_TNUMBER && lua_type(L, -1) == LUA_TUSERDATA) { |
|
|
|
|
|
|
|
lv_obj_t *child = luavgl_to_obj(L, -1); |
|
|
|
|
|
|
|
lv_obj_set_parent(child, obj); |
|
|
|
|
|
|
|
return 0; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
int ret = luavgl_set_property(L, obj, obj_property_table); |
|
|
|
int ret = luavgl_set_property(L, obj, obj_property_table); |
|
|
|
|
|
|
|
|
|
|
|
if (ret == 0) |
|
|
|
if (ret == 0) |
|
|
@ -753,7 +845,8 @@ LUALIB_API int luavgl_obj_set_property_kv(lua_State *L, void *data) { |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
LUALIB_API int luavgl_obj_create_helper(lua_State *L, |
|
|
|
LUALIB_API int luavgl_obj_create_helper(lua_State *L, |
|
|
|
lv_obj_t *(*create)(lv_obj_t *parent)) { |
|
|
|
lv_obj_t *(*create)(lv_obj_t *parent)) |
|
|
|
|
|
|
|
{ |
|
|
|
luavgl_ctx_t *ctx = luavgl_context(L); |
|
|
|
luavgl_ctx_t *ctx = luavgl_context(L); |
|
|
|
lv_obj_t *parent; |
|
|
|
lv_obj_t *parent; |
|
|
|
|
|
|
|
|
|
|
@ -765,7 +858,7 @@ LUALIB_API int luavgl_obj_create_helper(lua_State *L, |
|
|
|
lua_remove(L, 1); |
|
|
|
lua_remove(L, 1); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
debug("create obj on: %p\n", parent); |
|
|
|
LV_LOG_INFO("create obj on: %p", parent); |
|
|
|
|
|
|
|
|
|
|
|
lv_obj_t *obj = create(parent); |
|
|
|
lv_obj_t *obj = create(parent); |
|
|
|
luavgl_add_lobj(L, obj)->lua_created = true; |
|
|
|
luavgl_add_lobj(L, obj)->lua_created = true; |
|
|
@ -790,7 +883,7 @@ LUALIB_API int luavgl_obj_create_helper(lua_State *L, |
|
|
|
lua_rawget(L, LUA_REGISTRYINDEX); |
|
|
|
lua_rawget(L, LUA_REGISTRYINDEX); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
debug("create obj: %p\n", obj); |
|
|
|
LV_LOG_INFO("create obj: %p", obj); |
|
|
|
return 1; |
|
|
|
return 1; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
@ -799,7 +892,8 @@ LUALIB_API int luavgl_obj_create_helper(lua_State *L, |
|
|
|
* If no metatable not found for this obj class, then lv_obj_class metatable is |
|
|
|
* If no metatable not found for this obj class, then lv_obj_class metatable is |
|
|
|
* used |
|
|
|
* used |
|
|
|
*/ |
|
|
|
*/ |
|
|
|
LUALIB_API luavgl_obj_t *luavgl_add_lobj(lua_State *L, lv_obj_t *obj) { |
|
|
|
LUALIB_API luavgl_obj_t *luavgl_add_lobj(lua_State *L, lv_obj_t *obj) |
|
|
|
|
|
|
|
{ |
|
|
|
luavgl_obj_t *lobj; |
|
|
|
luavgl_obj_t *lobj; |
|
|
|
|
|
|
|
|
|
|
|
/* In rare case, obj may be deleted but not gc'ed in lua, and lvgl quickly
|
|
|
|
/* In rare case, obj may be deleted but not gc'ed in lua, and lvgl quickly
|
|
|
@ -817,16 +911,18 @@ LUALIB_API luavgl_obj_t *luavgl_add_lobj(lua_State *L, lv_obj_t *obj) { |
|
|
|
|
|
|
|
|
|
|
|
if (luavgl_obj_getmetatable(L, obj->class_p) == LUA_TNIL) { |
|
|
|
if (luavgl_obj_getmetatable(L, obj->class_p) == LUA_TNIL) { |
|
|
|
lua_pop(L, 1); |
|
|
|
lua_pop(L, 1); |
|
|
|
debug("cannot find metatable for class: %p\n", obj->class_p); |
|
|
|
LV_LOG_ERROR("cannot find metatable for class: %p", obj->class_p); |
|
|
|
/* use base obj metatable instead */ |
|
|
|
/* use base obj metatable instead */ |
|
|
|
luavgl_obj_getmetatable(L, &lv_obj_class); |
|
|
|
luavgl_obj_getmetatable(L, &lv_obj_class); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
lua_setmetatable(L, -2); |
|
|
|
lua_setmetatable(L, -2); |
|
|
|
|
|
|
|
|
|
|
|
memset(lobj, 0, sizeof(*lobj)); |
|
|
|
lv_memset(lobj, 0, sizeof(*lobj)); |
|
|
|
luavgl_obj_event_init(lobj); |
|
|
|
|
|
|
|
lobj->obj = obj; |
|
|
|
lobj->obj = obj; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/* Init event array to store events added from lua. */ |
|
|
|
|
|
|
|
lv_array_init(&lobj->events, 0, sizeof(struct event_callback_s *)); |
|
|
|
lv_obj_add_event_cb(obj, obj_delete_cb, LV_EVENT_DELETE, L); |
|
|
|
lv_obj_add_event_cb(obj, obj_delete_cb, LV_EVENT_DELETE, L); |
|
|
|
|
|
|
|
|
|
|
|
/* registry[obj] = lobj */ |
|
|
|
/* registry[obj] = lobj */ |
|
|
|