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