acid-drop- Hacking the planet from a LilyGo T-Deck using custom firmware |
git clone git://git.acid.vegas/acid-drop.git |
Log | Files | Refs | Archive | README | LICENSE |
lv_animimg.c (3442B)
1 /** 2 * @file lv_animimg.c 3 * 4 */ 5 6 /********************* 7 * INCLUDES 8 *********************/ 9 #include "lv_animimg.h" 10 #if LV_USE_ANIMIMG != 0 11 12 /*Testing of dependencies*/ 13 #if LV_USE_IMG == 0 14 #error "lv_animimg: lv_img is required. Enable it in lv_conf.h (LV_USE_IMG 1) " 15 #endif 16 17 #include "../../../misc/lv_assert.h" 18 #include "../../../draw/lv_img_decoder.h" 19 #include "../../../misc/lv_fs.h" 20 #include "../../../misc/lv_txt.h" 21 #include "../../../misc/lv_math.h" 22 #include "../../../misc/lv_log.h" 23 #include "../../../misc/lv_anim.h" 24 25 /********************* 26 * DEFINES 27 *********************/ 28 #define LV_OBJX_NAME "lv_animimg" 29 30 #define MY_CLASS &lv_animimg_class 31 32 /********************** 33 * TYPEDEFS 34 **********************/ 35 36 /********************** 37 * STATIC PROTOTYPES 38 **********************/ 39 static void index_change(lv_obj_t * obj, int32_t index); 40 static void lv_animimg_constructor(const lv_obj_class_t * class_p, lv_obj_t * obj); 41 42 /********************** 43 * STATIC VARIABLES 44 **********************/ 45 const lv_obj_class_t lv_animimg_class = { 46 .constructor_cb = lv_animimg_constructor, 47 .instance_size = sizeof(lv_animimg_t), 48 .base_class = &lv_img_class 49 }; 50 51 /********************** 52 * MACROS 53 **********************/ 54 55 /********************** 56 * GLOBAL FUNCTIONS 57 **********************/ 58 59 lv_obj_t * lv_animimg_create(lv_obj_t * parent) 60 { 61 LV_LOG_INFO("begin"); 62 lv_obj_t * obj = lv_obj_class_create_obj(&lv_animimg_class, parent); 63 lv_obj_class_init_obj(obj); 64 return obj; 65 } 66 67 void lv_animimg_set_src(lv_obj_t * obj, lv_img_dsc_t * dsc[], uint8_t num) 68 { 69 LV_ASSERT_OBJ(obj, MY_CLASS); 70 lv_animimg_t * animimg = (lv_animimg_t *)obj; 71 animimg->dsc = dsc; 72 animimg->pic_count = num; 73 lv_anim_set_values(&animimg->anim, 0, num); 74 } 75 76 void lv_animimg_start(lv_obj_t * obj) 77 { 78 LV_ASSERT_OBJ(obj, MY_CLASS); 79 lv_animimg_t * animimg = (lv_animimg_t *)obj; 80 lv_anim_start(&animimg->anim); 81 } 82 83 /*===================== 84 * Setter functions 85 *====================*/ 86 87 void lv_animimg_set_duration(lv_obj_t * obj, uint32_t duration) 88 { 89 LV_ASSERT_OBJ(obj, MY_CLASS); 90 lv_animimg_t * animimg = (lv_animimg_t *)obj; 91 lv_anim_set_time(&animimg->anim, duration); 92 lv_anim_set_playback_delay(&animimg->anim, duration); 93 } 94 95 void lv_animimg_set_repeat_count(lv_obj_t * obj, uint16_t count) 96 { 97 LV_ASSERT_OBJ(obj, MY_CLASS); 98 lv_animimg_t * animimg = (lv_animimg_t *)obj; 99 lv_anim_set_repeat_count(&animimg->anim, count); 100 } 101 102 /*===================== 103 * Getter functions 104 *====================*/ 105 106 /********************** 107 * STATIC FUNCTIONS 108 **********************/ 109 110 static void lv_animimg_constructor(const lv_obj_class_t * class_p, lv_obj_t * obj) 111 { 112 LV_TRACE_OBJ_CREATE("begin"); 113 114 LV_UNUSED(class_p); 115 lv_animimg_t * animimg = (lv_animimg_t *)obj; 116 117 animimg->dsc = NULL; 118 animimg->pic_count = -1; 119 //initial animation 120 lv_anim_init(&animimg->anim); 121 lv_anim_set_var(&animimg->anim, obj); 122 lv_anim_set_time(&animimg->anim, 30); 123 lv_anim_set_exec_cb(&animimg->anim, (lv_anim_exec_xcb_t)index_change); 124 lv_anim_set_values(&animimg->anim, 0, 1); 125 lv_anim_set_repeat_count(&animimg->anim, LV_ANIM_REPEAT_INFINITE); 126 } 127 128 static void index_change(lv_obj_t * obj, int32_t index) 129 { 130 lv_coord_t idx; 131 lv_animimg_t * animimg = (lv_animimg_t *)obj; 132 133 idx = index % animimg->pic_count; 134 135 lv_img_set_src(obj, animimg->dsc[idx]); 136 } 137 138 #endif