acid-drop

- Hacking the planet from a LilyGo T-Deck using custom firmware
git clone git://git.acid.vegas/acid-drop.git
Log | Files | Refs | Archive | README | LICENSE

lv_example_chart_6.c (2878B)

      1 #include "../../lv_examples.h"
      2 #if LV_USE_CHART && LV_BUILD_EXAMPLES
      3 
      4 static lv_obj_t * chart;
      5 static lv_chart_series_t * ser;
      6 static lv_chart_cursor_t * cursor;
      7 
      8 static void event_cb(lv_event_t * e)
      9 {
     10     static int32_t last_id = -1;
     11     lv_event_code_t code = lv_event_get_code(e);
     12     lv_obj_t * obj = lv_event_get_target(e);
     13 
     14     if(code == LV_EVENT_VALUE_CHANGED) {
     15         last_id = lv_chart_get_pressed_point(obj);
     16         if(last_id != LV_CHART_POINT_NONE) {
     17             lv_chart_set_cursor_point(obj, cursor, NULL, last_id);
     18         }
     19     }
     20     else if(code == LV_EVENT_DRAW_PART_END) {
     21         lv_obj_draw_part_dsc_t * dsc = lv_event_get_draw_part_dsc(e);
     22         if(!lv_obj_draw_part_check_type(dsc, &lv_chart_class, LV_CHART_DRAW_PART_CURSOR)) return;
     23         if(dsc->p1 == NULL || dsc->p2 == NULL || dsc->p1->y != dsc->p2->y || last_id < 0) return;
     24 
     25         lv_coord_t * data_array = lv_chart_get_y_array(chart, ser);
     26         lv_coord_t v = data_array[last_id];
     27         char buf[16];
     28         lv_snprintf(buf, sizeof(buf), "%d", v);
     29 
     30         lv_point_t size;
     31         lv_txt_get_size(&size, buf, LV_FONT_DEFAULT, 0, 0, LV_COORD_MAX, LV_TEXT_FLAG_NONE);
     32 
     33         lv_area_t a;
     34         a.y2 = dsc->p1->y - 5;
     35         a.y1 = a.y2 - size.y - 10;
     36         a.x1 = dsc->p1->x + 10;
     37         a.x2 = a.x1 + size.x + 10;
     38 
     39         lv_draw_rect_dsc_t draw_rect_dsc;
     40         lv_draw_rect_dsc_init(&draw_rect_dsc);
     41         draw_rect_dsc.bg_color = lv_palette_main(LV_PALETTE_BLUE);
     42         draw_rect_dsc.radius = 3;
     43 
     44         lv_draw_rect(dsc->draw_ctx, &draw_rect_dsc, &a);
     45 
     46         lv_draw_label_dsc_t draw_label_dsc;
     47         lv_draw_label_dsc_init(&draw_label_dsc);
     48         draw_label_dsc.color = lv_color_white();
     49         a.x1 += 5;
     50         a.x2 -= 5;
     51         a.y1 += 5;
     52         a.y2 -= 5;
     53         lv_draw_label(dsc->draw_ctx, &draw_label_dsc, &a, buf, NULL);
     54     }
     55 }
     56 
     57 /**
     58  * Show cursor on the clicked point
     59  */
     60 void lv_example_chart_6(void)
     61 {
     62     chart = lv_chart_create(lv_scr_act());
     63     lv_obj_set_size(chart, 200, 150);
     64     lv_obj_align(chart, LV_ALIGN_CENTER, 0, -10);
     65 
     66     lv_chart_set_axis_tick(chart, LV_CHART_AXIS_PRIMARY_Y, 10, 5, 6, 5, true, 40);
     67     lv_chart_set_axis_tick(chart, LV_CHART_AXIS_PRIMARY_X, 10, 5, 10, 1, true, 30);
     68 
     69     lv_obj_add_event_cb(chart, event_cb, LV_EVENT_ALL, NULL);
     70     lv_obj_refresh_ext_draw_size(chart);
     71 
     72     cursor = lv_chart_add_cursor(chart, lv_palette_main(LV_PALETTE_BLUE), LV_DIR_LEFT | LV_DIR_BOTTOM);
     73 
     74     ser = lv_chart_add_series(chart, lv_palette_main(LV_PALETTE_RED), LV_CHART_AXIS_PRIMARY_Y);
     75     uint32_t i;
     76     for(i = 0; i < 10; i++) {
     77         lv_chart_set_next_value(chart, ser, lv_rand(10, 90));
     78     }
     79 
     80     lv_chart_set_zoom_x(chart, 500);
     81 
     82     lv_obj_t * label = lv_label_create(lv_scr_act());
     83     lv_label_set_text(label, "Click on a point");
     84     lv_obj_align_to(label, chart, LV_ALIGN_OUT_TOP_MID, 0, -5);
     85 }
     86 
     87 #endif