luat_lib_lvgl_anim.c 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116
  1. /*
  2. @module lvgl
  3. @summary LVGL图像库
  4. @version 1.0
  5. @date 2021.06.01
  6. @demo lvgl
  7. @tag LUAT_USE_LVGL
  8. */
  9. #include "luat_base.h"
  10. #include "luat_lvgl.h"
  11. #include "lvgl.h"
  12. #include "luat_mem.h"
  13. #if LV_USE_ANIMATION
  14. /*
  15. 创建并初始化一个anim
  16. @api lvgl.anim_create()
  17. @return userdata anim指针
  18. @usage
  19. local anim = lvgl.anim_create()
  20. */
  21. int luat_lv_anim_create(lua_State *L) {
  22. lv_anim_t* anim = (lv_anim_t*)luat_heap_malloc(sizeof(lv_anim_t));
  23. lv_anim_init(anim);
  24. lua_pushlightuserdata(L, anim);
  25. return 1;
  26. }
  27. /*
  28. 释放一个anim
  29. @api lvgl.anim_free(anim)
  30. @usage
  31. local lvgl.anim_free(anim)
  32. */
  33. int luat_lv_anim_free(lua_State *L) {
  34. lv_anim_t* anim = (lv_anim_t*)lua_touserdata(L, 1);
  35. if (anim != NULL) {
  36. luat_heap_free(anim);
  37. }
  38. return 0;
  39. }
  40. /*
  41. 创建一个lv_anim_path_t
  42. @api lvgl.anim_path_t()
  43. @return userdata lv_anim_path_t指针
  44. @usage
  45. local anim_path_t = lvgl.anim_path_t()
  46. */
  47. int luat_lv_anim_path_t(lua_State *L) {
  48. lv_anim_path_t* anim_path_t = (lv_anim_path_t*)luat_heap_malloc(sizeof(lv_anim_path_t));
  49. lua_pushlightuserdata(L, anim_path_t);
  50. return 1;
  51. }
  52. /*
  53. 释放一个lv_anim_path_t
  54. @api lvgl.anim_path_t_free(anim_path_t)
  55. @usage
  56. local lvgl.anim_path_t_free(anim_path_t)
  57. */
  58. int luat_lv_anim_path_t_free(lua_State *L) {
  59. lv_anim_path_t* anim_path_t = (lv_anim_path_t*)lua_touserdata(L, 1);
  60. if (anim_path_t != NULL) {
  61. luat_heap_free(anim_path_t);
  62. }
  63. return 0;
  64. }
  65. /*
  66. 设置动画路径方式
  67. @api lvgl.anim_set_path_str(anim, tp)
  68. @userdata 动画指针
  69. @string 类型, 支持 linear/ease_in/ease_out/ease_in_out/overshoot/bounce/step
  70. @return nil 无返回值
  71. */
  72. int luat_lv_anim_set_path_str(lua_State *L) {
  73. lv_anim_t* anim = lua_touserdata(L, 1);
  74. if (anim == NULL) {
  75. LLOGW("obj is NULL when set event cb");
  76. return 0;
  77. }
  78. const char* tp = luaL_checkstring(L, 2);
  79. lv_anim_path_t path;
  80. lv_anim_path_init(&path);
  81. if (!strcmp("linear", tp)) {
  82. lv_anim_path_set_cb(&path, lv_anim_path_linear);
  83. }
  84. else if (!strcmp("ease_in", tp)) {
  85. lv_anim_path_set_cb(&path, lv_anim_path_ease_in);
  86. }
  87. else if (!strcmp("ease_out", tp)) {
  88. lv_anim_path_set_cb(&path, lv_anim_path_ease_out);
  89. }
  90. else if (!strcmp("ease_in_out", tp)) {
  91. lv_anim_path_set_cb(&path, lv_anim_path_ease_in_out);
  92. }
  93. else if (!strcmp("overshoot", tp)) {
  94. lv_anim_path_set_cb(&path, lv_anim_path_overshoot);
  95. }
  96. else if (!strcmp("bounce", tp)) {
  97. lv_anim_path_set_cb(&path, lv_anim_path_bounce);
  98. }
  99. else if (!strcmp("step", tp)) {
  100. lv_anim_path_set_cb(&path, lv_anim_path_step);
  101. }
  102. else {
  103. //lv_anim_path_set_cb(&path, NULL);
  104. return 0;
  105. }
  106. lv_anim_set_path(anim, &path);
  107. return 0;
  108. }
  109. #endif