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_2.py (2329B)

      1 def draw_event_cb(e):
      2 
      3     obj = e.get_target()
      4 
      5     # Add the faded area before the lines are drawn
      6     dsc = lv.obj_draw_part_dsc_t.__cast__(e.get_param())
      7     if dsc.part != lv.PART.ITEMS:
      8         return
      9     if not dsc.p1 or not dsc.p2:
     10         return
     11 
     12     # Add a line mask that keeps the area below the line
     13     line_mask_param = lv.draw_mask_line_param_t()
     14     line_mask_param.points_init(dsc.p1.x, dsc.p1.y, dsc.p2.x, dsc.p2.y, lv.DRAW_MASK_LINE_SIDE.BOTTOM)
     15     # line_mask_id = line_mask_param.draw_mask_add(None)
     16     line_mask_id = lv.draw_mask_add(line_mask_param, None)
     17     # Add a fade effect: transparent bottom covering top
     18     h = obj.get_height()
     19     fade_mask_param = lv.draw_mask_fade_param_t()
     20     coords = lv.area_t()
     21     obj.get_coords(coords)
     22     fade_mask_param.init(coords, lv.OPA.COVER, coords.y1 + h // 8, lv.OPA.TRANSP,coords.y2)
     23     fade_mask_id = lv.draw_mask_add(fade_mask_param,None)
     24 
     25     # Draw a rectangle that will be affected by the mask
     26     draw_rect_dsc = lv.draw_rect_dsc_t()
     27     draw_rect_dsc.init()
     28     draw_rect_dsc.bg_opa = lv.OPA._20
     29     draw_rect_dsc.bg_color = dsc.line_dsc.color
     30 
     31     a = lv.area_t()
     32     a.x1 = dsc.p1.x
     33     a.x2 = dsc.p2.x - 1
     34     a.y1 = min(dsc.p1.y, dsc.p2.y)
     35     coords = lv.area_t()
     36     obj.get_coords(coords)
     37     a.y2 = coords.y2
     38     dsc.draw_ctx.rect(draw_rect_dsc, a)
     39 
     40     # Remove the masks
     41     lv.draw_mask_remove_id(line_mask_id)
     42     lv.draw_mask_remove_id(fade_mask_id)
     43 
     44 
     45 def add_data(timer):
     46     # LV_UNUSED(timer);
     47     cnt = 0
     48     chart1.set_next_value(ser1, lv.rand(20, 90))
     49 
     50     if cnt % 4 == 0:
     51         chart1.set_next_value(ser2, lv.rand(40, 60))
     52 
     53     cnt +=1
     54 
     55 #
     56 # Add a faded area effect to the line chart
     57 #
     58 
     59 # Create a chart1
     60 chart1 = lv.chart(lv.scr_act())
     61 chart1.set_size(200, 150)
     62 chart1.center()
     63 chart1.set_type(lv.chart.TYPE.LINE)    # Show lines and points too
     64 
     65 chart1.add_event_cb(draw_event_cb, lv.EVENT.DRAW_PART_BEGIN, None)
     66 chart1.set_update_mode(lv.chart.UPDATE_MODE.CIRCULAR)
     67 
     68 # Add two data series
     69 ser1 = chart1.add_series(lv.palette_main(lv.PALETTE.RED), lv.chart.AXIS.PRIMARY_Y)
     70 ser2 = chart1.add_series(lv.palette_main(lv.PALETTE.BLUE), lv.chart.AXIS.SECONDARY_Y)
     71 
     72 for i in range(10):
     73     chart1.set_next_value(ser1, lv.rand(20, 90))
     74     chart1.set_next_value(ser2, lv.rand(30, 70))
     75 
     76 timer = lv.timer_create(add_data, 200, None)