init lvgl code
This commit is contained in:
22
LVGL.Simulator/lvgl/examples/widgets/btnmatrix/index.rst
Normal file
22
LVGL.Simulator/lvgl/examples/widgets/btnmatrix/index.rst
Normal file
@@ -0,0 +1,22 @@
|
||||
|
||||
Simple Button matrix
|
||||
""""""""""""""""""""""
|
||||
|
||||
.. lv_example:: widgets/btnmatrix/lv_example_btnmatrix_1
|
||||
:language: c
|
||||
|
||||
|
||||
Custom buttons
|
||||
""""""""""""""""""""""
|
||||
|
||||
.. lv_example:: widgets/btnmatrix/lv_example_btnmatrix_2
|
||||
:language: c
|
||||
|
||||
|
||||
Pagination
|
||||
""""""""""""""""""""""
|
||||
|
||||
.. lv_example:: widgets/btnmatrix/lv_example_btnmatrix_3
|
||||
:language: c
|
||||
|
||||
|
||||
@@ -0,0 +1,33 @@
|
||||
#include "../../lv_examples.h"
|
||||
#if LV_USE_BTNMATRIX && LV_BUILD_EXAMPLES
|
||||
|
||||
static void event_handler(lv_event_t * e)
|
||||
{
|
||||
lv_event_code_t code = lv_event_get_code(e);
|
||||
lv_obj_t * obj = lv_event_get_target(e);
|
||||
if(code == LV_EVENT_VALUE_CHANGED) {
|
||||
uint32_t id = lv_btnmatrix_get_selected_btn(obj);
|
||||
const char * txt = lv_btnmatrix_get_btn_text(obj, id);
|
||||
|
||||
LV_LOG_USER("%s was pressed\n", txt);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
static const char * btnm_map[] = {"1", "2", "3", "4", "5", "\n",
|
||||
"6", "7", "8", "9", "0", "\n",
|
||||
"Action1", "Action2", ""
|
||||
};
|
||||
|
||||
void lv_example_btnmatrix_1(void)
|
||||
{
|
||||
lv_obj_t * btnm1 = lv_btnmatrix_create(lv_scr_act());
|
||||
lv_btnmatrix_set_map(btnm1, btnm_map);
|
||||
lv_btnmatrix_set_btn_width(btnm1, 10, 2); /*Make "Action1" twice as wide as "Action2"*/
|
||||
lv_btnmatrix_set_btn_ctrl(btnm1, 10, LV_BTNMATRIX_CTRL_CHECKABLE);
|
||||
lv_btnmatrix_set_btn_ctrl(btnm1, 11, LV_BTNMATRIX_CTRL_CHECKED);
|
||||
lv_obj_align(btnm1, LV_ALIGN_CENTER, 0, 0);
|
||||
lv_obj_add_event_cb(btnm1, event_handler, LV_EVENT_ALL, NULL);
|
||||
}
|
||||
|
||||
#endif
|
||||
@@ -0,0 +1,24 @@
|
||||
def event_handler(evt):
|
||||
code = evt.get_code()
|
||||
obj = evt.get_target()
|
||||
|
||||
if code == lv.EVENT.VALUE_CHANGED :
|
||||
id = obj.get_selected_btn()
|
||||
txt = obj.get_btn_text(id)
|
||||
|
||||
print("%s was pressed"%txt)
|
||||
|
||||
btnm_map = ["1", "2", "3", "4", "5", "\n",
|
||||
"6", "7", "8", "9", "0", "\n",
|
||||
"Action1", "Action2", ""]
|
||||
|
||||
btnm1 = lv.btnmatrix(lv.scr_act())
|
||||
btnm1.set_map(btnm_map)
|
||||
btnm1.set_btn_width(10, 2) # Make "Action1" twice as wide as "Action2"
|
||||
btnm1.set_btn_ctrl(10, lv.btnmatrix.CTRL.CHECKABLE)
|
||||
btnm1.set_btn_ctrl(11, lv.btnmatrix.CTRL.CHECKED)
|
||||
btnm1.align(lv.ALIGN.CENTER, 0, 0)
|
||||
btnm1.add_event_cb(event_handler, lv.EVENT.ALL, None)
|
||||
|
||||
|
||||
#endif
|
||||
@@ -0,0 +1,72 @@
|
||||
#include "../../lv_examples.h"
|
||||
#if LV_USE_BTNMATRIX && LV_BUILD_EXAMPLES
|
||||
|
||||
|
||||
static void event_cb(lv_event_t * e)
|
||||
{
|
||||
lv_event_code_t code = lv_event_get_code(e);
|
||||
lv_obj_t * obj = lv_event_get_target(e);
|
||||
if(code == LV_EVENT_DRAW_PART_BEGIN) {
|
||||
lv_obj_draw_part_dsc_t * dsc = lv_event_get_param(e);
|
||||
|
||||
/*Change the draw descriptor the 2nd button*/
|
||||
if(dsc->id == 1) {
|
||||
dsc->rect_dsc->radius = 0;
|
||||
if(lv_btnmatrix_get_selected_btn(obj) == dsc->id) dsc->rect_dsc->bg_color = lv_palette_darken(LV_PALETTE_BLUE, 3);
|
||||
else dsc->rect_dsc->bg_color = lv_palette_main(LV_PALETTE_BLUE);
|
||||
|
||||
dsc->rect_dsc->shadow_width = 6;
|
||||
dsc->rect_dsc->shadow_ofs_x = 3;
|
||||
dsc->rect_dsc->shadow_ofs_y = 3;
|
||||
dsc->label_dsc->color = lv_color_white();
|
||||
}
|
||||
/*Change the draw descriptor the 3rd button*/
|
||||
else if(dsc->id == 2) {
|
||||
dsc->rect_dsc->radius = LV_RADIUS_CIRCLE;
|
||||
if(lv_btnmatrix_get_selected_btn(obj) == dsc->id) dsc->rect_dsc->bg_color = lv_palette_darken(LV_PALETTE_RED, 3);
|
||||
else dsc->rect_dsc->bg_color = lv_palette_main(LV_PALETTE_RED);
|
||||
|
||||
dsc->label_dsc->color = lv_color_white();
|
||||
}
|
||||
else if(dsc->id == 3) {
|
||||
dsc->label_dsc->opa = LV_OPA_TRANSP; /*Hide the text if any*/
|
||||
|
||||
}
|
||||
}
|
||||
if(code == LV_EVENT_DRAW_PART_END) {
|
||||
lv_obj_draw_part_dsc_t * dsc = lv_event_get_param(e);
|
||||
|
||||
/*Add custom content to the 4th button when the button itself was drawn*/
|
||||
if(dsc->id == 3) {
|
||||
LV_IMG_DECLARE(img_star);
|
||||
lv_img_header_t header;
|
||||
lv_res_t res = lv_img_decoder_get_info(&img_star, &header);
|
||||
if(res != LV_RES_OK) return;
|
||||
|
||||
lv_area_t a;
|
||||
a.x1 = dsc->draw_area->x1 + (lv_area_get_width(dsc->draw_area) - header.w) / 2;
|
||||
a.x2 = a.x1 + header.w - 1;
|
||||
a.y1 = dsc->draw_area->y1 + (lv_area_get_height(dsc->draw_area) - header.h) / 2;
|
||||
a.y2 = a.y1 + header.h - 1;
|
||||
|
||||
lv_draw_img_dsc_t img_draw_dsc;
|
||||
lv_draw_img_dsc_init(&img_draw_dsc);
|
||||
img_draw_dsc.recolor = lv_color_black();
|
||||
if(lv_btnmatrix_get_selected_btn(obj) == dsc->id) img_draw_dsc.recolor_opa = LV_OPA_30;
|
||||
|
||||
lv_draw_img(dsc->draw_ctx, &img_draw_dsc, &a, &img_star);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Add custom drawer to the button matrix to customize buttons one by one
|
||||
*/
|
||||
void lv_example_btnmatrix_2(void)
|
||||
{
|
||||
lv_obj_t * btnm = lv_btnmatrix_create(lv_scr_act());
|
||||
lv_obj_add_event_cb(btnm, event_cb, LV_EVENT_ALL, NULL);
|
||||
lv_obj_center(btnm);
|
||||
}
|
||||
|
||||
#endif
|
||||
@@ -0,0 +1,81 @@
|
||||
from imagetools import get_png_info, open_png
|
||||
|
||||
# Register PNG image decoder
|
||||
decoder = lv.img.decoder_create()
|
||||
decoder.info_cb = get_png_info
|
||||
decoder.open_cb = open_png
|
||||
|
||||
# Create an image from the png file
|
||||
try:
|
||||
with open('../../assets/img_star.png','rb') as f:
|
||||
png_data = f.read()
|
||||
except:
|
||||
print("Could not find star.png")
|
||||
sys.exit()
|
||||
|
||||
img_star_argb = lv.img_dsc_t({
|
||||
'data_size': len(png_data),
|
||||
'data': png_data
|
||||
})
|
||||
|
||||
def event_cb(e):
|
||||
code = e.get_code()
|
||||
obj = e.get_target()
|
||||
dsc = lv.obj_draw_part_dsc_t.__cast__(e.get_param())
|
||||
if code == lv.EVENT.DRAW_PART_BEGIN:
|
||||
# Change the draw descriptor the 2nd button
|
||||
if dsc.id == 1:
|
||||
dsc.rect_dsc.radius = 0
|
||||
if obj.get_selected_btn() == dsc.id:
|
||||
dsc.rect_dsc.bg_color = lv.palette_darken(lv.PALETTE.GREY, 3)
|
||||
else:
|
||||
dsc.rect_dsc.bg_color = lv.palette_main(lv.PALETTE.BLUE)
|
||||
|
||||
dsc.rect_dsc.shadow_width = 6
|
||||
dsc.rect_dsc.shadow_ofs_x = 3
|
||||
dsc.rect_dsc.shadow_ofs_y = 3
|
||||
dsc.label_dsc.color = lv.color_white()
|
||||
|
||||
# Change the draw descriptor the 3rd button
|
||||
|
||||
elif dsc.id == 2:
|
||||
dsc.rect_dsc.radius = lv.RADIUS.CIRCLE
|
||||
if obj.get_selected_btn() == dsc.id:
|
||||
dsc.rect_dsc.bg_color = lv.palette_darken(lv.PALETTE.RED, 3)
|
||||
else:
|
||||
dsc.rect_dsc.bg_color = lv.palette_main(lv.PALETTE.RED)
|
||||
|
||||
dsc.label_dsc.color = lv.color_white()
|
||||
elif dsc.id == 3:
|
||||
dsc.label_dsc.opa = lv.OPA.TRANSP # Hide the text if any
|
||||
|
||||
if code == lv.EVENT.DRAW_PART_END:
|
||||
# Add custom content to the 4th button when the button itself was drawn
|
||||
if dsc.id == 3:
|
||||
# LV_IMG_DECLARE(img_star)
|
||||
header = lv.img_header_t()
|
||||
res = lv.img.decoder_get_info(img_star_argb, header)
|
||||
if res != lv.RES.OK:
|
||||
print("error when getting image header")
|
||||
return
|
||||
else:
|
||||
a = lv.area_t()
|
||||
a.x1 = dsc.draw_area.x1 + (dsc.draw_area.get_width() - header.w) // 2
|
||||
a.x2 = a.x1 + header.w - 1
|
||||
a.y1 = dsc.draw_area.y1 + (dsc.draw_area.get_height() - header.h) // 2
|
||||
a.y2 = a.y1 + header.h - 1
|
||||
img_draw_dsc = lv.draw_img_dsc_t()
|
||||
img_draw_dsc.init()
|
||||
img_draw_dsc.recolor = lv.color_black()
|
||||
if obj.get_selected_btn() == dsc.id:
|
||||
img_draw_dsc.recolor_opa = lv.OPA._30
|
||||
|
||||
dsc.draw_ctx.img(img_draw_dsc, a, img_star_argb)
|
||||
|
||||
#
|
||||
# Add custom drawer to the button matrix to c
|
||||
#
|
||||
btnm = lv.btnmatrix(lv.scr_act())
|
||||
btnm.add_event_cb(event_cb, lv.EVENT.ALL, None)
|
||||
btnm.center()
|
||||
|
||||
@@ -0,0 +1,68 @@
|
||||
#include "../../lv_examples.h"
|
||||
#if LV_USE_BTNMATRIX && LV_BUILD_EXAMPLES
|
||||
|
||||
static void event_cb(lv_event_t * e)
|
||||
{
|
||||
lv_obj_t * obj = lv_event_get_target(e);
|
||||
uint32_t id = lv_btnmatrix_get_selected_btn(obj);
|
||||
bool prev = id == 0 ? true : false;
|
||||
bool next = id == 6 ? true : false;
|
||||
if(prev || next) {
|
||||
/*Find the checked button*/
|
||||
uint32_t i;
|
||||
for(i = 1; i < 7; i++) {
|
||||
if(lv_btnmatrix_has_btn_ctrl(obj, i, LV_BTNMATRIX_CTRL_CHECKED)) break;
|
||||
}
|
||||
|
||||
if(prev && i > 1) i--;
|
||||
else if(next && i < 5) i++;
|
||||
|
||||
lv_btnmatrix_set_btn_ctrl(obj, i, LV_BTNMATRIX_CTRL_CHECKED);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Make a button group (pagination)
|
||||
*/
|
||||
void lv_example_btnmatrix_3(void)
|
||||
{
|
||||
static lv_style_t style_bg;
|
||||
lv_style_init(&style_bg);
|
||||
lv_style_set_pad_all(&style_bg, 0);
|
||||
lv_style_set_pad_gap(&style_bg, 0);
|
||||
lv_style_set_clip_corner(&style_bg, true);
|
||||
lv_style_set_radius(&style_bg, LV_RADIUS_CIRCLE);
|
||||
lv_style_set_border_width(&style_bg, 0);
|
||||
|
||||
|
||||
static lv_style_t style_btn;
|
||||
lv_style_init(&style_btn);
|
||||
lv_style_set_radius(&style_btn, 0);
|
||||
lv_style_set_border_width(&style_btn, 1);
|
||||
lv_style_set_border_opa(&style_btn, LV_OPA_50);
|
||||
lv_style_set_border_color(&style_btn, lv_palette_main(LV_PALETTE_GREY));
|
||||
lv_style_set_border_side(&style_btn, LV_BORDER_SIDE_INTERNAL);
|
||||
lv_style_set_radius(&style_btn, 0);
|
||||
|
||||
static const char * map[] = {LV_SYMBOL_LEFT, "1", "2", "3", "4", "5", LV_SYMBOL_RIGHT, ""};
|
||||
|
||||
lv_obj_t * btnm = lv_btnmatrix_create(lv_scr_act());
|
||||
lv_btnmatrix_set_map(btnm, map);
|
||||
lv_obj_add_style(btnm, &style_bg, 0);
|
||||
lv_obj_add_style(btnm, &style_btn, LV_PART_ITEMS);
|
||||
lv_obj_add_event_cb(btnm, event_cb, LV_EVENT_VALUE_CHANGED, NULL);
|
||||
lv_obj_set_size(btnm, 225, 35);
|
||||
|
||||
/*Allow selecting on one number at time*/
|
||||
lv_btnmatrix_set_btn_ctrl_all(btnm, LV_BTNMATRIX_CTRL_CHECKABLE);
|
||||
lv_btnmatrix_clear_btn_ctrl(btnm, 0, LV_BTNMATRIX_CTRL_CHECKABLE);
|
||||
lv_btnmatrix_clear_btn_ctrl(btnm, 6, LV_BTNMATRIX_CTRL_CHECKABLE);
|
||||
|
||||
lv_btnmatrix_set_one_checked(btnm, true);
|
||||
lv_btnmatrix_set_btn_ctrl(btnm, 1, LV_BTNMATRIX_CTRL_CHECKED);
|
||||
|
||||
lv_obj_center(btnm);
|
||||
|
||||
}
|
||||
|
||||
#endif
|
||||
@@ -0,0 +1,64 @@
|
||||
def event_cb(e):
|
||||
obj = e.get_target()
|
||||
id = obj.get_selected_btn()
|
||||
if id == 0:
|
||||
prev = True
|
||||
else:
|
||||
prev = False
|
||||
if id == 6:
|
||||
next = True
|
||||
else:
|
||||
next = False
|
||||
if prev or next:
|
||||
# Find the checked butto
|
||||
for i in range(7):
|
||||
if obj.has_btn_ctrl(i, lv.btnmatrix.CTRL.CHECKED):
|
||||
break
|
||||
if prev and i > 1:
|
||||
i-=1
|
||||
elif next and i < 5:
|
||||
i+=1
|
||||
|
||||
obj.set_btn_ctrl(i, lv.btnmatrix.CTRL.CHECKED)
|
||||
|
||||
#
|
||||
# Make a button group
|
||||
#
|
||||
|
||||
style_bg = lv.style_t()
|
||||
style_bg.init()
|
||||
style_bg.set_pad_all(0)
|
||||
style_bg.set_pad_gap(0)
|
||||
style_bg.set_clip_corner(True)
|
||||
style_bg.set_radius(lv.RADIUS.CIRCLE)
|
||||
style_bg.set_border_width(0)
|
||||
|
||||
|
||||
style_btn = lv.style_t()
|
||||
style_btn.init()
|
||||
style_btn.set_radius(0)
|
||||
style_btn.set_border_width(1)
|
||||
style_btn.set_border_opa(lv.OPA._50)
|
||||
style_btn.set_border_color(lv.palette_main(lv.PALETTE.GREY))
|
||||
style_btn.set_border_side(lv.BORDER_SIDE.INTERNAL)
|
||||
style_btn.set_radius(0)
|
||||
|
||||
map = [lv.SYMBOL.LEFT,"1","2", "3", "4", "5",lv.SYMBOL.RIGHT, ""]
|
||||
|
||||
btnm = lv.btnmatrix(lv.scr_act())
|
||||
btnm.set_map(map)
|
||||
btnm.add_style(style_bg, 0)
|
||||
btnm.add_style(style_btn, lv.PART.ITEMS)
|
||||
btnm.add_event_cb(event_cb, lv.EVENT.VALUE_CHANGED, None)
|
||||
btnm.set_size(225, 35)
|
||||
|
||||
# Allow selecting on one number at time
|
||||
btnm.set_btn_ctrl_all(lv.btnmatrix.CTRL.CHECKABLE)
|
||||
btnm.clear_btn_ctrl(0, lv.btnmatrix.CTRL.CHECKABLE)
|
||||
btnm.clear_btn_ctrl(6, lv.btnmatrix.CTRL.CHECKABLE)
|
||||
|
||||
btnm.set_one_checked(True)
|
||||
btnm.set_btn_ctrl(1, lv.btnmatrix.CTRL.CHECKED)
|
||||
|
||||
btnm.center()
|
||||
|
||||
Reference in New Issue
Block a user