LVGL 库提交
This commit is contained in:
@@ -0,0 +1,106 @@
|
||||
/**
|
||||
* @file lv_spinner.c
|
||||
*
|
||||
*/
|
||||
|
||||
/*********************
|
||||
* INCLUDES
|
||||
*********************/
|
||||
#include "../../misc/lv_anim_private.h"
|
||||
#include "../../core/lv_obj_class_private.h"
|
||||
#include "../../lvgl.h"
|
||||
#if LV_USE_SPINNER
|
||||
|
||||
/*********************
|
||||
* DEFINES
|
||||
*********************/
|
||||
#define DEF_ARC_ANGLE 200
|
||||
#define DEF_TIME 1000
|
||||
|
||||
/**********************
|
||||
* TYPEDEFS
|
||||
**********************/
|
||||
|
||||
/**********************
|
||||
* STATIC PROTOTYPES
|
||||
**********************/
|
||||
static void lv_spinner_constructor(const lv_obj_class_t * class_p, lv_obj_t * obj);
|
||||
static void arc_anim_start_angle(void * obj, int32_t v);
|
||||
static void arc_anim_end_angle(void * obj, int32_t v);
|
||||
|
||||
/**********************
|
||||
* STATIC VARIABLES
|
||||
**********************/
|
||||
const lv_obj_class_t lv_spinner_class = {
|
||||
.base_class = &lv_arc_class,
|
||||
.constructor_cb = lv_spinner_constructor,
|
||||
.name = "lv_spinner",
|
||||
};
|
||||
|
||||
/**********************
|
||||
* MACROS
|
||||
**********************/
|
||||
|
||||
/**********************
|
||||
* GLOBAL FUNCTIONS
|
||||
**********************/
|
||||
|
||||
lv_obj_t * lv_spinner_create(lv_obj_t * parent)
|
||||
{
|
||||
|
||||
lv_obj_t * obj = lv_obj_class_create_obj(&lv_spinner_class, parent);
|
||||
lv_obj_class_init_obj(obj);
|
||||
return obj;
|
||||
}
|
||||
|
||||
void lv_spinner_set_anim_params(lv_obj_t * obj, uint32_t t, uint32_t angle)
|
||||
{
|
||||
/*Delete the current animation*/
|
||||
lv_anim_delete(obj, NULL);
|
||||
|
||||
lv_anim_t a;
|
||||
lv_anim_init(&a);
|
||||
lv_anim_set_var(&a, obj);
|
||||
lv_anim_set_exec_cb(&a, arc_anim_end_angle);
|
||||
lv_anim_set_repeat_count(&a, LV_ANIM_REPEAT_INFINITE);
|
||||
lv_anim_set_duration(&a, t);
|
||||
lv_anim_set_values(&a, angle, 360 + angle);
|
||||
lv_anim_start(&a);
|
||||
|
||||
lv_anim_set_path_cb(&a, lv_anim_path_custom_bezier3);
|
||||
lv_anim_set_bezier3_param(&a, LV_BEZIER_VAL_FLOAT(0.42), LV_BEZIER_VAL_FLOAT(0.58),
|
||||
LV_BEZIER_VAL_FLOAT(0), LV_BEZIER_VAL_FLOAT(1));
|
||||
lv_anim_set_values(&a, 0, 360);
|
||||
lv_anim_set_exec_cb(&a, arc_anim_start_angle);
|
||||
lv_anim_start(&a);
|
||||
|
||||
lv_arc_set_bg_angles(obj, 0, 360);
|
||||
lv_arc_set_rotation(obj, 270);
|
||||
}
|
||||
|
||||
/**********************
|
||||
* STATIC FUNCTIONS
|
||||
**********************/
|
||||
|
||||
static void lv_spinner_constructor(const lv_obj_class_t * class_p, lv_obj_t * obj)
|
||||
{
|
||||
LV_TRACE_OBJ_CREATE("begin");
|
||||
|
||||
LV_UNUSED(class_p);
|
||||
|
||||
lv_obj_remove_flag(obj, LV_OBJ_FLAG_CLICKABLE);
|
||||
|
||||
lv_spinner_set_anim_params(obj, DEF_TIME, DEF_ARC_ANGLE);
|
||||
}
|
||||
|
||||
static void arc_anim_start_angle(void * obj, int32_t v)
|
||||
{
|
||||
lv_arc_set_start_angle(obj, (uint32_t) v);
|
||||
}
|
||||
|
||||
static void arc_anim_end_angle(void * obj, int32_t v)
|
||||
{
|
||||
lv_arc_set_end_angle(obj, (uint32_t) v);
|
||||
}
|
||||
|
||||
#endif /*LV_USE_SPINNER*/
|
||||
@@ -0,0 +1,63 @@
|
||||
/**
|
||||
* @file lv_spinner.h
|
||||
*
|
||||
*/
|
||||
|
||||
#ifndef LV_SPINNER_H
|
||||
#define LV_SPINNER_H
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
/*********************
|
||||
* INCLUDES
|
||||
*********************/
|
||||
#include "../../lv_conf_internal.h"
|
||||
|
||||
#if LV_USE_SPINNER
|
||||
|
||||
/*Testing of dependencies*/
|
||||
#if LV_USE_ARC == 0
|
||||
#error "lv_spinner: lv_arc is required. Enable it in lv_conf.h (LV_USE_ARC 1) "
|
||||
#endif
|
||||
|
||||
/*********************
|
||||
* DEFINES
|
||||
*********************/
|
||||
|
||||
/**********************
|
||||
* TYPEDEFS
|
||||
**********************/
|
||||
LV_ATTRIBUTE_EXTERN_DATA extern const lv_obj_class_t lv_spinner_class;
|
||||
|
||||
/**********************
|
||||
* GLOBAL PROTOTYPES
|
||||
**********************/
|
||||
|
||||
/**
|
||||
* Create a spinner widget
|
||||
* @param parent pointer to an object, it will be the parent of the new spinner.
|
||||
* @return the created spinner
|
||||
*/
|
||||
lv_obj_t * lv_spinner_create(lv_obj_t * parent);
|
||||
|
||||
/**
|
||||
* Set the animation time and arc length of the spinner
|
||||
* @param obj pointer to a spinner
|
||||
* @param t the animation time in milliseconds
|
||||
* @param angle the angle of the arc in degrees
|
||||
*/
|
||||
void lv_spinner_set_anim_params(lv_obj_t * obj, uint32_t t, uint32_t angle);
|
||||
|
||||
/**********************
|
||||
* MACROS
|
||||
**********************/
|
||||
|
||||
#endif /*LV_USE_SPINNER*/
|
||||
|
||||
#ifdef __cplusplus
|
||||
} /*extern "C"*/
|
||||
#endif
|
||||
|
||||
#endif /*LV_SPINNER_H*/
|
||||
Reference in New Issue
Block a user