initial
This commit is contained in:
267
include/Widgets/meter/lv_meter.h
Normal file
267
include/Widgets/meter/lv_meter.h
Normal file
@@ -0,0 +1,267 @@
|
||||
/**
|
||||
* @file lv_meter.h
|
||||
*
|
||||
*/
|
||||
|
||||
#ifndef LV_METER_H
|
||||
#define LV_METER_H
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
/*********************
|
||||
* INCLUDES
|
||||
*********************/
|
||||
#include "lvgl.h"
|
||||
|
||||
#if LV_USE_METER != 0
|
||||
|
||||
/*Testing of dependencies*/
|
||||
#if LV_DRAW_COMPLEX == 0
|
||||
#error "lv_meter: Complex drawing is required. Enable it in lv_conf.h (LV_DRAW_COMPLEX 1)"
|
||||
#endif
|
||||
|
||||
/*********************
|
||||
* DEFINES
|
||||
*********************/
|
||||
|
||||
/**********************
|
||||
* TYPEDEFS
|
||||
**********************/
|
||||
|
||||
typedef struct {
|
||||
lv_color_t tick_color;
|
||||
uint16_t tick_cnt;
|
||||
uint16_t tick_length;
|
||||
uint16_t tick_width;
|
||||
|
||||
lv_color_t tick_major_color;
|
||||
uint16_t tick_major_nth;
|
||||
uint16_t tick_major_length;
|
||||
uint16_t tick_major_width;
|
||||
|
||||
int16_t label_gap;
|
||||
int16_t label_color;
|
||||
|
||||
int32_t min;
|
||||
int32_t max;
|
||||
int16_t r_mod;
|
||||
uint16_t angle_range;
|
||||
int16_t rotation;
|
||||
} lv_meter_scale_t;
|
||||
|
||||
enum {
|
||||
LV_METER_INDICATOR_TYPE_NEEDLE_IMG,
|
||||
LV_METER_INDICATOR_TYPE_NEEDLE_LINE,
|
||||
LV_METER_INDICATOR_TYPE_SCALE_LINES,
|
||||
LV_METER_INDICATOR_TYPE_ARC,
|
||||
};
|
||||
typedef uint8_t lv_meter_indicator_type_t;
|
||||
|
||||
typedef struct {
|
||||
lv_meter_scale_t * scale;
|
||||
lv_meter_indicator_type_t type;
|
||||
lv_opa_t opa;
|
||||
int32_t start_value;
|
||||
int32_t end_value;
|
||||
union {
|
||||
struct {
|
||||
const void * src;
|
||||
lv_point_t pivot;
|
||||
} needle_img;
|
||||
struct {
|
||||
uint16_t width;
|
||||
int16_t r_mod;
|
||||
lv_color_t color;
|
||||
} needle_line;
|
||||
struct {
|
||||
uint16_t width;
|
||||
const void * src;
|
||||
lv_color_t color;
|
||||
int16_t r_mod;
|
||||
} arc;
|
||||
struct {
|
||||
int16_t width_mod;
|
||||
lv_color_t color_start;
|
||||
lv_color_t color_end;
|
||||
uint8_t local_grad : 1;
|
||||
} scale_lines;
|
||||
} type_data;
|
||||
} lv_meter_indicator_t;
|
||||
|
||||
/*Data of line meter*/
|
||||
typedef struct {
|
||||
lv_obj_t obj;
|
||||
lv_ll_t scale_ll;
|
||||
lv_ll_t indicator_ll;
|
||||
} lv_meter_t;
|
||||
|
||||
extern const lv_obj_class_t lv_meter_class;
|
||||
|
||||
/**
|
||||
* `type` field in `lv_obj_draw_part_dsc_t` if `class_p = lv_meter_class`
|
||||
* Used in `LV_EVENT_DRAW_PART_BEGIN` and `LV_EVENT_DRAW_PART_END`
|
||||
*/
|
||||
typedef enum {
|
||||
LV_METER_DRAW_PART_ARC, /**< The arc indicator*/
|
||||
LV_METER_DRAW_PART_NEEDLE_LINE, /**< The needle lines*/
|
||||
LV_METER_DRAW_PART_NEEDLE_IMG, /**< The needle images*/
|
||||
LV_METER_DRAW_PART_TICK, /**< The tick lines and labels*/
|
||||
} lv_meter_draw_part_type_t;
|
||||
|
||||
/**********************
|
||||
* GLOBAL PROTOTYPES
|
||||
**********************/
|
||||
|
||||
/**
|
||||
* Create a Meter object
|
||||
* @param parent pointer to an object, it will be the parent of the new bar.
|
||||
* @return pointer to the created meter
|
||||
*/
|
||||
lv_obj_t * lv_meter_create(lv_obj_t * parent);
|
||||
|
||||
/*=====================
|
||||
* Add scale
|
||||
*====================*/
|
||||
|
||||
/**
|
||||
* Add a new scale to the meter.
|
||||
* @param obj pointer to a meter object
|
||||
* @return the new scale
|
||||
* @note Indicators can be attached to scales.
|
||||
*/
|
||||
lv_meter_scale_t * lv_meter_add_scale(lv_obj_t * obj);
|
||||
|
||||
/**
|
||||
* Set the properties of the ticks of a scale
|
||||
* @param obj pointer to a meter object
|
||||
* @param scale pointer to scale (added to `meter`)
|
||||
* @param cnt number of tick lines
|
||||
* @param width width of tick lines
|
||||
* @param len length of tick lines
|
||||
* @param color color of tick lines
|
||||
*/
|
||||
void lv_meter_set_scale_ticks(lv_obj_t * obj, lv_meter_scale_t * scale, uint16_t cnt, uint16_t width, uint16_t len,
|
||||
lv_color_t color);
|
||||
|
||||
/**
|
||||
* Make some "normal" ticks major ticks and set their attributes.
|
||||
* Texts with the current value are also added to the major ticks.
|
||||
* @param obj pointer to a meter object
|
||||
* @param scale pointer to scale (added to `meter`)
|
||||
* @param nth make every Nth normal tick major tick. (start from the first on the left)
|
||||
* @param width width of the major ticks
|
||||
* @param len length of the major ticks
|
||||
* @param color color of the major ticks
|
||||
* @param label_gap gap between the major ticks and the labels
|
||||
*/
|
||||
void lv_meter_set_scale_major_ticks(lv_obj_t * obj, lv_meter_scale_t * scale, uint16_t nth, uint16_t width,
|
||||
uint16_t len, lv_color_t color, int16_t label_gap);
|
||||
|
||||
/**
|
||||
* Set the value and angular range of a scale.
|
||||
* @param obj pointer to a meter object
|
||||
* @param scale pointer to scale (added to `meter`)
|
||||
* @param min the minimum value
|
||||
* @param max the maximal value
|
||||
* @param angle_range the angular range of the scale
|
||||
* @param rotation the angular offset from the 3 o'clock position (clock-wise)
|
||||
*/
|
||||
void lv_meter_set_scale_range(lv_obj_t * obj, lv_meter_scale_t * scale, int32_t min, int32_t max, uint32_t angle_range,
|
||||
uint32_t rotation);
|
||||
|
||||
/*=====================
|
||||
* Add indicator
|
||||
*====================*/
|
||||
|
||||
/**
|
||||
* Add a needle line indicator the scale
|
||||
* @param obj pointer to a meter object
|
||||
* @param scale pointer to scale (added to `meter`)
|
||||
* @param width width of the line
|
||||
* @param color color of the line
|
||||
* @param r_mod the radius modifier (added to the scale's radius) to get the lines length
|
||||
* @return the new indicator
|
||||
*/
|
||||
lv_meter_indicator_t * lv_meter_add_needle_line(lv_obj_t * obj, lv_meter_scale_t * scale, uint16_t width,
|
||||
lv_color_t color, int16_t r_mod);
|
||||
|
||||
/**
|
||||
* Add a needle image indicator the scale
|
||||
* @param obj pointer to a meter object
|
||||
* @param scale pointer to scale (added to `meter`)
|
||||
* @param src the image source of the indicator. path or pointer to ::lv_img_dsc_t
|
||||
* @param pivot_x the X pivot point of the needle
|
||||
* @param pivot_y the Y pivot point of the needle
|
||||
* @return the new indicator
|
||||
* @note the needle image should point to the right, like -O----->
|
||||
*/
|
||||
lv_meter_indicator_t * lv_meter_add_needle_img(lv_obj_t * obj, lv_meter_scale_t * scale, const void * src,
|
||||
lv_coord_t pivot_x, lv_coord_t pivot_y);
|
||||
|
||||
/**
|
||||
* Add an arc indicator the scale
|
||||
* @param obj pointer to a meter object
|
||||
* @param scale pointer to scale (added to `meter`)
|
||||
* @param width width of the arc
|
||||
* @param color color of the arc
|
||||
* @param r_mod the radius modifier (added to the scale's radius) to get the outer radius of the arc
|
||||
* @return the new indicator
|
||||
*/
|
||||
lv_meter_indicator_t * lv_meter_add_arc(lv_obj_t * obj, lv_meter_scale_t * scale, uint16_t width, lv_color_t color,
|
||||
int16_t r_mod);
|
||||
|
||||
|
||||
/**
|
||||
* Add a scale line indicator the scale. It will modify the ticks.
|
||||
* @param obj pointer to a meter object
|
||||
* @param scale pointer to scale (added to `meter`)
|
||||
* @param color_start the start color
|
||||
* @param color_end the end color
|
||||
* @param local tell how to map start and end color. true: the indicator's start and end_value; false: the scale's min max value
|
||||
* @param width_mod add this the affected tick's width
|
||||
* @return the new indicator
|
||||
*/
|
||||
lv_meter_indicator_t * lv_meter_add_scale_lines(lv_obj_t * obj, lv_meter_scale_t * scale, lv_color_t color_start,
|
||||
lv_color_t color_end, bool local, int16_t width_mod);
|
||||
|
||||
/*=====================
|
||||
* Set indicator value
|
||||
*====================*/
|
||||
|
||||
/**
|
||||
* Set the value of the indicator. It will set start and and value to the same value
|
||||
* @param obj pointer to a meter object
|
||||
* @param indic pointer to an indicator
|
||||
* @param value the new value
|
||||
*/
|
||||
void lv_meter_set_indicator_value(lv_obj_t * obj, lv_meter_indicator_t * indic, int32_t value);
|
||||
|
||||
/**
|
||||
* Set the start value of the indicator.
|
||||
* @param obj pointer to a meter object
|
||||
* @param indic pointer to an indicator
|
||||
* @param value the new value
|
||||
*/
|
||||
void lv_meter_set_indicator_start_value(lv_obj_t * obj, lv_meter_indicator_t * indic, int32_t value);
|
||||
|
||||
/**
|
||||
* Set the start value of the indicator.
|
||||
* @param obj pointer to a meter object
|
||||
* @param indic pointer to an indicator
|
||||
* @param value the new value
|
||||
*/
|
||||
void lv_meter_set_indicator_end_value(lv_obj_t * obj, lv_meter_indicator_t * indic, int32_t value);
|
||||
|
||||
/**********************
|
||||
* MACROS
|
||||
**********************/
|
||||
|
||||
#endif /*LV_USE_METER*/
|
||||
|
||||
#ifdef __cplusplus
|
||||
} /*extern "C"*/
|
||||
#endif
|
||||
|
||||
#endif /*LV_METER_H*/
|
||||
Reference in New Issue
Block a user