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_btnmatrix_2.py (2785B)

      1 from imagetools import get_png_info, open_png
      2 
      3 # Register PNG image decoder
      4 decoder = lv.img.decoder_create()
      5 decoder.info_cb = get_png_info
      6 decoder.open_cb = open_png
      7 
      8 # Create an image from the png file
      9 try:
     10     with open('../../assets/img_star.png','rb') as f:
     11         png_data = f.read()
     12 except:
     13     print("Could not find star.png")
     14     sys.exit()
     15 
     16 img_star_argb = lv.img_dsc_t({
     17   'data_size': len(png_data),
     18   'data': png_data
     19 })
     20 
     21 def event_cb(e):
     22     code = e.get_code()
     23     obj = e.get_target()
     24     dsc = lv.obj_draw_part_dsc_t.__cast__(e.get_param())
     25     if code == lv.EVENT.DRAW_PART_BEGIN:
     26         # Change the draw descriptor the 2nd button
     27         if dsc.id == 1:
     28             dsc.rect_dsc.radius = 0
     29             if obj.get_selected_btn() == dsc.id:
     30                 dsc.rect_dsc.bg_color = lv.palette_darken(lv.PALETTE.GREY, 3)
     31             else:
     32                 dsc.rect_dsc.bg_color = lv.palette_main(lv.PALETTE.BLUE)
     33 
     34             dsc.rect_dsc.shadow_width = 6
     35             dsc.rect_dsc.shadow_ofs_x = 3
     36             dsc.rect_dsc.shadow_ofs_y = 3
     37             dsc.label_dsc.color = lv.color_white()
     38 
     39         # Change the draw descriptor the 3rd button
     40 
     41         elif dsc.id == 2:
     42             dsc.rect_dsc.radius = lv.RADIUS.CIRCLE
     43             if obj.get_selected_btn() == dsc.id:
     44                 dsc.rect_dsc.bg_color = lv.palette_darken(lv.PALETTE.RED, 3)
     45             else:
     46                 dsc.rect_dsc.bg_color = lv.palette_main(lv.PALETTE.RED)
     47 
     48                 dsc.label_dsc.color = lv.color_white()
     49         elif dsc.id == 3:
     50             dsc.label_dsc.opa = lv.OPA.TRANSP  # Hide the text if any
     51 
     52     if code == lv.EVENT.DRAW_PART_END:
     53         # Add custom content to the 4th button when the button itself was drawn
     54         if dsc.id == 3:
     55             # LV_IMG_DECLARE(img_star)
     56             header = lv.img_header_t()
     57             res = lv.img.decoder_get_info(img_star_argb, header)
     58             if res != lv.RES.OK:
     59                 print("error when getting image header")
     60                 return
     61             else:
     62                 a = lv.area_t()
     63                 a.x1 = dsc.draw_area.x1 + (dsc.draw_area.get_width() - header.w) // 2
     64                 a.x2 = a.x1 + header.w - 1
     65                 a.y1 = dsc.draw_area.y1 + (dsc.draw_area.get_height() - header.h) // 2
     66                 a.y2 = a.y1 + header.h - 1
     67                 img_draw_dsc = lv.draw_img_dsc_t()
     68                 img_draw_dsc.init()
     69                 img_draw_dsc.recolor = lv.color_black()
     70                 if obj.get_selected_btn() == dsc.id:
     71                     img_draw_dsc.recolor_opa = lv.OPA._30
     72 
     73                 dsc.draw_ctx.img(img_draw_dsc, a, img_star_argb)
     74 
     75 #
     76 # Add custom drawer to the button matrix to c
     77 #
     78 btnm = lv.btnmatrix(lv.scr_act())
     79 btnm.add_event_cb(event_cb, lv.EVENT.ALL, None)
     80 btnm.center()
     81