From 3764d7a6ba444531f220884e16f294f3f6d68b45 Mon Sep 17 00:00:00 2001 From: Brian Pugh Date: Thu, 11 Apr 2019 09:26:11 -0700 Subject: [PATCH 1/3] lv_preload.c Add feature to allow setting whether the animation is played in forward/reverse. Changes the default spinner behavior from counterclockwise to clockwise. --- src/lv_objx/lv_preload.c | 48 +++++++++++++++++++++++++++++++++++----- src/lv_objx/lv_preload.h | 27 +++++++++++++++++++--- 2 files changed, 66 insertions(+), 9 deletions(-) diff --git a/src/lv_objx/lv_preload.c b/src/lv_objx/lv_preload.c index bed1d310e..24dca2787 100644 --- a/src/lv_objx/lv_preload.c +++ b/src/lv_objx/lv_preload.c @@ -80,6 +80,7 @@ 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; + ext->anim_direction = LV_PRELOAD_DIRECTION_FORWARD; /*The signal and design functions are not copied so set them here*/ lv_obj_set_signal_cb(new_preload, lv_preload_signal); @@ -105,6 +106,7 @@ lv_obj_t * lv_preload_create(lv_obj_t * par, const lv_obj_t * copy) lv_preload_ext_t * copy_ext = lv_obj_get_ext_attr(copy); ext->arc_length = copy_ext->arc_length; ext->time = copy_ext->time; + ext->anim_direction = copy_ext->anim_direction; /*Refresh the style with new signal function*/ lv_obj_refresh_style(new_preload); } @@ -178,8 +180,15 @@ void lv_preload_set_animation_type(lv_obj_t * preload, lv_preload_type_t type) ext->anim_type = LV_PRELOAD_TYPE_FILLSPIN_ARC; lv_anim_t a; a.var = preload; - a.start = 0; - a.end = 360; + if( ext->anim_direction == LV_PRELOAD_DIRECTION_FORWARD ) { + /* Clockwise */ + a.start = 360; + a.end = 0; + } + else { + 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; @@ -193,8 +202,15 @@ void lv_preload_set_animation_type(lv_obj_t * preload, lv_preload_type_t type) lv_anim_t b; b.var = preload; - b.start = ext->arc_length; - b.end = 360 - ext->arc_length; + if( ext->anim_direction == LV_PRELOAD_DIRECTION_FORWARD ) { + /* Clockwise */ + b.start = 360 - ext->arc_length; + b.end = ext->arc_length; + } + else { + 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; @@ -212,8 +228,15 @@ void lv_preload_set_animation_type(lv_obj_t * preload, lv_preload_type_t type) ext->anim_type = LV_PRELOAD_TYPE_SPINNING_ARC; lv_anim_t a; a.var = preload; - a.start = 0; - a.end = 360; + if( ext->anim_direction == LV_PRELOAD_DIRECTION_FORWARD ) { + /* Clockwise */ + a.start = 360; + a.end = 0; + } + else { + 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; @@ -231,6 +254,13 @@ void lv_preload_set_animation_type(lv_obj_t * preload, lv_preload_type_t type) #endif // LV_USE_ANIMATION } +void lv_preload_set_animation_direction(lv_obj_t * preload, lv_preload_direction_t direction) { + lv_preload_ext_t * ext = lv_obj_get_ext_attr(preload); + + ext->anim_direction = direction; + lv_preload_set_animation_type(preload, ext->anim_type); +} + /*===================== * Getter functions *====================*/ @@ -284,6 +314,11 @@ lv_preload_type_t lv_preload_get_animation_type(lv_obj_t * preload) return ext->anim_type; } +lv_preload_direction_t lv_preload_get_animation_direction(lv_obj_t * preload) { + lv_preload_ext_t * ext = lv_obj_get_ext_attr(preload); + return ext->anim_direction; +} + /*===================== * Other functions *====================*/ @@ -297,6 +332,7 @@ void lv_preload_spinner_animation(void * ptr, int32_t val) { lv_obj_t * preload = ptr; lv_preload_ext_t * ext = lv_obj_get_ext_attr(preload); + int16_t angle_start = val - ext->arc_length / 2 + 180; int16_t angle_end = angle_start + ext->arc_length; diff --git a/src/lv_objx/lv_preload.h b/src/lv_objx/lv_preload.h index 9715e3a3c..d6fc4d3ea 100644 --- a/src/lv_objx/lv_preload.h +++ b/src/lv_objx/lv_preload.h @@ -47,6 +47,12 @@ enum { }; typedef uint8_t lv_preload_type_t; +enum { + LV_PRELOAD_DIRECTION_FORWARD, + LV_PRELOAD_DIRECTION_BACKWARD, +}; +typedef uint8_t lv_preload_direction_t; + /*Data of pre loader*/ typedef struct { @@ -54,7 +60,8 @@ 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_preload_type_t anim_type; /*Type of the arc animation*/ + lv_preload_type_t anim_type:1; /*Type of the arc animation*/ + lv_preload_direction_t anim_direction:1; /*Animation Direction*/ } lv_preload_ext_t; /*Styles*/ @@ -107,12 +114,19 @@ 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, const lv_style_t * style); /** - * Set the animation type of a preloadeer. + * Set the animation type of a preloader. * @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_preload_type_t type); +/** + * Set the animation direction of a preloader + * @param preload pointer to pre loader object + * @param direction animation direction of the preload + */ +void lv_preload_set_animation_direction(lv_obj_t * preload, lv_preload_direction_t direction); + /*===================== * Getter functions *====================*/ @@ -138,12 +152,19 @@ uint16_t lv_preload_get_spin_time(const lv_obj_t * preload); const lv_style_t * lv_preload_get_style(const lv_obj_t * preload, lv_preload_style_t type); /** - * Get the animation type of a preloadeer. + * Get the animation type of a preloader. * @param preload pointer to pre loader object * @return animation type * */ lv_preload_type_t lv_preload_get_animation_type(lv_obj_t * preload); +/** + * Get the animation direction of a preloader + * @param preload pointer to pre loader object + * @return animation direction + */ +lv_preload_direction_t lv_preload_get_animation_direction(lv_obj_t * preload); + /*===================== * Other functions *====================*/ From 610499c278e78503cde2a210b7c7aac12a78d0d7 Mon Sep 17 00:00:00 2001 From: Brian Pugh Date: Fri, 12 Apr 2019 07:48:00 -0700 Subject: [PATCH 2/3] lv_preload uncomment lv_anim_del in animation create --- src/lv_objx/lv_preload.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/lv_objx/lv_preload.c b/src/lv_objx/lv_preload.c index 24dca2787..31664299e 100644 --- a/src/lv_objx/lv_preload.c +++ b/src/lv_objx/lv_preload.c @@ -174,7 +174,7 @@ void lv_preload_set_animation_type(lv_obj_t * preload, lv_preload_type_t type) lv_preload_ext_t * ext = lv_obj_get_ext_attr(preload); /*delete previous animation*/ - // lv_anim_del(preload, NULL); + lv_anim_del(preload, NULL); switch(type) { case LV_PRELOAD_TYPE_FILLSPIN_ARC: { ext->anim_type = LV_PRELOAD_TYPE_FILLSPIN_ARC; From bbb93d315ea7b14bdc5226ca55302b2b80024288 Mon Sep 17 00:00:00 2001 From: Brian Pugh Date: Fri, 12 Apr 2019 07:57:16 -0700 Subject: [PATCH 3/3] lv_preload: abbreviate "animation" and "direction" to "anim" and "dir" --- src/lv_objx/lv_preload.c | 34 +++++++++++++++++----------------- src/lv_objx/lv_preload.h | 18 +++++++++--------- 2 files changed, 26 insertions(+), 26 deletions(-) diff --git a/src/lv_objx/lv_preload.c b/src/lv_objx/lv_preload.c index 31664299e..7bff32e65 100644 --- a/src/lv_objx/lv_preload.c +++ b/src/lv_objx/lv_preload.c @@ -80,7 +80,7 @@ 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; - ext->anim_direction = LV_PRELOAD_DIRECTION_FORWARD; + ext->anim_dir = LV_PRELOAD_DIR_FORWARD; /*The signal and design functions are not copied so set them here*/ lv_obj_set_signal_cb(new_preload, lv_preload_signal); @@ -106,12 +106,12 @@ lv_obj_t * lv_preload_create(lv_obj_t * par, const lv_obj_t * copy) lv_preload_ext_t * copy_ext = lv_obj_get_ext_attr(copy); ext->arc_length = copy_ext->arc_length; ext->time = copy_ext->time; - ext->anim_direction = copy_ext->anim_direction; + ext->anim_dir = copy_ext->anim_dir; /*Refresh the style with new signal function*/ lv_obj_refresh_style(new_preload); } - lv_preload_set_animation_type(new_preload, ext->anim_type); + lv_preload_set_anim_type(new_preload, ext->anim_type); LV_LOG_INFO("preload created"); @@ -144,7 +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; - lv_preload_set_animation_type(preload, ext->anim_type); + lv_preload_set_anim_type(preload, ext->anim_type); } /*===================== * Setter functions @@ -168,7 +168,7 @@ void lv_preload_set_style(lv_obj_t * preload, lv_preload_style_t type, const lv_ * @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_preload_type_t type) +void lv_preload_set_anim_type(lv_obj_t * preload, lv_preload_type_t type) { #if LV_USE_ANIMATION lv_preload_ext_t * ext = lv_obj_get_ext_attr(preload); @@ -180,7 +180,7 @@ void lv_preload_set_animation_type(lv_obj_t * preload, lv_preload_type_t type) ext->anim_type = LV_PRELOAD_TYPE_FILLSPIN_ARC; lv_anim_t a; a.var = preload; - if( ext->anim_direction == LV_PRELOAD_DIRECTION_FORWARD ) { + if( ext->anim_dir == LV_PRELOAD_DIR_FORWARD ) { /* Clockwise */ a.start = 360; a.end = 0; @@ -189,7 +189,7 @@ void lv_preload_set_animation_type(lv_obj_t * preload, lv_preload_type_t type) a.start = 0; a.end = 360; } - a.fp = (lv_anim_fp_t)lv_preload_spinner_animation; + a.fp = (lv_anim_fp_t)lv_preload_spinner_anim; a.path = lv_anim_path_ease_in_out; a.end_cb = NULL; a.act_time = 0; @@ -202,7 +202,7 @@ void lv_preload_set_animation_type(lv_obj_t * preload, lv_preload_type_t type) lv_anim_t b; b.var = preload; - if( ext->anim_direction == LV_PRELOAD_DIRECTION_FORWARD ) { + if( ext->anim_dir == LV_PRELOAD_DIR_FORWARD ) { /* Clockwise */ b.start = 360 - ext->arc_length; b.end = ext->arc_length; @@ -228,7 +228,7 @@ void lv_preload_set_animation_type(lv_obj_t * preload, lv_preload_type_t type) ext->anim_type = LV_PRELOAD_TYPE_SPINNING_ARC; lv_anim_t a; a.var = preload; - if( ext->anim_direction == LV_PRELOAD_DIRECTION_FORWARD ) { + if( ext->anim_dir == LV_PRELOAD_DIR_FORWARD ) { /* Clockwise */ a.start = 360; a.end = 0; @@ -237,7 +237,7 @@ void lv_preload_set_animation_type(lv_obj_t * preload, lv_preload_type_t type) a.start = 0; a.end = 360; } - a.fp = (lv_anim_fp_t)lv_preload_spinner_animation; + a.fp = (lv_anim_fp_t)lv_preload_spinner_anim; a.path = lv_anim_path_ease_in_out; a.end_cb = NULL; a.act_time = 0; @@ -254,11 +254,11 @@ void lv_preload_set_animation_type(lv_obj_t * preload, lv_preload_type_t type) #endif // LV_USE_ANIMATION } -void lv_preload_set_animation_direction(lv_obj_t * preload, lv_preload_direction_t direction) { +void lv_preload_set_anim_dir(lv_obj_t * preload, lv_preload_dir_t dir) { lv_preload_ext_t * ext = lv_obj_get_ext_attr(preload); - ext->anim_direction = direction; - lv_preload_set_animation_type(preload, ext->anim_type); + ext->anim_dir = dir; + lv_preload_set_anim_type(preload, ext->anim_type); } /*===================== @@ -308,15 +308,15 @@ const lv_style_t * lv_preload_get_style(const lv_obj_t * preload, lv_preload_sty * @param preload pointer to pre loader object * @return animation type * */ -lv_preload_type_t lv_preload_get_animation_type(lv_obj_t * preload) +lv_preload_type_t lv_preload_get_anim_type(lv_obj_t * preload) { lv_preload_ext_t * ext = lv_obj_get_ext_attr(preload); return ext->anim_type; } -lv_preload_direction_t lv_preload_get_animation_direction(lv_obj_t * preload) { +lv_preload_dir_t lv_preload_get_anim_dir(lv_obj_t * preload) { lv_preload_ext_t * ext = lv_obj_get_ext_attr(preload); - return ext->anim_direction; + return ext->anim_dir; } /*===================== @@ -328,7 +328,7 @@ lv_preload_direction_t lv_preload_get_animation_direction(lv_obj_t * preload) { * @param ptr pointer to preloader * @param val the current desired value [0..360] */ -void lv_preload_spinner_animation(void * ptr, int32_t val) +void lv_preload_spinner_anim(void * ptr, int32_t val) { lv_obj_t * preload = ptr; lv_preload_ext_t * ext = lv_obj_get_ext_attr(preload); diff --git a/src/lv_objx/lv_preload.h b/src/lv_objx/lv_preload.h index d6fc4d3ea..3590f3d1c 100644 --- a/src/lv_objx/lv_preload.h +++ b/src/lv_objx/lv_preload.h @@ -48,10 +48,10 @@ enum { typedef uint8_t lv_preload_type_t; enum { - LV_PRELOAD_DIRECTION_FORWARD, - LV_PRELOAD_DIRECTION_BACKWARD, + LV_PRELOAD_DIR_FORWARD, + LV_PRELOAD_DIR_BACKWARD, }; -typedef uint8_t lv_preload_direction_t; +typedef uint8_t lv_preload_dir_t; /*Data of pre loader*/ typedef struct @@ -61,7 +61,7 @@ typedef struct uint16_t arc_length; /*Length of the spinning indicator in degree*/ uint16_t time; /*Time of one round*/ lv_preload_type_t anim_type:1; /*Type of the arc animation*/ - lv_preload_direction_t anim_direction:1; /*Animation Direction*/ + lv_preload_dir_t anim_dir:1; /*Animation Direction*/ } lv_preload_ext_t; /*Styles*/ @@ -118,14 +118,14 @@ void lv_preload_set_style(lv_obj_t * preload, lv_preload_style_t type, const lv_ * @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_preload_type_t type); +void lv_preload_set_anim_type(lv_obj_t * preload, lv_preload_type_t type); /** * Set the animation direction of a preloader * @param preload pointer to pre loader object * @param direction animation direction of the preload */ -void lv_preload_set_animation_direction(lv_obj_t * preload, lv_preload_direction_t direction); +void lv_preload_set_anim_dir(lv_obj_t * preload, lv_preload_dir_t dir); /*===================== * Getter functions @@ -156,14 +156,14 @@ const lv_style_t * lv_preload_get_style(const lv_obj_t * preload, lv_preload_sty * @param preload pointer to pre loader object * @return animation type * */ -lv_preload_type_t lv_preload_get_animation_type(lv_obj_t * preload); +lv_preload_type_t lv_preload_get_anim_type(lv_obj_t * preload); /** * Get the animation direction of a preloader * @param preload pointer to pre loader object * @return animation direction */ -lv_preload_direction_t lv_preload_get_animation_direction(lv_obj_t * preload); +lv_preload_dir_t lv_preload_get_anim_dir(lv_obj_t * preload); /*===================== * Other functions @@ -175,7 +175,7 @@ lv_preload_direction_t lv_preload_get_animation_direction(lv_obj_t * preload); * @param type which style should be get * @return style pointer to the style * */ -void lv_preload_spinner_animation(void * ptr, int32_t val); +void lv_preload_spinner_anim(void * ptr, int32_t val); /********************** * MACROS