init Files
This commit is contained in:
49
libraries/lvgl/examples/widgets/chart/index.rst
Normal file
49
libraries/lvgl/examples/widgets/chart/index.rst
Normal file
@@ -0,0 +1,49 @@
|
||||
|
||||
Line Chart
|
||||
----------
|
||||
|
||||
.. lv_example:: widgets/chart/lv_example_chart_1
|
||||
:language: c
|
||||
|
||||
|
||||
Axis ticks and labels with scrolling
|
||||
------------------------------------------------
|
||||
|
||||
.. lv_example:: widgets/chart/lv_example_chart_2
|
||||
:language: c
|
||||
|
||||
Show the value of the pressed points
|
||||
------------------------------------
|
||||
|
||||
.. lv_example:: widgets/chart/lv_example_chart_3
|
||||
:language: c
|
||||
|
||||
Recolor bars based on their value
|
||||
------------------------------------
|
||||
|
||||
.. lv_example:: widgets/chart/lv_example_chart_4
|
||||
:language: c
|
||||
|
||||
Faded area line chart with custom division lines
|
||||
---------------------------------------------------
|
||||
|
||||
.. lv_example:: widgets/chart/lv_example_chart_5
|
||||
:language: c
|
||||
|
||||
Show cursor on the clicked point
|
||||
--------------------------------
|
||||
|
||||
.. lv_example:: widgets/chart/lv_example_chart_6
|
||||
:language: c
|
||||
|
||||
Scatter chart
|
||||
-------------
|
||||
|
||||
.. lv_example:: widgets/chart/lv_example_chart_7
|
||||
:language: c
|
||||
|
||||
Circular line chart with gap
|
||||
----------------------------
|
||||
|
||||
.. lv_example:: widgets/chart/lv_example_chart_8
|
||||
:language: c
|
||||
33
libraries/lvgl/examples/widgets/chart/lv_example_chart_1.c
Normal file
33
libraries/lvgl/examples/widgets/chart/lv_example_chart_1.c
Normal file
@@ -0,0 +1,33 @@
|
||||
#include "../../lv_examples.h"
|
||||
#if LV_USE_CHART && LV_BUILD_EXAMPLES
|
||||
|
||||
/**
|
||||
* A very basic line chart
|
||||
*/
|
||||
void lv_example_chart_1(void)
|
||||
{
|
||||
/*Create a chart*/
|
||||
lv_obj_t * chart;
|
||||
chart = lv_chart_create(lv_screen_active());
|
||||
lv_obj_set_size(chart, 200, 150);
|
||||
lv_obj_center(chart);
|
||||
lv_chart_set_type(chart, LV_CHART_TYPE_LINE); /*Show lines and points too*/
|
||||
|
||||
/*Add two data series*/
|
||||
lv_chart_series_t * ser1 = lv_chart_add_series(chart, lv_palette_main(LV_PALETTE_GREEN), LV_CHART_AXIS_PRIMARY_Y);
|
||||
lv_chart_series_t * ser2 = lv_chart_add_series(chart, lv_palette_main(LV_PALETTE_RED), LV_CHART_AXIS_SECONDARY_Y);
|
||||
int32_t * ser2_y_points = lv_chart_get_y_array(chart, ser2);
|
||||
|
||||
uint32_t i;
|
||||
for(i = 0; i < 10; i++) {
|
||||
/*Set the next points on 'ser1'*/
|
||||
lv_chart_set_next_value(chart, ser1, lv_rand(10, 50));
|
||||
|
||||
/*Directly set points on 'ser2'*/
|
||||
ser2_y_points[i] = lv_rand(50, 90);
|
||||
}
|
||||
|
||||
lv_chart_refresh(chart); /*Required after direct set*/
|
||||
}
|
||||
|
||||
#endif
|
||||
56
libraries/lvgl/examples/widgets/chart/lv_example_chart_2.c
Normal file
56
libraries/lvgl/examples/widgets/chart/lv_example_chart_2.c
Normal file
@@ -0,0 +1,56 @@
|
||||
#include "../../lv_examples.h"
|
||||
#if LV_USE_CHART && LV_BUILD_EXAMPLES
|
||||
|
||||
/**
|
||||
* Use lv_scale to add ticks to a scrollable chart
|
||||
*/
|
||||
void lv_example_chart_2(void)
|
||||
{
|
||||
/*Create a container*/
|
||||
lv_obj_t * main_cont = lv_obj_create(lv_screen_active());
|
||||
lv_obj_set_size(main_cont, 200, 150);
|
||||
lv_obj_center(main_cont);
|
||||
|
||||
/*Create a transparent wrapper for the chart and the scale.
|
||||
*Set a large width, to make it scrollable on the main container*/
|
||||
lv_obj_t * wrapper = lv_obj_create(main_cont);
|
||||
lv_obj_remove_style_all(wrapper);
|
||||
lv_obj_set_size(wrapper, lv_pct(300), lv_pct(100));
|
||||
lv_obj_set_flex_flow(wrapper, LV_FLEX_FLOW_COLUMN);
|
||||
|
||||
/*Create a chart on the wrapper
|
||||
*Set it's width to 100% to fill the large wrapper*/
|
||||
lv_obj_t * chart = lv_chart_create(wrapper);
|
||||
lv_obj_set_width(chart, lv_pct(100));
|
||||
lv_obj_set_flex_grow(chart, 1);
|
||||
lv_chart_set_type(chart, LV_CHART_TYPE_BAR);
|
||||
lv_chart_set_range(chart, LV_CHART_AXIS_PRIMARY_Y, 0, 100);
|
||||
lv_chart_set_range(chart, LV_CHART_AXIS_SECONDARY_Y, 0, 400);
|
||||
lv_chart_set_point_count(chart, 12);
|
||||
lv_obj_set_style_radius(chart, 0, 0);
|
||||
|
||||
/*Create a scale also with 100% width*/
|
||||
lv_obj_t * scale_bottom = lv_scale_create(wrapper);
|
||||
lv_scale_set_mode(scale_bottom, LV_SCALE_MODE_HORIZONTAL_BOTTOM);
|
||||
lv_obj_set_size(scale_bottom, lv_pct(100), 25);
|
||||
lv_scale_set_total_tick_count(scale_bottom, 12);
|
||||
lv_scale_set_major_tick_every(scale_bottom, 1);
|
||||
lv_obj_set_style_pad_hor(scale_bottom, lv_chart_get_first_point_center_offset(chart), 0);
|
||||
|
||||
static const char * month[] = {"Jan", "Febr", "March", "Apr", "May", "Jun", "July", "Aug", "Sept", "Oct", "Nov", "Dec", NULL};
|
||||
lv_scale_set_text_src(scale_bottom, month);
|
||||
|
||||
/*Add two data series*/
|
||||
lv_chart_series_t * ser1 = lv_chart_add_series(chart, lv_palette_lighten(LV_PALETTE_GREEN, 2), LV_CHART_AXIS_PRIMARY_Y);
|
||||
lv_chart_series_t * ser2 = lv_chart_add_series(chart, lv_palette_darken(LV_PALETTE_GREEN, 2), LV_CHART_AXIS_PRIMARY_Y);
|
||||
|
||||
/*Set the next points on 'ser1'*/
|
||||
uint32_t i;
|
||||
for(i = 0; i < 12; i++) {
|
||||
lv_chart_set_next_value(chart, ser1, lv_rand(10, 60));
|
||||
lv_chart_set_next_value(chart, ser2, lv_rand(50, 90));
|
||||
}
|
||||
lv_chart_refresh(chart); /*Required after direct set*/
|
||||
}
|
||||
|
||||
#endif
|
||||
87
libraries/lvgl/examples/widgets/chart/lv_example_chart_3.c
Normal file
87
libraries/lvgl/examples/widgets/chart/lv_example_chart_3.c
Normal file
@@ -0,0 +1,87 @@
|
||||
#include "../../lv_examples.h"
|
||||
#if LV_USE_CHART && LV_BUILD_EXAMPLES
|
||||
|
||||
static void event_cb(lv_event_t * e)
|
||||
{
|
||||
lv_event_code_t code = lv_event_get_code(e);
|
||||
lv_obj_t * chart = lv_event_get_target(e);
|
||||
|
||||
if(code == LV_EVENT_VALUE_CHANGED) {
|
||||
lv_obj_invalidate(chart);
|
||||
}
|
||||
if(code == LV_EVENT_REFR_EXT_DRAW_SIZE) {
|
||||
int32_t * s = lv_event_get_param(e);
|
||||
*s = LV_MAX(*s, 20);
|
||||
}
|
||||
else if(code == LV_EVENT_DRAW_POST_END) {
|
||||
int32_t id = lv_chart_get_pressed_point(chart);
|
||||
if(id == LV_CHART_POINT_NONE) return;
|
||||
|
||||
LV_LOG_USER("Selected point %d", (int)id);
|
||||
|
||||
lv_chart_series_t * ser = lv_chart_get_series_next(chart, NULL);
|
||||
while(ser) {
|
||||
lv_point_t p;
|
||||
lv_chart_get_point_pos_by_id(chart, ser, id, &p);
|
||||
|
||||
int32_t * y_array = lv_chart_get_y_array(chart, ser);
|
||||
int32_t value = y_array[id];
|
||||
|
||||
char buf[16];
|
||||
lv_snprintf(buf, sizeof(buf), LV_SYMBOL_DUMMY"$%d", value);
|
||||
|
||||
lv_draw_rect_dsc_t draw_rect_dsc;
|
||||
lv_draw_rect_dsc_init(&draw_rect_dsc);
|
||||
draw_rect_dsc.bg_color = lv_color_black();
|
||||
draw_rect_dsc.bg_opa = LV_OPA_50;
|
||||
draw_rect_dsc.radius = 3;
|
||||
draw_rect_dsc.bg_image_src = buf;
|
||||
draw_rect_dsc.bg_image_recolor = lv_color_white();
|
||||
|
||||
lv_area_t chart_obj_coords;
|
||||
lv_obj_get_coords(chart, &chart_obj_coords);
|
||||
lv_area_t a;
|
||||
a.x1 = chart_obj_coords.x1 + p.x - 20;
|
||||
a.x2 = chart_obj_coords.x1 + p.x + 20;
|
||||
a.y1 = chart_obj_coords.y1 + p.y - 30;
|
||||
a.y2 = chart_obj_coords.y1 + p.y - 10;
|
||||
|
||||
lv_layer_t * layer = lv_event_get_layer(e);
|
||||
lv_draw_rect(layer, &draw_rect_dsc, &a);
|
||||
|
||||
ser = lv_chart_get_series_next(chart, ser);
|
||||
}
|
||||
}
|
||||
else if(code == LV_EVENT_RELEASED) {
|
||||
lv_obj_invalidate(chart);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Show the value of the pressed points
|
||||
*/
|
||||
void lv_example_chart_3(void)
|
||||
{
|
||||
/*Create a chart*/
|
||||
lv_obj_t * chart;
|
||||
chart = lv_chart_create(lv_screen_active());
|
||||
lv_obj_set_size(chart, 200, 150);
|
||||
lv_obj_center(chart);
|
||||
|
||||
lv_obj_add_event_cb(chart, event_cb, LV_EVENT_ALL, NULL);
|
||||
lv_obj_refresh_ext_draw_size(chart);
|
||||
|
||||
/*Zoom in a little in X*/
|
||||
// lv_chart_set_scale_x(chart, 800);
|
||||
|
||||
/*Add two data series*/
|
||||
lv_chart_series_t * ser1 = lv_chart_add_series(chart, lv_palette_main(LV_PALETTE_RED), LV_CHART_AXIS_PRIMARY_Y);
|
||||
lv_chart_series_t * ser2 = lv_chart_add_series(chart, lv_palette_main(LV_PALETTE_GREEN), LV_CHART_AXIS_PRIMARY_Y);
|
||||
uint32_t i;
|
||||
for(i = 0; i < 10; i++) {
|
||||
lv_chart_set_next_value(chart, ser1, lv_rand(60, 90));
|
||||
lv_chart_set_next_value(chart, ser2, lv_rand(10, 40));
|
||||
}
|
||||
}
|
||||
|
||||
#endif
|
||||
48
libraries/lvgl/examples/widgets/chart/lv_example_chart_4.c
Normal file
48
libraries/lvgl/examples/widgets/chart/lv_example_chart_4.c
Normal file
@@ -0,0 +1,48 @@
|
||||
#include "../../lv_examples.h"
|
||||
|
||||
#if LV_USE_CHART && LV_DRAW_SW_COMPLEX && LV_BUILD_EXAMPLES
|
||||
|
||||
static void draw_event_cb(lv_event_t * e)
|
||||
{
|
||||
lv_draw_task_t * draw_task = lv_event_get_draw_task(e);
|
||||
lv_draw_dsc_base_t * base_dsc = lv_draw_task_get_draw_dsc(draw_task);
|
||||
|
||||
if(base_dsc->part != LV_PART_ITEMS) {
|
||||
return;
|
||||
}
|
||||
|
||||
lv_draw_fill_dsc_t * fill_dsc = lv_draw_task_get_fill_dsc(draw_task);
|
||||
if(fill_dsc) {
|
||||
lv_obj_t * chart = lv_event_get_target(e);
|
||||
int32_t * y_array = lv_chart_get_y_array(chart, lv_chart_get_series_next(chart, NULL));
|
||||
int32_t v = y_array[base_dsc->id2];
|
||||
|
||||
uint32_t ratio = v * 255 / 100;
|
||||
fill_dsc->color = lv_color_mix(lv_palette_main(LV_PALETTE_GREEN), lv_palette_main(LV_PALETTE_RED), ratio);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Recolor the bars of a chart based on their value
|
||||
*/
|
||||
void lv_example_chart_4(void)
|
||||
{
|
||||
/*Create a chart1*/
|
||||
lv_obj_t * chart = lv_chart_create(lv_screen_active());
|
||||
lv_chart_set_type(chart, LV_CHART_TYPE_BAR);
|
||||
lv_chart_set_point_count(chart, 24);
|
||||
lv_obj_set_style_pad_column(chart, 2, 0);
|
||||
lv_obj_set_size(chart, 260, 160);
|
||||
lv_obj_center(chart);
|
||||
|
||||
lv_chart_series_t * ser = lv_chart_add_series(chart, lv_color_hex(0xff0000), LV_CHART_AXIS_PRIMARY_Y);
|
||||
lv_obj_add_event_cb(chart, draw_event_cb, LV_EVENT_DRAW_TASK_ADDED, NULL);
|
||||
lv_obj_add_flag(chart, LV_OBJ_FLAG_SEND_DRAW_TASK_EVENTS);
|
||||
|
||||
uint32_t i;
|
||||
for(i = 0; i < 24; i++) {
|
||||
lv_chart_set_next_value(chart, ser, lv_rand(10, 90));
|
||||
}
|
||||
}
|
||||
|
||||
#endif
|
||||
148
libraries/lvgl/examples/widgets/chart/lv_example_chart_5.c
Normal file
148
libraries/lvgl/examples/widgets/chart/lv_example_chart_5.c
Normal file
@@ -0,0 +1,148 @@
|
||||
#include "../../lv_examples.h"
|
||||
|
||||
#if LV_USE_CHART && LV_DRAW_SW_COMPLEX && LV_BUILD_EXAMPLES
|
||||
|
||||
static void hook_division_lines(lv_event_t * e);
|
||||
static void add_faded_area(lv_event_t * e);
|
||||
static void draw_event_cb(lv_event_t * e);
|
||||
|
||||
/**
|
||||
* Add a faded area effect to the line chart and make some division lines ticker
|
||||
*/
|
||||
void lv_example_chart_5(void)
|
||||
{
|
||||
/*Create a chart*/
|
||||
lv_obj_t * chart = lv_chart_create(lv_screen_active());
|
||||
lv_chart_set_type(chart, LV_CHART_TYPE_LINE); /*Show lines and points too*/
|
||||
lv_obj_set_size(chart, 200, 150);
|
||||
lv_obj_set_style_pad_all(chart, 0, 0);
|
||||
lv_obj_set_style_radius(chart, 0, 0);
|
||||
lv_obj_center(chart);
|
||||
|
||||
lv_chart_set_div_line_count(chart, 5, 7);
|
||||
|
||||
lv_obj_add_event_cb(chart, draw_event_cb, LV_EVENT_DRAW_TASK_ADDED, NULL);
|
||||
lv_obj_add_flag(chart, LV_OBJ_FLAG_SEND_DRAW_TASK_EVENTS);
|
||||
|
||||
lv_chart_series_t * ser = lv_chart_add_series(chart, lv_palette_main(LV_PALETTE_RED), LV_CHART_AXIS_PRIMARY_Y);
|
||||
|
||||
uint32_t i;
|
||||
for(i = 0; i < 10; i++) {
|
||||
lv_chart_set_next_value(chart, ser, lv_rand(10, 80));
|
||||
}
|
||||
}
|
||||
|
||||
static void draw_event_cb(lv_event_t * e)
|
||||
{
|
||||
lv_draw_task_t * draw_task = lv_event_get_draw_task(e);
|
||||
lv_draw_dsc_base_t * base_dsc = lv_draw_task_get_draw_dsc(draw_task);
|
||||
|
||||
if(base_dsc->part == LV_PART_ITEMS && lv_draw_task_get_type(draw_task) == LV_DRAW_TASK_TYPE_LINE) {
|
||||
add_faded_area(e);
|
||||
|
||||
}
|
||||
/*Hook the division lines too*/
|
||||
if(base_dsc->part == LV_PART_MAIN && lv_draw_task_get_type(draw_task) == LV_DRAW_TASK_TYPE_LINE) {
|
||||
hook_division_lines(e);
|
||||
}
|
||||
}
|
||||
|
||||
static void add_faded_area(lv_event_t * e)
|
||||
{
|
||||
lv_obj_t * obj = lv_event_get_target(e);
|
||||
lv_area_t coords;
|
||||
lv_obj_get_coords(obj, &coords);
|
||||
|
||||
lv_draw_task_t * draw_task = lv_event_get_draw_task(e);
|
||||
lv_draw_dsc_base_t * base_dsc = lv_draw_task_get_draw_dsc(draw_task);
|
||||
|
||||
const lv_chart_series_t * ser = lv_chart_get_series_next(obj, NULL);
|
||||
lv_color_t ser_color = lv_chart_get_series_color(obj, ser);
|
||||
|
||||
/*Draw a triangle below the line witch some opacity gradient*/
|
||||
lv_draw_line_dsc_t * draw_line_dsc = lv_draw_task_get_draw_dsc(draw_task);
|
||||
lv_draw_triangle_dsc_t tri_dsc;
|
||||
|
||||
lv_draw_triangle_dsc_init(&tri_dsc);
|
||||
tri_dsc.p[0].x = draw_line_dsc->p1.x;
|
||||
tri_dsc.p[0].y = draw_line_dsc->p1.y;
|
||||
tri_dsc.p[1].x = draw_line_dsc->p2.x;
|
||||
tri_dsc.p[1].y = draw_line_dsc->p2.y;
|
||||
tri_dsc.p[2].x = draw_line_dsc->p1.y < draw_line_dsc->p2.y ? draw_line_dsc->p1.x : draw_line_dsc->p2.x;
|
||||
tri_dsc.p[2].y = LV_MAX(draw_line_dsc->p1.y, draw_line_dsc->p2.y);
|
||||
tri_dsc.bg_grad.dir = LV_GRAD_DIR_VER;
|
||||
|
||||
int32_t full_h = lv_obj_get_height(obj);
|
||||
int32_t fract_uppter = (int32_t)(LV_MIN(draw_line_dsc->p1.y, draw_line_dsc->p2.y) - coords.y1) * 255 / full_h;
|
||||
int32_t fract_lower = (int32_t)(LV_MAX(draw_line_dsc->p1.y, draw_line_dsc->p2.y) - coords.y1) * 255 / full_h;
|
||||
tri_dsc.bg_grad.stops[0].color = ser_color;
|
||||
tri_dsc.bg_grad.stops[0].opa = 255 - fract_uppter;
|
||||
tri_dsc.bg_grad.stops[0].frac = 0;
|
||||
tri_dsc.bg_grad.stops[1].color = ser_color;
|
||||
tri_dsc.bg_grad.stops[1].opa = 255 - fract_lower;
|
||||
tri_dsc.bg_grad.stops[1].frac = 255;
|
||||
|
||||
lv_draw_triangle(base_dsc->layer, &tri_dsc);
|
||||
|
||||
/*Draw rectangle below the triangle*/
|
||||
lv_draw_rect_dsc_t rect_dsc;
|
||||
lv_draw_rect_dsc_init(&rect_dsc);
|
||||
rect_dsc.bg_grad.dir = LV_GRAD_DIR_VER;
|
||||
rect_dsc.bg_grad.stops[0].color = ser_color;
|
||||
rect_dsc.bg_grad.stops[0].frac = 0;
|
||||
rect_dsc.bg_grad.stops[0].opa = 255 - fract_lower;
|
||||
rect_dsc.bg_grad.stops[1].color = ser_color;
|
||||
rect_dsc.bg_grad.stops[1].frac = 255;
|
||||
rect_dsc.bg_grad.stops[1].opa = 0;
|
||||
|
||||
lv_area_t rect_area;
|
||||
rect_area.x1 = (int32_t)draw_line_dsc->p1.x;
|
||||
rect_area.x2 = (int32_t)draw_line_dsc->p2.x - 1;
|
||||
rect_area.y1 = (int32_t)LV_MAX(draw_line_dsc->p1.y, draw_line_dsc->p2.y) - 1;
|
||||
rect_area.y2 = (int32_t)coords.y2;
|
||||
lv_draw_rect(base_dsc->layer, &rect_dsc, &rect_area);
|
||||
}
|
||||
|
||||
static void hook_division_lines(lv_event_t * e)
|
||||
{
|
||||
lv_draw_task_t * draw_task = lv_event_get_draw_task(e);
|
||||
lv_draw_dsc_base_t * base_dsc = lv_draw_task_get_draw_dsc(draw_task);
|
||||
lv_draw_line_dsc_t * line_dsc = lv_draw_task_get_draw_dsc(draw_task);
|
||||
|
||||
/*Vertical line*/
|
||||
if(line_dsc->p1.x == line_dsc->p2.x) {
|
||||
line_dsc->color = lv_palette_lighten(LV_PALETTE_GREY, 1);
|
||||
if(base_dsc->id1 == 3) {
|
||||
line_dsc->width = 2;
|
||||
line_dsc->dash_gap = 0;
|
||||
line_dsc->dash_width = 0;
|
||||
}
|
||||
else {
|
||||
line_dsc->width = 1;
|
||||
line_dsc->dash_gap = 6;
|
||||
line_dsc->dash_width = 6;
|
||||
}
|
||||
}
|
||||
/*Horizontal line*/
|
||||
else {
|
||||
if(base_dsc->id1 == 2) {
|
||||
line_dsc->width = 2;
|
||||
line_dsc->dash_gap = 0;
|
||||
line_dsc->dash_width = 0;
|
||||
}
|
||||
else {
|
||||
line_dsc->width = 2;
|
||||
line_dsc->dash_gap = 6;
|
||||
line_dsc->dash_width = 6;
|
||||
}
|
||||
|
||||
if(base_dsc->id1 == 1 || base_dsc->id1 == 3) {
|
||||
line_dsc->color = lv_palette_main(LV_PALETTE_GREEN);
|
||||
}
|
||||
else {
|
||||
line_dsc->color = lv_palette_lighten(LV_PALETTE_GREY, 1);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#endif
|
||||
49
libraries/lvgl/examples/widgets/chart/lv_example_chart_6.c
Normal file
49
libraries/lvgl/examples/widgets/chart/lv_example_chart_6.c
Normal file
@@ -0,0 +1,49 @@
|
||||
#include "../../lv_examples.h"
|
||||
#if LV_USE_CHART && LV_BUILD_EXAMPLES
|
||||
|
||||
static lv_obj_t * chart;
|
||||
static lv_chart_series_t * ser;
|
||||
static lv_chart_cursor_t * cursor;
|
||||
|
||||
static void value_changed_event_cb(lv_event_t * e)
|
||||
{
|
||||
static int32_t last_id = -1;
|
||||
lv_obj_t * obj = lv_event_get_target(e);
|
||||
|
||||
last_id = lv_chart_get_pressed_point(obj);
|
||||
if(last_id != LV_CHART_POINT_NONE) {
|
||||
lv_chart_set_cursor_point(obj, cursor, NULL, last_id);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Show cursor on the clicked point
|
||||
*/
|
||||
void lv_example_chart_6(void)
|
||||
{
|
||||
chart = lv_chart_create(lv_screen_active());
|
||||
lv_obj_set_size(chart, 200, 150);
|
||||
lv_obj_align(chart, LV_ALIGN_CENTER, 0, -10);
|
||||
|
||||
// lv_chart_set_axis_tick(chart, LV_CHART_AXIS_PRIMARY_Y, 10, 5, 6, 5, true, 40);
|
||||
// lv_chart_set_axis_tick(chart, LV_CHART_AXIS_PRIMARY_X, 10, 5, 10, 1, true, 30);
|
||||
|
||||
lv_obj_add_event_cb(chart, value_changed_event_cb, LV_EVENT_VALUE_CHANGED, NULL);
|
||||
lv_obj_refresh_ext_draw_size(chart);
|
||||
|
||||
cursor = lv_chart_add_cursor(chart, lv_palette_main(LV_PALETTE_BLUE), LV_DIR_LEFT | LV_DIR_BOTTOM);
|
||||
|
||||
ser = lv_chart_add_series(chart, lv_palette_main(LV_PALETTE_RED), LV_CHART_AXIS_PRIMARY_Y);
|
||||
uint32_t i;
|
||||
for(i = 0; i < 10; i++) {
|
||||
lv_chart_set_next_value(chart, ser, lv_rand(10, 90));
|
||||
}
|
||||
|
||||
// lv_chart_set_scale_x(chart, 500);
|
||||
|
||||
lv_obj_t * label = lv_label_create(lv_screen_active());
|
||||
lv_label_set_text(label, "Click on a point");
|
||||
lv_obj_align_to(label, chart, LV_ALIGN_OUT_TOP_MID, 0, -5);
|
||||
}
|
||||
|
||||
#endif
|
||||
66
libraries/lvgl/examples/widgets/chart/lv_example_chart_7.c
Normal file
66
libraries/lvgl/examples/widgets/chart/lv_example_chart_7.c
Normal file
@@ -0,0 +1,66 @@
|
||||
#include "../../lv_examples.h"
|
||||
#if LV_USE_CHART && LV_BUILD_EXAMPLES
|
||||
|
||||
static void draw_event_cb(lv_event_t * e)
|
||||
{
|
||||
lv_draw_task_t * draw_task = lv_event_get_draw_task(e);
|
||||
lv_draw_dsc_base_t * base_dsc = lv_draw_task_get_draw_dsc(draw_task);
|
||||
if(base_dsc->part == LV_PART_INDICATOR) {
|
||||
lv_obj_t * obj = lv_event_get_target(e);
|
||||
lv_chart_series_t * ser = lv_chart_get_series_next(obj, NULL);
|
||||
lv_draw_rect_dsc_t * rect_draw_dsc = lv_draw_task_get_draw_dsc(draw_task);
|
||||
uint32_t cnt = lv_chart_get_point_count(obj);
|
||||
|
||||
/*Make older value more transparent*/
|
||||
rect_draw_dsc->bg_opa = (LV_OPA_COVER * base_dsc->id2) / (cnt - 1);
|
||||
|
||||
/*Make smaller values blue, higher values red*/
|
||||
int32_t * x_array = lv_chart_get_x_array(obj, ser);
|
||||
int32_t * y_array = lv_chart_get_y_array(obj, ser);
|
||||
/*dsc->id is the tells drawing order, but we need the ID of the point being drawn.*/
|
||||
uint32_t start_point = lv_chart_get_x_start_point(obj, ser);
|
||||
uint32_t p_act = (start_point + base_dsc->id2) % cnt; /*Consider start point to get the index of the array*/
|
||||
lv_opa_t x_opa = (x_array[p_act] * LV_OPA_50) / 200;
|
||||
lv_opa_t y_opa = (y_array[p_act] * LV_OPA_50) / 1000;
|
||||
|
||||
rect_draw_dsc->bg_color = lv_color_mix(lv_palette_main(LV_PALETTE_RED),
|
||||
lv_palette_main(LV_PALETTE_BLUE),
|
||||
x_opa + y_opa);
|
||||
}
|
||||
}
|
||||
|
||||
static void add_data(lv_timer_t * timer)
|
||||
{
|
||||
lv_obj_t * chart = lv_timer_get_user_data(timer);
|
||||
lv_chart_set_next_value2(chart, lv_chart_get_series_next(chart, NULL), lv_rand(0, 200), lv_rand(0, 1000));
|
||||
}
|
||||
|
||||
/**
|
||||
* A scatter chart
|
||||
*/
|
||||
void lv_example_chart_7(void)
|
||||
{
|
||||
lv_obj_t * chart = lv_chart_create(lv_screen_active());
|
||||
lv_obj_set_size(chart, 200, 150);
|
||||
lv_obj_align(chart, LV_ALIGN_CENTER, 0, 0);
|
||||
lv_obj_add_event_cb(chart, draw_event_cb, LV_EVENT_DRAW_TASK_ADDED, NULL);
|
||||
lv_obj_add_flag(chart, LV_OBJ_FLAG_SEND_DRAW_TASK_EVENTS);
|
||||
lv_obj_set_style_line_width(chart, 0, LV_PART_ITEMS); /*Remove the lines*/
|
||||
|
||||
lv_chart_set_type(chart, LV_CHART_TYPE_SCATTER);
|
||||
|
||||
lv_chart_set_range(chart, LV_CHART_AXIS_PRIMARY_X, 0, 200);
|
||||
lv_chart_set_range(chart, LV_CHART_AXIS_PRIMARY_Y, 0, 1000);
|
||||
|
||||
lv_chart_set_point_count(chart, 50);
|
||||
|
||||
lv_chart_series_t * ser = lv_chart_add_series(chart, lv_palette_main(LV_PALETTE_RED), LV_CHART_AXIS_PRIMARY_Y);
|
||||
uint32_t i;
|
||||
for(i = 0; i < 50; i++) {
|
||||
lv_chart_set_next_value2(chart, ser, lv_rand(0, 200), lv_rand(0, 1000));
|
||||
}
|
||||
|
||||
lv_timer_create(add_data, 100, chart);
|
||||
}
|
||||
|
||||
#endif
|
||||
46
libraries/lvgl/examples/widgets/chart/lv_example_chart_8.c
Normal file
46
libraries/lvgl/examples/widgets/chart/lv_example_chart_8.c
Normal file
@@ -0,0 +1,46 @@
|
||||
#include "../../lv_examples.h"
|
||||
#if LV_USE_CHART && LV_DRAW_SW_COMPLEX && LV_BUILD_EXAMPLES
|
||||
|
||||
static void add_data(lv_timer_t * t)
|
||||
{
|
||||
lv_obj_t * chart = lv_timer_get_user_data(t);
|
||||
lv_chart_series_t * ser = lv_chart_get_series_next(chart, NULL);
|
||||
|
||||
lv_chart_set_next_value(chart, ser, lv_rand(10, 90));
|
||||
|
||||
uint16_t p = lv_chart_get_point_count(chart);
|
||||
uint16_t s = lv_chart_get_x_start_point(chart, ser);
|
||||
int32_t * a = lv_chart_get_y_array(chart, ser);
|
||||
|
||||
a[(s + 1) % p] = LV_CHART_POINT_NONE;
|
||||
a[(s + 2) % p] = LV_CHART_POINT_NONE;
|
||||
a[(s + 2) % p] = LV_CHART_POINT_NONE;
|
||||
|
||||
lv_chart_refresh(chart);
|
||||
}
|
||||
|
||||
/**
|
||||
* Circular line chart with gap
|
||||
*/
|
||||
void lv_example_chart_8(void)
|
||||
{
|
||||
/*Create a stacked_area_chart.obj*/
|
||||
lv_obj_t * chart = lv_chart_create(lv_screen_active());
|
||||
lv_chart_set_update_mode(chart, LV_CHART_UPDATE_MODE_CIRCULAR);
|
||||
lv_obj_set_style_size(chart, 0, 0, LV_PART_INDICATOR);
|
||||
lv_obj_set_size(chart, 280, 150);
|
||||
lv_obj_center(chart);
|
||||
|
||||
lv_chart_set_point_count(chart, 80);
|
||||
lv_chart_series_t * ser = lv_chart_add_series(chart, lv_palette_main(LV_PALETTE_RED), LV_CHART_AXIS_PRIMARY_Y);
|
||||
/*Prefill with data*/
|
||||
uint32_t i;
|
||||
for(i = 0; i < 80; i++) {
|
||||
lv_chart_set_next_value(chart, ser, lv_rand(10, 90));
|
||||
}
|
||||
|
||||
lv_timer_create(add_data, 300, chart);
|
||||
|
||||
}
|
||||
|
||||
#endif
|
||||
Reference in New Issue
Block a user