You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
268 lines
7.0 KiB
268 lines
7.0 KiB
#pragma once
|
|
|
|
#include <lua.h>
|
|
#if (LUA_VERSION_NUM < 503)
|
|
#include "compat-5.3.h"
|
|
#endif
|
|
|
|
#include <lauxlib.h>
|
|
#include <lvgl.h>
|
|
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
#endif
|
|
|
|
typedef const lv_font_t *(*make_font_cb)(const char *name, int size,
|
|
int weight);
|
|
typedef void (*delete_font_cb)(lv_font_t *);
|
|
typedef int (*luavgl_pcall_t)(lua_State *L, int nargs, int nresults);
|
|
|
|
typedef struct {
|
|
lv_obj_t *root;
|
|
make_font_cb make_font;
|
|
delete_font_cb delete_font;
|
|
luavgl_pcall_t pcall;
|
|
} luavgl_ctx_t;
|
|
|
|
typedef enum {
|
|
/* type can be regarded as int */
|
|
SETTER_TYPE_INT = 0,
|
|
SETTER_TYPE_COLOR,
|
|
|
|
SETTER_TYPE_STACK, /* parameter is on stack -1 */
|
|
SETTER_TYPE_POINTER, /* parameter from lightuserdata, a pointer */
|
|
SETTER_TYPE_IMGSRC,
|
|
} setter_type_t;
|
|
|
|
typedef void (*setter_int_t)(void *, int);
|
|
typedef void (*setter_pointer_t)(void *, void *);
|
|
|
|
typedef struct {
|
|
const char *key;
|
|
setter_type_t type;
|
|
|
|
union {
|
|
void (*setter)(void *, int);
|
|
void (*setter_stack)(void *, lua_State *L);
|
|
void (*setter_pointer)(void *, void *);
|
|
};
|
|
} luavgl_value_setter_t;
|
|
|
|
typedef struct luavgl_obj_s {
|
|
lv_obj_t *obj; /* NULL means obj deleted, but not gc'ed in lua */
|
|
bool lua_created; /* this object is created from lua */
|
|
|
|
/* internally used variables */
|
|
int n_events;
|
|
struct event_callback_s *events;
|
|
} luavgl_obj_t;
|
|
|
|
#define luavgl_obj_newmetatable(L, clz, name, l) \
|
|
luavgl_obj_createmetatable(L, clz, name, l, sizeof(l) / sizeof((l)[0]) - 1);
|
|
|
|
#define luavgl_set_property(L, obj, table) \
|
|
luavgl_set_property_array(L, obj, table, sizeof(table) / sizeof(table[0]))
|
|
|
|
LUALIB_API luavgl_ctx_t *luavgl_context(lua_State *L);
|
|
|
|
/**
|
|
* @brief set the protected call used in event callback.
|
|
* this must be called before luaopen_lvgl
|
|
*/
|
|
LUALIB_API void luavgl_set_pcall(lua_State *L, luavgl_pcall_t pcall);
|
|
|
|
/**
|
|
* @brief Set luavgl root object
|
|
*/
|
|
LUALIB_API void luavgl_set_root(lua_State *L, lv_obj_t *root);
|
|
|
|
/**
|
|
* @brief Set functions to make and destroy extended fonts.
|
|
*/
|
|
LUALIB_API void luavgl_set_font_extension(lua_State *L, make_font_cb make,
|
|
delete_font_cb d);
|
|
|
|
/* on embedded device, may call lib open manually. */
|
|
LUALIB_API int luaopen_lvgl(lua_State *L);
|
|
|
|
/* object creation */
|
|
|
|
/**
|
|
* @brief Helper function to create lua lvgl object.
|
|
*
|
|
* Expected stack layout:
|
|
* [1]: parent object
|
|
* [2]: table of properties(styles)
|
|
* Return value in stack:
|
|
* [1]: userdata of created object, luavgl object.
|
|
*
|
|
* @param L
|
|
* @param create function pointer to create object
|
|
* @return items in stack for return
|
|
*/
|
|
LUALIB_API int luavgl_obj_create_helper(lua_State *L,
|
|
lv_obj_t *(*create)(lv_obj_t *parent));
|
|
|
|
/**
|
|
* @brief Add existing lvgl object to lua
|
|
*
|
|
* Return value in stack:
|
|
* [1]: luavgl object.
|
|
*
|
|
* @return pointer to luavgl object
|
|
*/
|
|
LUALIB_API luavgl_obj_t *luavgl_add_lobj(lua_State *L, lv_obj_t *obj);
|
|
|
|
/**
|
|
* @brief Get lua lvgl object on stack
|
|
*
|
|
* Return value in stack:
|
|
* [1]: luavgl object.
|
|
*
|
|
* @return pointer to luavgl object
|
|
*/
|
|
LUALIB_API luavgl_obj_t *luavgl_to_lobj(lua_State *L, int idx);
|
|
|
|
/**
|
|
* @brief Create metatable for specified object class
|
|
*
|
|
* @param L
|
|
* @param clz object class
|
|
* @param name optional name for this metatable
|
|
* @param l methods for this metatable
|
|
* @param n methods length
|
|
*
|
|
* Return value in stack:
|
|
* [1]: metatable
|
|
*
|
|
* @return 1
|
|
*/
|
|
LUALIB_API int luavgl_obj_createmetatable(lua_State *L,
|
|
const lv_obj_class_t *clz,
|
|
const char *name, const luaL_Reg *l,
|
|
int n);
|
|
|
|
/**
|
|
* @brief Get user value of userdata of lua lvgl object, create if not exists
|
|
*
|
|
* @return type of the uservalue, LUA_TTABLE
|
|
*/
|
|
LUALIB_API int luavgl_obj_getuserdatauv(lua_State *L, int idx);
|
|
|
|
|
|
/* helper to get value from stack */
|
|
|
|
/**
|
|
* @brief Get lvgl object from stack
|
|
*/
|
|
LUALIB_API lv_obj_t *luavgl_to_obj(lua_State *L, int idx);
|
|
|
|
/**
|
|
* @brief Get lvgl style from stack
|
|
*/
|
|
LUALIB_API lv_style_t *luavgl_to_style(lua_State *L, int idx);
|
|
|
|
/**
|
|
* @brief Convert value to integer
|
|
*
|
|
* Supported values are: integer, float, boolean
|
|
*/
|
|
LUALIB_API int luavgl_tointeger(lua_State *L, int idx);
|
|
|
|
/**
|
|
* @brief Convert value to lvgl color
|
|
*
|
|
* Supported color formats are:
|
|
* [1]: string representation: "#RGB" or "#RRGGBB"
|
|
* [2]: integer value: 0xaabbcc
|
|
*/
|
|
LUALIB_API lv_color_t luavgl_tocolor(lua_State *L, int idx);
|
|
|
|
/**
|
|
* @brief Convert value to lvgl image source
|
|
*
|
|
* Supported image format:
|
|
* [1]: image path string, e.g. "/resource/bg.png"
|
|
* [2]: image source lightuserdata
|
|
*/
|
|
LUALIB_API const char *luavgl_toimgsrc(lua_State *L, int idx);
|
|
|
|
/**
|
|
* @brief Helper function to iterate through table
|
|
*
|
|
* @param L
|
|
* @param index index to the table for iteration
|
|
* @param cb callback function for every key,value pair
|
|
* Stack layout when cb function made:
|
|
* [-1]: value
|
|
* [-2]: key
|
|
* Care must be taken when calling lua_tostring etc. functions which will
|
|
* change stack layout.
|
|
* @param cb_param callback parameter passed to cb function
|
|
*/
|
|
LUALIB_API void luavgl_iterate(lua_State *L, int index,
|
|
int (*cb)(lua_State *, void *), void *cb_para);
|
|
|
|
/**
|
|
* @brief Set object property with provided setter functions
|
|
*
|
|
* @param L
|
|
* @param obj lvgl object
|
|
* @param table function array
|
|
* @param len functions in array
|
|
* @return 1
|
|
*/
|
|
LUALIB_API int luavgl_set_property_array(lua_State *L, void *obj,
|
|
const luavgl_value_setter_t table[],
|
|
uint32_t len);
|
|
|
|
/**
|
|
* @brief Dummy property set function
|
|
*/
|
|
LUALIB_API void _lv_dummy_set(void *obj, lua_State *L);
|
|
|
|
/**
|
|
* @brief Set object property with key,value in stack
|
|
*/
|
|
LUALIB_API int luavgl_obj_set_property_kv(lua_State *L, void *data);
|
|
|
|
/**
|
|
* @brief Set image property with key,value in stack
|
|
*/
|
|
LUALIB_API int luavgl_img_set_property_kv(lua_State *L, void *data);
|
|
|
|
LUALIB_API int luavgl_calendar_set_property_kv(lua_State *L, void *data);
|
|
|
|
LUALIB_API int luavgl_checkbox_set_property_kv(lua_State *L, void *data);
|
|
|
|
LUALIB_API int luavgl_dropdown_set_property_kv(lua_State *L, void *data);
|
|
|
|
LUALIB_API int luavgl_keyboard_set_property_kv(lua_State *L, void *data);
|
|
|
|
LUALIB_API int luavgl_label_set_property_kv(lua_State *L, void *data);
|
|
|
|
LUALIB_API int luavgl_led_set_property_kv(lua_State *L, void *data);
|
|
|
|
LUALIB_API int luavgl_list_set_property_kv(lua_State *L, void *data);
|
|
|
|
LUALIB_API int luavgl_roller_set_property_kv(lua_State *L, void *data);
|
|
|
|
LUALIB_API int luavgl_textarea_set_property_kv(lua_State *L, void *data);
|
|
|
|
|
|
|
|
/**
|
|
* @brief Protected call
|
|
* @return negative error code or zero.
|
|
*/
|
|
LUALIB_API int luavgl_pcall(lua_State *L, int nargs, int nresult);
|
|
|
|
/**
|
|
* @brief Check if lua object is callable.
|
|
* @return true if callable, false otherwise.
|
|
*/
|
|
LUALIB_API int luavgl_is_callable(lua_State *L, int index);
|
|
|
|
#ifdef __cplusplus
|
|
} /*extern "C"*/
|
|
#endif
|
|
|