61 lines
1.6 KiB
Python
61 lines
1.6 KiB
Python
|
#
|
||
|
# Style a button from scratch
|
||
|
#
|
||
|
|
||
|
# Init the style for the default state
|
||
|
style = lv.style_t()
|
||
|
style.init()
|
||
|
|
||
|
style.set_radius(3)
|
||
|
|
||
|
style.set_bg_opa(lv.OPA.COVER)
|
||
|
style.set_bg_color(lv.palette_main(lv.PALETTE.BLUE))
|
||
|
style.set_bg_grad_color(lv.palette_darken(lv.PALETTE.BLUE, 2))
|
||
|
style.set_bg_grad_dir(lv.GRAD_DIR.VER)
|
||
|
|
||
|
style.set_border_opa(lv.OPA._40)
|
||
|
style.set_border_width(2)
|
||
|
style.set_border_color(lv.palette_main(lv.PALETTE.GREY))
|
||
|
|
||
|
style.set_shadow_width(8)
|
||
|
style.set_shadow_color(lv.palette_main(lv.PALETTE.GREY))
|
||
|
style.set_shadow_ofs_y(8)
|
||
|
|
||
|
style.set_outline_opa(lv.OPA.COVER)
|
||
|
style.set_outline_color(lv.palette_main(lv.PALETTE.BLUE))
|
||
|
|
||
|
style.set_text_color(lv.color_white())
|
||
|
style.set_pad_all(10)
|
||
|
|
||
|
# Init the pressed style
|
||
|
style_pr = lv.style_t()
|
||
|
style_pr.init()
|
||
|
|
||
|
# Add a large outline when pressed
|
||
|
style_pr.set_outline_width(30)
|
||
|
style_pr.set_outline_opa(lv.OPA.TRANSP)
|
||
|
|
||
|
style_pr.set_translate_y(5)
|
||
|
style_pr.set_shadow_ofs_y(3)
|
||
|
style_pr.set_bg_color(lv.palette_darken(lv.PALETTE.BLUE, 2))
|
||
|
style_pr.set_bg_grad_color(lv.palette_darken(lv.PALETTE.BLUE, 4))
|
||
|
|
||
|
# Add a transition to the outline
|
||
|
trans = lv.style_transition_dsc_t()
|
||
|
props = [lv.STYLE.OUTLINE_WIDTH, lv.STYLE.OUTLINE_OPA, 0]
|
||
|
trans.init(props, lv.anim_t.path_linear, 300, 0, None)
|
||
|
|
||
|
style_pr.set_transition(trans)
|
||
|
|
||
|
btn1 = lv.btn(lv.scr_act())
|
||
|
btn1.remove_style_all() # Remove the style coming from the theme
|
||
|
btn1.add_style(style, 0)
|
||
|
btn1.add_style(style_pr, lv.STATE.PRESSED)
|
||
|
btn1.set_size(lv.SIZE.CONTENT, lv.SIZE.CONTENT)
|
||
|
btn1.center()
|
||
|
|
||
|
label = lv.label(btn1)
|
||
|
label.set_text("Button")
|
||
|
label.center()
|
||
|
|