luat_lib_lvgl_anim.c 2.0 KB

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