From 16aaa93e7612d642ccee13154c166e37f079952f Mon Sep 17 00:00:00 2001 From: AloyseTech Date: Wed, 14 Nov 2018 17:00:59 +0100 Subject: [PATCH 1/6] Better looking preload animation --- lv_objx/lv_preload.c | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/lv_objx/lv_preload.c b/lv_objx/lv_preload.c index 2d189740c..c531c8e75 100644 --- a/lv_objx/lv_preload.c +++ b/lv_objx/lv_preload.c @@ -92,6 +92,21 @@ lv_obj_t * lv_preload_create(lv_obj_t * par, const lv_obj_t * copy) a.repeat = 1; a.repeat_pause = 0; lv_anim_create(&a); + + lv_anim_t b; + b.var = new_preload; + b.start = ext->arc_length; + b.end = 360; + b.fp = (lv_anim_fp_t)lv_preload_set_arc_length; + b.path = lv_anim_path_ease_in_out; + b.end_cb = NULL; + b.act_time = 0; + b.time = LV_PRELOAD_DEF_SPIN_TIME; + b.playback = 1; + b.playback_pause = 0; + b.repeat = 1; + b.repeat_pause = 100; + lv_anim_create(&b); #endif /*Init the new pre loader pre loader*/ From 624939f6ba6341ef7d0e8169822fcbd418d5dac6 Mon Sep 17 00:00:00 2001 From: AloyseTech Date: Wed, 14 Nov 2018 17:33:44 +0100 Subject: [PATCH 2/6] change the second animation range --- lv_objx/lv_preload.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lv_objx/lv_preload.c b/lv_objx/lv_preload.c index c531c8e75..5d2feda14 100644 --- a/lv_objx/lv_preload.c +++ b/lv_objx/lv_preload.c @@ -96,7 +96,7 @@ lv_obj_t * lv_preload_create(lv_obj_t * par, const lv_obj_t * copy) lv_anim_t b; b.var = new_preload; b.start = ext->arc_length; - b.end = 360; + b.end = 360 - ext->arc_length; b.fp = (lv_anim_fp_t)lv_preload_set_arc_length; b.path = lv_anim_path_ease_in_out; b.end_cb = NULL; @@ -105,7 +105,7 @@ lv_obj_t * lv_preload_create(lv_obj_t * par, const lv_obj_t * copy) b.playback = 1; b.playback_pause = 0; b.repeat = 1; - b.repeat_pause = 100; + b.repeat_pause = 0; lv_anim_create(&b); #endif From 7b9710aa4eecc014a8ce3043bc682d150ef71e39 Mon Sep 17 00:00:00 2001 From: AloyseTech Date: Wed, 14 Nov 2018 23:01:22 +0100 Subject: [PATCH 3/6] Use define to enable or not double animation on preload --- lv_objx/lv_preload.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/lv_objx/lv_preload.c b/lv_objx/lv_preload.c index 5d2feda14..39516065e 100644 --- a/lv_objx/lv_preload.c +++ b/lv_objx/lv_preload.c @@ -93,6 +93,7 @@ lv_obj_t * lv_preload_create(lv_obj_t * par, const lv_obj_t * copy) a.repeat_pause = 0; lv_anim_create(&a); +#if LV_PRELOAD_DOUBLE_ANIM lv_anim_t b; b.var = new_preload; b.start = ext->arc_length; @@ -107,7 +108,8 @@ lv_obj_t * lv_preload_create(lv_obj_t * par, const lv_obj_t * copy) b.repeat = 1; b.repeat_pause = 0; lv_anim_create(&b); -#endif +#endif // LV_PRELOAD_DOUBLE_ANIM +#endif // USE_LV_ANIMATION /*Init the new pre loader pre loader*/ if(copy == NULL) { From 4de708b5ad85963a18ab488e2d71caa92a14194d Mon Sep 17 00:00:00 2001 From: AloyseTech Date: Thu, 15 Nov 2018 11:37:00 +0100 Subject: [PATCH 4/6] add api for setting/getting the animation type of preloader --- lv_objx/lv_preload.c | 162 ++++++++++++++++++++++++++++--------------- lv_objx/lv_preload.h | 16 +++++ 2 files changed, 121 insertions(+), 57 deletions(-) diff --git a/lv_objx/lv_preload.c b/lv_objx/lv_preload.c index 39516065e..1700a4dab 100644 --- a/lv_objx/lv_preload.c +++ b/lv_objx/lv_preload.c @@ -24,6 +24,12 @@ #ifndef LV_PRELOAD_DEF_SPIN_TIME # define LV_PRELOAD_DEF_SPIN_TIME 1000 /*[ms]*/ #endif + +#ifndef LV_PRELOAD_DEF_ANIM +# define LV_PRELOAD_DEF_ANIM LV_PRELOAD_TYPE_SPINNING_ARC /*animation type*/ +#endif + + /********************** * TYPEDEFS **********************/ @@ -73,43 +79,12 @@ lv_obj_t * lv_preload_create(lv_obj_t * par, const lv_obj_t * copy) /*Initialize the allocated 'ext' */ ext->arc_length = LV_PRELOAD_DEF_ARC_LENGTH; + ext->anim_type = LV_PRELOAD_DEF_ANIM; /*The signal and design functions are not copied so set them here*/ lv_obj_set_signal_func(new_preload, lv_preload_signal); lv_obj_set_design_func(new_preload, lv_preload_design); -#if USE_LV_ANIMATION - lv_anim_t a; - a.var = new_preload; - a.start = 0; - a.end = 360; - a.fp = (lv_anim_fp_t)lv_preload_spinner_animation; - a.path = lv_anim_path_ease_in_out; - a.end_cb = NULL; - a.act_time = 0; - a.time = LV_PRELOAD_DEF_SPIN_TIME; - a.playback = 0; - a.playback_pause = 0; - a.repeat = 1; - a.repeat_pause = 0; - lv_anim_create(&a); -#if LV_PRELOAD_DOUBLE_ANIM - lv_anim_t b; - b.var = new_preload; - b.start = ext->arc_length; - b.end = 360 - ext->arc_length; - b.fp = (lv_anim_fp_t)lv_preload_set_arc_length; - b.path = lv_anim_path_ease_in_out; - b.end_cb = NULL; - b.act_time = 0; - b.time = LV_PRELOAD_DEF_SPIN_TIME; - b.playback = 1; - b.playback_pause = 0; - b.repeat = 1; - b.repeat_pause = 0; - lv_anim_create(&b); -#endif // LV_PRELOAD_DOUBLE_ANIM -#endif // USE_LV_ANIMATION /*Init the new pre loader pre loader*/ if(copy == NULL) { @@ -123,6 +98,8 @@ lv_obj_t * lv_preload_create(lv_obj_t * par, const lv_obj_t * copy) lv_obj_set_style(new_preload, &lv_style_pretty_color); } + ext->time = LV_PRELOAD_DEF_SPIN_TIME; + } /*Copy an existing pre loader*/ else { @@ -133,6 +110,8 @@ lv_obj_t * lv_preload_create(lv_obj_t * par, const lv_obj_t * copy) lv_obj_refresh_style(new_preload); } + lv_preload_set_animation_type(new_preload, ext->anim_type); + LV_LOG_INFO("preload created"); @@ -165,22 +144,7 @@ void lv_preload_set_spin_time(lv_obj_t * preload, uint16_t time) lv_preload_ext_t * ext = lv_obj_get_ext_attr(preload); ext->time = time; -#if USE_LV_ANIMATION - lv_anim_t a; - a.var = preload; - a.start = 0; - a.end = 360; - a.fp = (lv_anim_fp_t)lv_preload_spinner_animation; - a.path = lv_anim_path_ease_in_out; - a.end_cb = NULL; - a.act_time = 0; - a.time = time; - a.playback = 0; - a.playback_pause = 0; - a.repeat = 1; - a.repeat_pause = 0; - lv_anim_create(&a); -#endif + lv_preload_set_animation_type(preload, ext->anim_type); } /*===================== * Setter functions @@ -195,12 +159,85 @@ void lv_preload_set_spin_time(lv_obj_t * preload, uint16_t time) void lv_preload_set_style(lv_obj_t * preload, lv_preload_style_t type, lv_style_t * style) { switch(type) { - case LV_PRELOAD_STYLE_MAIN: - lv_arc_set_style(preload, LV_ARC_STYLE_MAIN, style); - break; + case LV_PRELOAD_STYLE_MAIN: + lv_arc_set_style(preload, LV_ARC_STYLE_MAIN, style); + break; } } +/** + * Set the animation type of a preloadeer. + * @param preload pointer to pre loader object + * @param type animation type of the preload + * */ +void lv_preload_set_animation_type(lv_obj_t * preload, lv_preloader_type_t type) +{ +#if USE_LV_ANIMATION + lv_preload_ext_t * ext = lv_obj_get_ext_attr(preload); + + /*delete previous animation*/ + //lv_anim_del(preload, NULL); + switch(type) + { + case LV_PRELOAD_TYPE_FILLSPIN_ARC: + { + ext->anim_type = LV_PRELOAD_TYPE_FILLSPIN_ARC; + lv_anim_t a; + a.var = preload; + a.start = 0; + a.end = 360; + a.fp = (lv_anim_fp_t)lv_preload_spinner_animation; + a.path = lv_anim_path_ease_in_out; + a.end_cb = NULL; + a.act_time = 0; + a.time = ext->time; + a.playback = 0; + a.playback_pause = 0; + a.repeat = 1; + a.repeat_pause = 0; + lv_anim_create(&a); + + lv_anim_t b; + b.var = preload; + b.start = ext->arc_length; + b.end = 360 - ext->arc_length; + b.fp = (lv_anim_fp_t)lv_preload_set_arc_length; + b.path = lv_anim_path_ease_in_out; + b.end_cb = NULL; + b.act_time = 0; + b.time = ext->time; + b.playback = 1; + b.playback_pause = 0; + b.repeat = 1; + b.repeat_pause = 0; + lv_anim_create(&b); + break; + } + case LV_PRELOAD_TYPE_SPINNING_ARC: + default: + { + ext->anim_type = LV_PRELOAD_TYPE_SPINNING_ARC; + lv_anim_t a; + a.var = preload; + a.start = 0; + a.end = 360; + a.fp = (lv_anim_fp_t)lv_preload_spinner_animation; + a.path = lv_anim_path_ease_in_out; + a.end_cb = NULL; + a.act_time = 0; + a.time = ext->time; + a.playback = 0; + a.playback_pause = 0; + a.repeat = 1; + a.repeat_pause = 0; + lv_anim_create(&a); + break; + } + } + +#endif //USE_LV_ANIMATION +} + /*===================== * Getter functions *====================*/ @@ -237,17 +274,28 @@ lv_style_t * lv_preload_get_style(const lv_obj_t * preload, lv_preload_style_t t lv_style_t * style = NULL; switch(type) { - case LV_PRELOAD_STYLE_MAIN: - style = lv_arc_get_style(preload, LV_ARC_STYLE_MAIN); - break; - default: - style = NULL; - break; + case LV_PRELOAD_STYLE_MAIN: + style = lv_arc_get_style(preload, LV_ARC_STYLE_MAIN); + break; + default: + style = NULL; + break; } return style; } +/** + * Get the animation type of a preloadeer. + * @param preload pointer to pre loader object + * @return animation type + * */ +lv_preloader_type_t lv_preload_get_animation_type(lv_obj_t * preload) +{ + lv_preload_ext_t * ext = lv_obj_get_ext_attr(preload); + return ext->anim_type; +} + /*===================== * Other functions *====================*/ diff --git a/lv_objx/lv_preload.h b/lv_objx/lv_preload.h index 393eea8e7..4f12f0221 100644 --- a/lv_objx/lv_preload.h +++ b/lv_objx/lv_preload.h @@ -43,6 +43,7 @@ extern "C" { enum { LV_PRELOAD_TYPE_SPINNING_ARC, + LV_PRELOAD_TYPE_FILLSPIN_ARC, }; typedef uint8_t lv_preloader_type_t; @@ -52,6 +53,7 @@ typedef struct { /*New data for this type */ uint16_t arc_length; /*Length of the spinning indicator in degree*/ uint16_t time; /*Time of one round*/ + lv_preloader_type_t anim_type; /*Type of the arc animation*/ } lv_preload_ext_t; @@ -103,6 +105,13 @@ void lv_preload_set_spin_time(lv_obj_t * preload, uint16_t time); * */ void lv_preload_set_style(lv_obj_t * preload, lv_preload_style_t type, lv_style_t *style); +/** + * Set the animation type of a preloadeer. + * @param preload pointer to pre loader object + * @param type animation type of the preload + * */ +void lv_preload_set_animation_type(lv_obj_t * preload, lv_preloader_type_t type); + /*===================== * Getter functions *====================*/ @@ -127,6 +136,13 @@ uint16_t lv_preload_get_spin_time(const lv_obj_t * preload); * */ lv_style_t * lv_preload_get_style(const lv_obj_t * preload, lv_preload_style_t type); +/** + * Get the animation type of a preloadeer. + * @param preload pointer to pre loader object + * @return animation type + * */ +lv_preloader_type_t lv_preload_get_animation_type(lv_obj_t * preload); + /*===================== * Other functions *====================*/ From 042147b010bbef411f972f4e3f5a8d6288d31669 Mon Sep 17 00:00:00 2001 From: Gabor Kiss-Vamosi Date: Sat, 17 Nov 2018 10:48:17 +0100 Subject: [PATCH 5/6] add LV_PRELOAD_DEF_ANIM to lv_conf_templ.h --- lv_conf_templ.h | 1 + 1 file changed, 1 insertion(+) diff --git a/lv_conf_templ.h b/lv_conf_templ.h index 7239e4f28..1cf4903a9 100644 --- a/lv_conf_templ.h +++ b/lv_conf_templ.h @@ -262,6 +262,7 @@ #if USE_LV_PRELOAD != 0 #define LV_PRELOAD_DEF_ARC_LENGTH 60 /*[deg]*/ #define LV_PRELOAD_DEF_SPIN_TIME 1000 /*[ms]*/ +#define LV_PRELOAD_DEF_ANIM LV_PRELOAD_TYPE_SPINNING_ARC #endif /************************* From 2c8cf7d7ea341ff524b0d021d69b229357bdc06a Mon Sep 17 00:00:00 2001 From: embeddedt <42941056+embeddedt@users.noreply.github.com> Date: Sat, 17 Nov 2018 08:02:11 -0500 Subject: [PATCH 6/6] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 191d8bbe0..b79396c25 100644 --- a/README.md +++ b/README.md @@ -27,7 +27,7 @@ In the simplest case you need 5 things: 3. Register a function which can **read an input device**. (E.g. touch pad) 4. Copy `lv_conf_templ.h` as `lv_conf.h` and set at least `LV_HOR_RES`, `LV_VER_RES` and `LV_COLOR_DEPTH`. 5. Call `lv_task_handler()` periodically every few milliseconds. -For a detailed description visit https://littlevgl.com/porting +For a detailed description visit https://github.com/littlevgl/lvgl/wiki/Porting Or check the [Porting tutorial](https://github.com/littlevgl/lv_examples/blob/master/lv_tutorial/0_porting/lv_tutorial_porting.c) ## Project set-up