luat_lib_lvgl_struct.c 16 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530
  1. #include "luat_base.h"
  2. #include "luat_lvgl.h"
  3. #include "luat_zbuff.h"
  4. #include "lvgl.h"
  5. #define META_LV_ANIM "LV_ANIM*"
  6. #define META_LV_AREA "LV_AREA*"
  7. #define META_LV_CALENDAR_DATE_T "LV_CALENDAR_DATE_T*"
  8. #define META_LV_DRAW_RECT_DSC_T "LV_DRAW_RECT_DSC_T*"
  9. #define META_LV_DRAW_LABEL_DSC_T "LV_DRAW_LABEL_DSC_T*"
  10. #define META_LV_DRAW_IMG_DSC_T "LV_DRAW_IMG_DSC_T*"
  11. #define META_LV_IMG_DSC_T "LV_IMG_DSC_T*"
  12. #define META_LV_LINE_DSC_T "LV_LINE_DSC_T*"
  13. //---------------------------------------------
  14. #if LV_USE_ANIMATION
  15. /*
  16. 创建一个anim
  17. @api lvgl.anim_t()
  18. @return userdata anim指针
  19. @usage
  20. local anim = lvgl.anim_t()
  21. */
  22. int luat_lv_struct_anim_t(lua_State *L) {
  23. lua_newuserdata(L, sizeof(lv_anim_t));
  24. luaL_setmetatable(L, META_LV_ANIM);
  25. return 1;
  26. }
  27. int _lvgl_struct_anim_t_newindex(lua_State *L) {
  28. lv_anim_t* anim = (lv_anim_t*)lua_touserdata(L, 1);
  29. const char* key = luaL_checkstring(L, 2);
  30. if (!strcmp("start", key)) {
  31. anim->start = luaL_optinteger(L, 3, 0);
  32. }
  33. else if (!strcmp("end", key)) {
  34. anim->end = luaL_optinteger(L, 3, 0);
  35. }
  36. else if (!strcmp("current", key)) {
  37. anim->current = luaL_optinteger(L, 3, 0);
  38. }
  39. else if (!strcmp("time", key)) {
  40. anim->time = luaL_optinteger(L, 3, 0);
  41. }
  42. else if (!strcmp("act_time", key)) {
  43. anim->act_time = luaL_optinteger(L, 3, 0);
  44. }
  45. else if (!strcmp("playback_delay", key)) {
  46. anim->playback_delay = luaL_optinteger(L, 3, 0);
  47. }
  48. else if (!strcmp("playback_time", key)) {
  49. anim->playback_time = luaL_optinteger(L, 3, 0);
  50. }
  51. else if (!strcmp("repeat_delay", key)) {
  52. anim->repeat_delay = luaL_optinteger(L, 3, 0);
  53. }
  54. else if (!strcmp("repeat_cnt", key)) {
  55. anim->repeat_cnt = luaL_optinteger(L, 3, 0);
  56. }
  57. else if (!strcmp("early_apply", key)) {
  58. anim->early_apply = luaL_optinteger(L, 3, 0);
  59. }
  60. return 0;
  61. }
  62. #endif
  63. //---------------------------------------------
  64. /*
  65. 创建一个area
  66. @api lvgl.area_t()
  67. @return userdata area指针
  68. @usage
  69. local area = lvgl.area_t()
  70. */
  71. int luat_lv_struct_area_t(lua_State *L) {
  72. lua_newuserdata(L, sizeof(lv_area_t));
  73. luaL_setmetatable(L, META_LV_AREA);
  74. return 1;
  75. }
  76. int _lvgl_struct_area_t_newindex(lua_State *L) {
  77. lv_area_t* area = (lv_area_t*)lua_touserdata(L, 1);
  78. const char* key = luaL_checkstring(L, 2);
  79. if (!strcmp("x1", key)) {
  80. area->x1 = luaL_optinteger(L, 3, 0);
  81. }
  82. else if (!strcmp("x2", key)) {
  83. area->x2 = luaL_optinteger(L, 3, 0);
  84. }
  85. else if (!strcmp("y1", key)) {
  86. area->y1 = luaL_optinteger(L, 3, 0);
  87. }
  88. else if (!strcmp("y2", key)) {
  89. area->y2 = luaL_optinteger(L, 3, 0);
  90. }
  91. return 0;
  92. }
  93. //---------------------------------------------
  94. /*
  95. 创建一个calendar_date_t
  96. @api lvgl.calendar_date_t()
  97. @return userdata calendar_date_t指针
  98. @usage
  99. local today = lvgl.calendar_date_t()
  100. */
  101. int luat_lv_calendar_date_t(lua_State *L){
  102. lua_newuserdata(L, sizeof(lv_calendar_date_t));
  103. luaL_setmetatable(L, META_LV_CALENDAR_DATE_T);
  104. return 1;
  105. }
  106. int _lvgl_struct_calendar_date_t_newindex(lua_State *L) {
  107. lv_calendar_date_t* date_t = (lv_calendar_date_t*)lua_touserdata(L, 1);
  108. const char* key = luaL_checkstring(L, 2);
  109. if (!strcmp("year", key)) {
  110. date_t->year = luaL_optinteger(L, 3, 0);
  111. }
  112. else if (!strcmp("month", key)) {
  113. date_t->month = luaL_optinteger(L, 3, 0);
  114. }
  115. else if (!strcmp("day", key)) {
  116. date_t->day = luaL_optinteger(L, 3, 0);
  117. }
  118. return 0;
  119. }
  120. //---------------------------------------------
  121. /*
  122. 创建一个lv_draw_rect_dsc_t
  123. @api lvgl.draw_rect_dsc_t()
  124. @return userdata lv_draw_rect_dsc_t指针
  125. @usage
  126. local rect_dsc = lvgl.draw_rect_dsc_t()
  127. */
  128. int luat_lv_draw_rect_dsc_t(lua_State *L){
  129. lua_newuserdata(L, sizeof(lv_draw_rect_dsc_t));
  130. luaL_setmetatable(L, META_LV_DRAW_RECT_DSC_T);
  131. return 1;
  132. }
  133. int _lvgl_struct_draw_rect_dsc_t_newindex(lua_State *L) {
  134. lv_draw_rect_dsc_t* rect_dsc = (lv_draw_rect_dsc_t*)lua_touserdata(L, 1);
  135. const char* key = luaL_checkstring(L, 2);
  136. if (!strcmp("radius", key)) {
  137. rect_dsc->radius = luaL_optinteger(L, 3, 0);
  138. }
  139. /*Background*/
  140. else if (!strcmp("bg_color", key)) {
  141. rect_dsc->bg_color.full = luaL_optinteger(L, 3, 0);
  142. }
  143. else if (!strcmp("bg_grad_color", key)) {
  144. rect_dsc->bg_grad_color.full = luaL_optinteger(L, 3, 0);
  145. }
  146. else if (!strcmp("bg_grad_dir", key)) {
  147. rect_dsc->bg_grad_dir = luaL_optinteger(L, 3, 0);
  148. }
  149. else if (!strcmp("bg_main_color_stop", key)) {
  150. rect_dsc->bg_main_color_stop = luaL_optinteger(L, 3, 0);
  151. }
  152. else if (!strcmp("bg_grad_color_stop", key)) {
  153. rect_dsc->bg_grad_color_stop = luaL_optinteger(L, 3, 0);
  154. }
  155. else if (!strcmp("bg_opa", key)) {
  156. rect_dsc->bg_opa = luaL_optinteger(L, 3, 0);
  157. }
  158. else if (!strcmp("bg_blend_mode", key)) {
  159. rect_dsc->bg_blend_mode = luaL_optinteger(L, 3, 0);
  160. }
  161. /*Border*/
  162. else if (!strcmp("border_color", key)) {
  163. rect_dsc->border_color.full = luaL_optinteger(L, 3, 0);
  164. }
  165. else if (!strcmp("border_width", key)) {
  166. rect_dsc->border_width = luaL_optinteger(L, 3, 0);
  167. }
  168. else if (!strcmp("border_side", key)) {
  169. rect_dsc->border_side = luaL_optinteger(L, 3, 0);
  170. }
  171. else if (!strcmp("border_opa", key)) {
  172. rect_dsc->border_opa = luaL_optinteger(L, 3, 0);
  173. }
  174. else if (!strcmp("border_blend_mode", key)) {
  175. rect_dsc->border_blend_mode = luaL_optinteger(L, 3, 0);
  176. }
  177. else if (!strcmp("border_post", key)) {
  178. rect_dsc->border_post = luaL_optinteger(L, 3, 1);
  179. }
  180. /*Outline*/
  181. else if (!strcmp("outline_color", key)) {
  182. rect_dsc->outline_color.full = luaL_optinteger(L, 3, 0);
  183. }
  184. else if (!strcmp("outline_width", key)) {
  185. rect_dsc->outline_width = luaL_optinteger(L, 3, 0);
  186. }
  187. else if (!strcmp("outline_pad", key)) {
  188. rect_dsc->outline_pad = luaL_optinteger(L, 3, 0);
  189. }
  190. else if (!strcmp("outline_opa", key)) {
  191. rect_dsc->outline_opa = luaL_optinteger(L, 3, 0);
  192. }
  193. else if (!strcmp("outline_blend_mode", key)) {
  194. rect_dsc->outline_blend_mode = luaL_optinteger(L, 3, 0);
  195. }
  196. /*Shadow*/
  197. else if (!strcmp("shadow_color", key)) {
  198. rect_dsc->shadow_color.full = luaL_optinteger(L, 3, 0);
  199. }
  200. else if (!strcmp("shadow_width", key)) {
  201. rect_dsc->shadow_width = luaL_optinteger(L, 3, 0);
  202. }
  203. else if (!strcmp("shadow_ofs_x", key)) {
  204. rect_dsc->shadow_ofs_x = luaL_optinteger(L, 3, 0);
  205. }
  206. else if (!strcmp("shadow_ofs_y", key)) {
  207. rect_dsc->shadow_ofs_y = luaL_optinteger(L, 3, 0);
  208. }
  209. else if (!strcmp("shadow_spread", key)) {
  210. rect_dsc->shadow_spread = luaL_optinteger(L, 3, 0);
  211. }
  212. else if (!strcmp("shadow_opa", key)) {
  213. rect_dsc->shadow_opa = luaL_optinteger(L, 3, 0);
  214. }
  215. else if (!strcmp("shadow_blend_mode", key)) {
  216. rect_dsc->shadow_blend_mode = luaL_optinteger(L, 3, 0);
  217. }
  218. /*Pattern*/
  219. else if (!strcmp("pattern_image", key)) {
  220. rect_dsc->pattern_image = luaL_optstring(L, 3, NULL);
  221. }
  222. else if (!strcmp("pattern_font", key)) {
  223. rect_dsc->pattern_font = luaL_optstring(L, 3, NULL);
  224. }
  225. else if (!strcmp("pattern_recolor", key)) {
  226. rect_dsc->pattern_recolor.full = luaL_optinteger(L, 3, 0);
  227. }
  228. else if (!strcmp("pattern_opa", key)) {
  229. rect_dsc->pattern_opa = luaL_optinteger(L, 3, 0);
  230. }
  231. else if (!strcmp("pattern_recolor_opa", key)) {
  232. rect_dsc->pattern_recolor_opa = luaL_optinteger(L, 3, 0);
  233. }
  234. else if (!strcmp("pattern_repeat", key)) {
  235. rect_dsc->pattern_repeat = luaL_optinteger(L, 3, 1);
  236. }
  237. else if (!strcmp("pattern_blend_mode", key)) {
  238. rect_dsc->pattern_blend_mode = luaL_optinteger(L, 3, 0);
  239. }
  240. /*Value*/
  241. else if (!strcmp("value_str", key)) {
  242. rect_dsc->value_str = luaL_optstring(L, 3, NULL);
  243. }
  244. else if (!strcmp("value_font", key)) {
  245. rect_dsc->value_font = luaL_optstring(L, 3, NULL);
  246. }
  247. else if (!strcmp("value_opa", key)) {
  248. rect_dsc->value_opa = luaL_optinteger(L, 3, 0);
  249. }
  250. else if (!strcmp("value_color", key)) {
  251. rect_dsc->value_color.full = luaL_optinteger(L, 3, 0);
  252. }
  253. else if (!strcmp("value_ofs_x", key)) {
  254. rect_dsc->value_ofs_x = luaL_optinteger(L, 3, 0);
  255. }
  256. else if (!strcmp("value_ofs_y", key)) {
  257. rect_dsc->value_ofs_y = luaL_optinteger(L, 3, 0);
  258. }
  259. else if (!strcmp("value_letter_space", key)) {
  260. rect_dsc->value_letter_space = luaL_optinteger(L, 3, 0);
  261. }
  262. else if (!strcmp("value_line_space", key)) {
  263. rect_dsc->value_line_space = luaL_optinteger(L, 3, 0);
  264. }
  265. else if (!strcmp("value_align", key)) {
  266. rect_dsc->value_align = luaL_optinteger(L, 3, 0);
  267. }
  268. else if (!strcmp("value_blend_mode", key)) {
  269. rect_dsc->value_blend_mode = luaL_optinteger(L, 3, 0);
  270. }
  271. return 0;
  272. }
  273. //---------------------------------------------
  274. /*
  275. 创建一个lv_draw_line_dsc_t
  276. @api lvgl.draw_line_dsc_t()
  277. @return userdata lv_draw_line_dsc_t指针
  278. @usage
  279. local rect_dsc = lvgl.draw_line_dsc_t()
  280. */
  281. int luat_lv_draw_line_dsc_t(lua_State *L){
  282. lua_newuserdata(L, sizeof(lv_draw_line_dsc_t));
  283. luaL_setmetatable(L, META_LV_LINE_DSC_T);
  284. return 1;
  285. }
  286. int _lvgl_struct_draw_line_dsc_t_newindex(lua_State *L) {
  287. lv_draw_line_dsc_t* line_dsc = (lv_draw_line_dsc_t*)lua_touserdata(L, 1);
  288. const char* key = luaL_checkstring(L, 2);
  289. if (!strcmp("color", key)) {
  290. line_dsc->color.full = luaL_optinteger(L, 3, 0);
  291. }
  292. else if (!strcmp("width", key)) {
  293. line_dsc->width = luaL_optinteger(L, 3, 0);
  294. }
  295. else if (!strcmp("dash_width", key)) {
  296. line_dsc->dash_width = luaL_optinteger(L, 3, 0);
  297. }
  298. else if (!strcmp("dash_gap", key)) {
  299. line_dsc->dash_gap = luaL_optinteger(L, 3, 0);
  300. }
  301. else if (!strcmp("opa", key)) {
  302. line_dsc->opa = luaL_optinteger(L, 3, 0);
  303. }
  304. else if (!strcmp("blend_mode", key)) {
  305. line_dsc->blend_mode = luaL_optinteger(L, 3, 0);
  306. }
  307. else if (!strcmp("round_start", key)) {
  308. line_dsc->round_start = luaL_optinteger(L, 3, 0);
  309. }
  310. else if (!strcmp("round_end", key)) {
  311. line_dsc->round_end = luaL_optinteger(L, 3, 0);
  312. }
  313. else if (!strcmp("raw_end", key)) {
  314. line_dsc->raw_end = luaL_optinteger(L, 3, 0);
  315. }
  316. return 0;
  317. }
  318. //---------------------------------------------
  319. /*
  320. 创建一个lv_draw_label_dsc_t
  321. @api lvgl.draw_label_dsc_t()
  322. @return userdata lv_draw_label_dsc_t指针
  323. @usage
  324. local rect_dsc = lvgl.draw_label_dsc_t()
  325. */
  326. int luat_lv_draw_label_dsc_t(lua_State *L){
  327. lua_newuserdata(L, sizeof(lv_draw_label_dsc_t));
  328. luaL_setmetatable(L, META_LV_DRAW_LABEL_DSC_T);
  329. return 1;
  330. }
  331. int _lvgl_struct_draw_label_dsc_t_newindex(lua_State *L) {
  332. lv_draw_label_dsc_t* label_dsc = (lv_draw_label_dsc_t*)lua_touserdata(L, 1);
  333. const char* key = luaL_checkstring(L, 2);
  334. if (!strcmp("color", key)) {
  335. label_dsc->color.full = luaL_optinteger(L, 3, 0);
  336. }
  337. else if (!strcmp("sel_color", key)) {
  338. label_dsc->sel_color.full = luaL_optinteger(L, 3, 0);
  339. }
  340. else if (!strcmp("sel_bg_color", key)) {
  341. label_dsc->sel_bg_color.full = luaL_optinteger(L, 3, 0);
  342. }
  343. else if (!strcmp("font", key)) {
  344. label_dsc->font = luaL_optstring(L, 3, NULL);
  345. }
  346. else if (!strcmp("opa", key)) {
  347. label_dsc->opa = luaL_optinteger(L, 3, 0);
  348. }
  349. else if (!strcmp("line_space", key)) {
  350. label_dsc->line_space = luaL_optinteger(L, 3, 0);
  351. }
  352. else if (!strcmp("letter_space", key)) {
  353. label_dsc->letter_space = luaL_optinteger(L, 3, 0);
  354. }
  355. else if (!strcmp("sel_start", key)) {
  356. label_dsc->sel_start = luaL_optinteger(L, 3, 0);
  357. }
  358. else if (!strcmp("sel_end", key)) {
  359. label_dsc->sel_end = luaL_optinteger(L, 3, 0);
  360. }
  361. else if (!strcmp("ofs_x", key)) {
  362. label_dsc->ofs_x = luaL_optinteger(L, 3, 0);
  363. }
  364. else if (!strcmp("ofs_y", key)) {
  365. label_dsc->ofs_y = luaL_optinteger(L, 3, 0);
  366. }
  367. else if (!strcmp("bidi_dir", key)) {
  368. label_dsc->bidi_dir = luaL_optinteger(L, 3, 0);
  369. }
  370. else if (!strcmp("flag", key)) {
  371. label_dsc->flag = luaL_optinteger(L, 3, 0);
  372. }
  373. else if (!strcmp("decor", key)) {
  374. label_dsc->decor = luaL_optinteger(L, 3, 0);
  375. }
  376. else if (!strcmp("blend_mode", key)) {
  377. label_dsc->blend_mode = luaL_optinteger(L, 3, 0);
  378. }
  379. return 0;
  380. }
  381. //---------------------------------------------
  382. /*
  383. 创建一个lv_draw_img_dsc_t
  384. @api lvgl.draw_img_dsc_t()
  385. @return userdata lv_draw_img_dsc_t指针
  386. @usage
  387. local draw_img_dsc_t = lvgl.draw_img_dsc_t()
  388. */
  389. int luat_lv_draw_img_dsc_t(lua_State *L){
  390. lua_newuserdata(L, sizeof(lv_draw_img_dsc_t));
  391. luaL_setmetatable(L, META_LV_DRAW_IMG_DSC_T);
  392. return 1;
  393. }
  394. int _lvgl_struct_draw_img_dsc_t_newindex(lua_State *L) {
  395. lv_draw_img_dsc_t* draw_img_dsc_t = (lv_draw_img_dsc_t*)lua_touserdata(L, 1);
  396. const char* key = luaL_checkstring(L, 2);
  397. if (!strcmp("opa", key)) {
  398. draw_img_dsc_t->opa = luaL_optinteger(L, 3, 0);
  399. }
  400. else if (!strcmp("angle", key)) {
  401. draw_img_dsc_t->angle = luaL_optinteger(L, 3, 0);
  402. }
  403. // else if (!strcmp("pivot", key)) {
  404. // img_dsc_t->pivot = (lv_point_t)luaL_optinteger(L, 3, 0);
  405. // }
  406. else if (!strcmp("zoom", key)) {
  407. draw_img_dsc_t->zoom = luaL_optinteger(L, 3, 0);
  408. }
  409. else if (!strcmp("recolor", key)) {
  410. draw_img_dsc_t->recolor.full = luaL_optinteger(L, 3, 0);
  411. }
  412. else if (!strcmp("blend_mode", key)) {
  413. draw_img_dsc_t->blend_mode = luaL_optinteger(L, 3, 0);
  414. }
  415. else if (!strcmp("antialias", key)) {
  416. draw_img_dsc_t->antialias = luaL_optinteger(L, 3, 1);
  417. }
  418. return 0;
  419. }
  420. //---------------------------------------------
  421. /*
  422. 创建一个lv_img_dsc_t
  423. @api lvgl.draw_img_dsc_t()
  424. @return userdata lv_img_dsc_t指针
  425. @usage
  426. local img_dsc_t = lvgl.img_dsc_t()
  427. */
  428. int luat_lv_img_dsc_t(lua_State *L){
  429. lua_newuserdata(L, sizeof(lv_img_dsc_t));
  430. luaL_setmetatable(L, META_LV_IMG_DSC_T);
  431. return 1;
  432. }
  433. int _lvgl_struct_img_dsc_t_newindex(lua_State *L) {
  434. lv_img_dsc_t* img_dsc_t = (lv_img_dsc_t*)lua_touserdata(L, 1);
  435. const char* key = luaL_checkstring(L, 2);
  436. if (!strcmp("header", key)) {
  437. // img_dsc_t->header = luaL_optinteger(L, 3, 0);
  438. }
  439. else if (!strcmp("data_size", key)) {
  440. img_dsc_t->data_size = luaL_optinteger(L, 3, 0);
  441. }
  442. else if (!strcmp("data", key)) {
  443. luat_zbuff_t* cbuff = (luat_zbuff_t *)luaL_checkudata(L, 3, "ZBUFF*");
  444. img_dsc_t->data = cbuff->addr;
  445. }
  446. else if (!strcmp("header_cf", key)) {
  447. img_dsc_t->header.cf = luaL_optinteger(L, 3, 5);
  448. }
  449. else if (!strcmp("header_w", key)) {
  450. img_dsc_t->header.w = luaL_optinteger(L, 3, 11);
  451. }
  452. else if (!strcmp("header_h", key)) {
  453. img_dsc_t->header.h = luaL_optinteger(L, 3, 11);
  454. }
  455. return 0;
  456. }
  457. //--------------------------------------------
  458. void luat_lvgl_struct_init(lua_State *L) {
  459. // lv_anim*
  460. #if LV_USE_ANIMATION
  461. luaL_newmetatable(L, META_LV_ANIM);
  462. lua_pushcfunction(L, _lvgl_struct_anim_t_newindex);
  463. lua_setfield( L, -2, "__newindex" );
  464. lua_pop(L, 1);
  465. #endif
  466. // lv_area
  467. luaL_newmetatable(L, META_LV_AREA);
  468. lua_pushcfunction(L, _lvgl_struct_area_t_newindex);
  469. lua_setfield( L, -2, "__newindex" );
  470. lua_pop(L, 1);
  471. // lv_calendar_date_t
  472. luaL_newmetatable(L, META_LV_CALENDAR_DATE_T);
  473. lua_pushcfunction(L, _lvgl_struct_calendar_date_t_newindex);
  474. lua_setfield( L, -2, "__newindex" );
  475. lua_pop(L, 1);
  476. // lv_draw_rect_dsc_t
  477. luaL_newmetatable(L, META_LV_DRAW_RECT_DSC_T);
  478. lua_pushcfunction(L, _lvgl_struct_draw_rect_dsc_t_newindex);
  479. lua_setfield( L, -2, "__newindex" );
  480. lua_pop(L, 1);
  481. // draw_label_dsc_t
  482. luaL_newmetatable(L, META_LV_DRAW_LABEL_DSC_T);
  483. lua_pushcfunction(L, _lvgl_struct_draw_label_dsc_t_newindex);
  484. lua_setfield( L, -2, "__newindex" );
  485. lua_pop(L, 1);
  486. // lv_draw_img_dsc_t
  487. luaL_newmetatable(L, META_LV_DRAW_IMG_DSC_T);
  488. lua_pushcfunction(L, _lvgl_struct_draw_img_dsc_t_newindex);
  489. lua_setfield( L, -2, "__newindex" );
  490. lua_pop(L, 1);
  491. // lv_img_dsc_t
  492. luaL_newmetatable(L, META_LV_IMG_DSC_T);
  493. lua_pushcfunction(L, _lvgl_struct_img_dsc_t_newindex);
  494. lua_setfield( L, -2, "__newindex" );
  495. lua_pop(L, 1);
  496. luaL_newmetatable(L, META_LV_LINE_DSC_T);
  497. lua_pushcfunction(L, _lvgl_struct_draw_line_dsc_t_newindex);
  498. lua_setfield( L, -2, "__newindex" );
  499. lua_pop(L, 1);
  500. }