summaryrefslogtreecommitdiff
path: root/lib/lvgl/examples/widgets/buttonmatrix
diff options
context:
space:
mode:
authorjacqueline <me@jacqueline.id.au>2024-06-12 17:54:40 +1000
committerjacqueline <me@jacqueline.id.au>2024-06-12 17:54:40 +1000
commit64bd9053a25297f7a442ca831c7da5b44bd33f84 (patch)
treea90c6cad25a12028302ab1a5334510fba0229bae /lib/lvgl/examples/widgets/buttonmatrix
parent611176ed667c4ed7ee9f609e958f9404f4aee91d (diff)
downloadtangara-fw-64bd9053a25297f7a442ca831c7da5b44bd33f84.tar.gz
Update LVGL to v9.1.0
Diffstat (limited to 'lib/lvgl/examples/widgets/buttonmatrix')
-rw-r--r--lib/lvgl/examples/widgets/buttonmatrix/index.rst22
-rw-r--r--lib/lvgl/examples/widgets/buttonmatrix/lv_example_buttonmatrix_1.c32
-rw-r--r--lib/lvgl/examples/widgets/buttonmatrix/lv_example_buttonmatrix_2.c87
-rw-r--r--lib/lvgl/examples/widgets/buttonmatrix/lv_example_buttonmatrix_3.c67
4 files changed, 208 insertions, 0 deletions
diff --git a/lib/lvgl/examples/widgets/buttonmatrix/index.rst b/lib/lvgl/examples/widgets/buttonmatrix/index.rst
new file mode 100644
index 00000000..06a8f752
--- /dev/null
+++ b/lib/lvgl/examples/widgets/buttonmatrix/index.rst
@@ -0,0 +1,22 @@
+
+Simple Button matrix
+--------------------
+
+.. lv_example:: widgets/buttonmatrix/lv_example_buttonmatrix_1
+ :language: c
+
+
+Custom buttons
+--------------
+
+.. lv_example:: widgets/buttonmatrix/lv_example_buttonmatrix_2
+ :language: c
+
+
+Pagination
+----------
+
+.. lv_example:: widgets/buttonmatrix/lv_example_buttonmatrix_3
+ :language: c
+
+
diff --git a/lib/lvgl/examples/widgets/buttonmatrix/lv_example_buttonmatrix_1.c b/lib/lvgl/examples/widgets/buttonmatrix/lv_example_buttonmatrix_1.c
new file mode 100644
index 00000000..baa2057c
--- /dev/null
+++ b/lib/lvgl/examples/widgets/buttonmatrix/lv_example_buttonmatrix_1.c
@@ -0,0 +1,32 @@
+#include "../../lv_examples.h"
+#if LV_USE_BUTTONMATRIX && 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_buttonmatrix_get_selected_button(obj);
+ const char * txt = lv_buttonmatrix_get_button_text(obj, id);
+ LV_UNUSED(txt);
+ 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_buttonmatrix_1(void)
+{
+ lv_obj_t * btnm1 = lv_buttonmatrix_create(lv_screen_active());
+ lv_buttonmatrix_set_map(btnm1, btnm_map);
+ lv_buttonmatrix_set_button_width(btnm1, 10, 2); /*Make "Action1" twice as wide as "Action2"*/
+ lv_buttonmatrix_set_button_ctrl(btnm1, 10, LV_BUTTONMATRIX_CTRL_CHECKABLE);
+ lv_buttonmatrix_set_button_ctrl(btnm1, 11, LV_BUTTONMATRIX_CTRL_CHECKED);
+ lv_obj_align(btnm1, LV_ALIGN_CENTER, 0, 0);
+ lv_obj_add_event_cb(btnm1, event_handler, LV_EVENT_ALL, NULL);
+}
+
+#endif
diff --git a/lib/lvgl/examples/widgets/buttonmatrix/lv_example_buttonmatrix_2.c b/lib/lvgl/examples/widgets/buttonmatrix/lv_example_buttonmatrix_2.c
new file mode 100644
index 00000000..f355e37d
--- /dev/null
+++ b/lib/lvgl/examples/widgets/buttonmatrix/lv_example_buttonmatrix_2.c
@@ -0,0 +1,87 @@
+#include "../../lv_examples.h"
+#if LV_USE_BUTTONMATRIX && LV_BUILD_EXAMPLES
+
+static void event_cb(lv_event_t * e)
+{
+ lv_obj_t * obj = lv_event_get_target(e);
+ lv_draw_task_t * draw_task = lv_event_get_draw_task(e);
+ lv_draw_dsc_base_t * base_dsc = draw_task->draw_dsc;
+ /*When the button matrix draws the buttons...*/
+ if(base_dsc->part == LV_PART_ITEMS) {
+ bool pressed = false;
+ if(lv_buttonmatrix_get_selected_button(obj) == base_dsc->id1 && lv_obj_has_state(obj, LV_STATE_PRESSED)) {
+ pressed = true;
+ }
+
+ /*Change the draw descriptor of the 2nd button*/
+ if(base_dsc->id1 == 1) {
+ lv_draw_fill_dsc_t * fill_draw_dsc = lv_draw_task_get_fill_dsc(draw_task);
+ if(fill_draw_dsc) {
+ fill_draw_dsc->radius = 0;
+ if(pressed) fill_draw_dsc->color = lv_palette_darken(LV_PALETTE_BLUE, 3);
+ else fill_draw_dsc->color = lv_palette_main(LV_PALETTE_BLUE);
+ }
+ lv_draw_box_shadow_dsc_t * box_shadow_draw_dsc = lv_draw_task_get_box_shadow_dsc(draw_task);
+ if(box_shadow_draw_dsc) {
+ box_shadow_draw_dsc->width = 6;
+ box_shadow_draw_dsc->ofs_x = 3;
+ box_shadow_draw_dsc->ofs_y = 3;
+ }
+ lv_draw_label_dsc_t * label_draw_dsc = lv_draw_task_get_label_dsc(draw_task);
+ if(label_draw_dsc) {
+ label_draw_dsc->color = lv_color_white();
+ }
+
+ }
+ /*Change the draw descriptor of the 3rd button*/
+ else if(base_dsc->id1 == 2) {
+ lv_draw_fill_dsc_t * fill_draw_dsc = lv_draw_task_get_fill_dsc(draw_task);
+ if(fill_draw_dsc) {
+ fill_draw_dsc->radius = LV_RADIUS_CIRCLE;
+ if(pressed) fill_draw_dsc->color = lv_palette_darken(LV_PALETTE_RED, 3);
+ else fill_draw_dsc->color = lv_palette_main(LV_PALETTE_RED);
+ }
+ }
+ else if(base_dsc->id1 == 3) {
+ lv_draw_label_dsc_t * label_draw_dsc = lv_draw_task_get_label_dsc(draw_task);
+ if(label_draw_dsc) {
+ label_draw_dsc->opa = 0;
+ }
+ if(draw_task->type == LV_DRAW_TASK_TYPE_FILL) {
+ LV_IMAGE_DECLARE(img_star);
+ lv_image_header_t header;
+ lv_result_t res = lv_image_decoder_get_info(&img_star, &header);
+ if(res != LV_RESULT_OK) return;
+
+ lv_area_t a;
+ a.x1 = 0;
+ a.x2 = header.w - 1;
+ a.y1 = 0;
+ a.y2 = header.h - 1;
+ lv_area_align(&draw_task->area, &a, LV_ALIGN_CENTER, 0, 0);
+
+ lv_draw_image_dsc_t img_draw_dsc;
+ lv_draw_image_dsc_init(&img_draw_dsc);
+ img_draw_dsc.src = &img_star;
+ img_draw_dsc.recolor = lv_color_black();
+ if(pressed) img_draw_dsc.recolor_opa = LV_OPA_30;
+
+ lv_draw_image(base_dsc->layer, &img_draw_dsc, &a);
+
+ }
+ }
+ }
+}
+
+/**
+ * Add custom drawer to the button matrix to customize buttons one by one
+ */
+void lv_example_buttonmatrix_2(void)
+{
+ lv_obj_t * btnm = lv_buttonmatrix_create(lv_screen_active());
+ lv_obj_add_event_cb(btnm, event_cb, LV_EVENT_DRAW_TASK_ADDED, NULL);
+ lv_obj_add_flag(btnm, LV_OBJ_FLAG_SEND_DRAW_TASK_EVENTS);
+ lv_obj_center(btnm);
+}
+
+#endif
diff --git a/lib/lvgl/examples/widgets/buttonmatrix/lv_example_buttonmatrix_3.c b/lib/lvgl/examples/widgets/buttonmatrix/lv_example_buttonmatrix_3.c
new file mode 100644
index 00000000..d8e84d29
--- /dev/null
+++ b/lib/lvgl/examples/widgets/buttonmatrix/lv_example_buttonmatrix_3.c
@@ -0,0 +1,67 @@
+#include "../../lv_examples.h"
+#if LV_USE_BUTTONMATRIX && LV_BUILD_EXAMPLES
+
+static void event_cb(lv_event_t * e)
+{
+ lv_obj_t * obj = lv_event_get_target(e);
+ uint32_t id = lv_buttonmatrix_get_selected_button(obj);
+ bool prev = id == 0;
+ bool next = id == 6;
+ if(prev || next) {
+ /*Find the checked button*/
+ uint32_t i;
+ for(i = 1; i < 7; i++) {
+ if(lv_buttonmatrix_has_button_ctrl(obj, i, LV_BUTTONMATRIX_CTRL_CHECKED)) break;
+ }
+
+ if(prev && i > 1) i--;
+ else if(next && i < 5) i++;
+
+ lv_buttonmatrix_set_button_ctrl(obj, i, LV_BUTTONMATRIX_CTRL_CHECKED);
+ }
+}
+
+/**
+ * Make a button group (pagination)
+ */
+void lv_example_buttonmatrix_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_buttonmatrix_create(lv_screen_active());
+ lv_buttonmatrix_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_buttonmatrix_set_button_ctrl_all(btnm, LV_BUTTONMATRIX_CTRL_CHECKABLE);
+ lv_buttonmatrix_clear_button_ctrl(btnm, 0, LV_BUTTONMATRIX_CTRL_CHECKABLE);
+ lv_buttonmatrix_clear_button_ctrl(btnm, 6, LV_BUTTONMATRIX_CTRL_CHECKABLE);
+
+ lv_buttonmatrix_set_one_checked(btnm, true);
+ lv_buttonmatrix_set_button_ctrl(btnm, 1, LV_BUTTONMATRIX_CTRL_CHECKED);
+
+ lv_obj_center(btnm);
+
+}
+
+#endif