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_anim_3.py (4971B)

      1 from micropython import const
      2 
      3 # the example show the use of cubic-bezier3 in animation.
      4 # the control point P1,P2 of cubic-bezier3 can be adjusted by slider.
      5 # and the chart shows the cubic-bezier3 in real time. you can click
      6 # run button see animation in current point of cubic-bezier3.
      7 #
      8 
      9 CHART_POINTS_NUM = const(256)
     10 
     11 class LvExampleAnim_3():
     12     #
     13     # create an animation
     14     #
     15     def __init__(self):
     16         # Create a container with grid
     17         col_dsc = [lv.grid_fr(1), 200, lv.grid_fr(1), lv.GRID_TEMPLATE.LAST]
     18         row_dsc = [30, 10, 10, lv.grid_fr(1),lv.GRID_TEMPLATE.LAST]
     19 
     20         self.p1 = 0
     21         self.p2 = 0
     22         self.cont = lv.obj(lv.scr_act())
     23         self.cont.set_style_pad_all(2, lv.PART.MAIN)
     24         self.cont.set_style_pad_column(10, lv.PART.MAIN)
     25         self.cont.set_style_pad_row(10, lv.PART.MAIN)
     26         self.cont.set_grid_dsc_array(col_dsc, row_dsc)
     27         self.cont.set_size(320, 240)
     28         self.cont.center()
     29         self.page_obj_init(self.cont)
     30 
     31         self.a = lv.anim_t()
     32         self.a.init()
     33         self.a.set_var(self.anim_obj)
     34         end = self.cont.get_style_width(lv.PART.MAIN) - self.anim_obj.get_style_width(lv.PART.MAIN) - 10
     35         self.a.set_values(5, end)
     36         self.a.set_time(2000)
     37         self.a.set_custom_exec_cb(lambda a,val: self.anim_x_cb(self.anim_obj,val))
     38         self.a.set_path_cb(self.anim_path_bezier3_cb)
     39         self.refer_chart_cubic_bezier()
     40 
     41     def page_obj_init(self,par):
     42         self.anim_obj = lv.obj(par)
     43         self.anim_obj.set_size(30, 30)
     44         self.anim_obj.set_align(lv.ALIGN.TOP_LEFT)
     45         self.anim_obj.clear_flag(lv.obj.FLAG.SCROLLABLE)
     46         self.anim_obj.set_style_bg_color(lv.palette_main(lv.PALETTE.RED), lv.PART.MAIN)
     47         self.anim_obj.set_grid_cell(lv.GRID_ALIGN.START, 0, 1,lv.GRID_ALIGN.START, 0, 1)
     48 
     49         self.p1_label = lv.label(par)
     50         self.p2_label = lv.label(par)
     51         self.p1_label.set_text("p1:0")
     52         self.p2_label.set_text("p2:0")
     53         self.p1_label.set_grid_cell(lv.GRID_ALIGN.START, 0, 1,lv.GRID_ALIGN.START, 1, 1)
     54         self.p2_label.set_grid_cell(lv.GRID_ALIGN.START, 0, 1,lv.GRID_ALIGN.START, 2, 1)
     55 
     56         self.p1_slider = lv.slider(par)
     57         self.p2_slider = lv.slider(par)
     58         self.p1_slider.set_range(0, 1024)
     59         self.p2_slider.set_range(0, 1024)
     60         self.p1_slider.set_style_pad_all(2, lv.PART.KNOB)
     61         self.p2_slider.set_style_pad_all(2, lv.PART.KNOB)
     62         self.p1_slider.add_event_cb(self.slider_event_cb, lv.EVENT.VALUE_CHANGED, None)
     63         self.p2_slider.add_event_cb(self.slider_event_cb, lv.EVENT.VALUE_CHANGED, None)
     64         self.p1_slider.set_grid_cell(lv.GRID_ALIGN.STRETCH, 1, 1,lv.GRID_ALIGN.START, 1, 1)
     65         self.p2_slider.set_grid_cell(lv.GRID_ALIGN.STRETCH, 1, 1,lv.GRID_ALIGN.START, 2, 1)
     66 
     67         self.run_btn = lv.btn(par)
     68         self.run_btn.add_event_cb(self.run_btn_event_handler, lv.EVENT.CLICKED, None)
     69         btn_label = lv.label(self.run_btn)
     70         btn_label.set_text(lv.SYMBOL.PLAY)
     71         btn_label.center()
     72         self.run_btn.set_grid_cell(lv.GRID_ALIGN.STRETCH, 2, 1,lv.GRID_ALIGN.STRETCH, 1, 2)
     73 
     74         self.chart = lv.chart(par)
     75         self.chart.set_style_pad_all(0, lv.PART.MAIN)
     76         self.chart.set_style_size(0, lv.PART.INDICATOR)
     77         self.chart.set_type(lv.chart.TYPE.SCATTER)
     78         self.ser1 = self.chart.add_series(lv.palette_main(lv.PALETTE.RED), lv.chart.AXIS.PRIMARY_Y)
     79         self.chart.set_range(lv.chart.AXIS.PRIMARY_Y, 0, 1024)
     80         self.chart.set_range(lv.chart.AXIS.PRIMARY_X, 0, 1024)
     81         self.chart.set_point_count(CHART_POINTS_NUM)
     82         self.chart.set_grid_cell(lv.GRID_ALIGN.STRETCH, 0, 3,lv.GRID_ALIGN.STRETCH, 3, 1)
     83 
     84     def refer_chart_cubic_bezier(self):
     85         for i in range(CHART_POINTS_NUM+1):
     86             t = i * (1024 // CHART_POINTS_NUM)
     87             step = lv.bezier3(t, 0, self.p1, self.p2, 1024)
     88             self.chart.set_value_by_id2(self.ser1, i, t, step)
     89             self.chart.refresh()
     90 
     91     def slider_event_cb(self,e):
     92         slider = e.get_target()
     93 
     94         if slider == self.p1_slider:
     95             label = self.p1_label
     96             self.p1 = slider.get_value()
     97             label.set_text("p1: {:d}".format(self.p1))
     98         else:
     99             label = self.p2_label
    100             self.p2 = slider.get_value()
    101             label.set_text("p1: {:d}".format(self.p2))
    102 
    103         self.refer_chart_cubic_bezier()
    104 
    105 
    106     def run_btn_event_handler(self,e):
    107 
    108         code = e.get_code()
    109         if code == lv.EVENT.CLICKED:
    110                 lv.anim_t.start(self.a)
    111 
    112     def anim_x_cb(self, var, v):
    113         var.set_style_translate_x(v, lv.PART.MAIN)
    114 
    115     def anim_path_bezier3_cb(self,a):
    116         t = lv.map(a.act_time, 0, a.time, 0, 1024)
    117         step = lv.bezier3(t, 0, self.p1, self.p2, 1024)
    118         new_value = step * (a.end_value - a.start_value)
    119         new_value = new_value >> 10
    120         new_value += a.start_value
    121         return new_value
    122 
    123 lv_example_anim_3 = LvExampleAnim_3()