summaryrefslogtreecommitdiff
path: root/lib/lvgl/examples/event
diff options
context:
space:
mode:
authorjacqueline <me@jacqueline.id.au>2023-06-01 15:41:47 +1000
committerjacqueline <me@jacqueline.id.au>2023-06-01 15:41:47 +1000
commitdd27c3530432ea0b09f01e604bf577f31d8ef841 (patch)
treebbf86cf81a78f0ff0b07f31f1c390db473f26fd3 /lib/lvgl/examples/event
parent6fd588e970470b15936187980829916d0dbe77bb (diff)
downloadtangara-fw-dd27c3530432ea0b09f01e604bf577f31d8ef841.tar.gz
convert lvgl from submodule to a plain old directory
Diffstat (limited to 'lib/lvgl/examples/event')
m---------lib/lvgl0
-rw-r--r--lib/lvgl/examples/event/index.rst19
-rw-r--r--lib/lvgl/examples/event/lv_example_event.h41
-rw-r--r--lib/lvgl/examples/event/lv_example_event_1.c30
-rw-r--r--lib/lvgl/examples/event/lv_example_event_1.py25
-rw-r--r--lib/lvgl/examples/event/lv_example_event_2.c46
-rw-r--r--lib/lvgl/examples/event/lv_example_event_2.py22
-rw-r--r--lib/lvgl/examples/event/lv_example_event_3.c44
-rw-r--r--lib/lvgl/examples/event/lv_example_event_3.py32
-rw-r--r--lib/lvgl/examples/event/lv_example_event_4.c66
10 files changed, 325 insertions, 0 deletions
diff --git a/lib/lvgl b/lib/lvgl
deleted file mode 160000
-Subproject 0732400e7b564dd0e7dc4a924619d8e19c5b23a
diff --git a/lib/lvgl/examples/event/index.rst b/lib/lvgl/examples/event/index.rst
new file mode 100644
index 00000000..a556ac8c
--- /dev/null
+++ b/lib/lvgl/examples/event/index.rst
@@ -0,0 +1,19 @@
+
+Button click event
+"""""""""""""""""""
+
+.. lv_example:: event/lv_example_event_1
+ :language: c
+
+Handle multiple events
+""""""""""""""""""""""""
+.. lv_example:: event/lv_example_event_2
+ :language: c
+
+
+Event bubbling
+""""""""""""""""""""""""
+.. lv_example:: event/lv_example_event_3
+ :language: c
+
+
diff --git a/lib/lvgl/examples/event/lv_example_event.h b/lib/lvgl/examples/event/lv_example_event.h
new file mode 100644
index 00000000..591f4f94
--- /dev/null
+++ b/lib/lvgl/examples/event/lv_example_event.h
@@ -0,0 +1,41 @@
+/**
+ * @file lv_example_event.h
+ *
+ */
+
+#ifndef LV_EXAMPLE_EVENT_H
+#define LV_EXAMPLE_EVENT_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/*********************
+ * INCLUDES
+ *********************/
+
+/*********************
+ * DEFINES
+ *********************/
+
+/**********************
+ * TYPEDEFS
+ **********************/
+
+/**********************
+ * GLOBAL PROTOTYPES
+ **********************/
+void lv_example_event_1(void);
+void lv_example_event_2(void);
+void lv_example_event_3(void);
+void lv_example_event_4(void);
+
+/**********************
+ * MACROS
+ **********************/
+
+#ifdef __cplusplus
+} /*extern "C"*/
+#endif
+
+#endif /*LV_EXAMPLE_EVENT_H*/
diff --git a/lib/lvgl/examples/event/lv_example_event_1.c b/lib/lvgl/examples/event/lv_example_event_1.c
new file mode 100644
index 00000000..5be478e1
--- /dev/null
+++ b/lib/lvgl/examples/event/lv_example_event_1.c
@@ -0,0 +1,30 @@
+#include "../lv_examples.h"
+#if LV_BUILD_EXAMPLES && LV_USE_SWITCH
+
+static void event_cb(lv_event_t * e)
+{
+ LV_LOG_USER("Clicked");
+
+ static uint32_t cnt = 1;
+ lv_obj_t * btn = lv_event_get_target(e);
+ lv_obj_t * label = lv_obj_get_child(btn, 0);
+ lv_label_set_text_fmt(label, "%"LV_PRIu32, cnt);
+ cnt++;
+}
+
+/**
+ * Add click event to a button
+ */
+void lv_example_event_1(void)
+{
+ lv_obj_t * btn = lv_btn_create(lv_scr_act());
+ lv_obj_set_size(btn, 100, 50);
+ lv_obj_center(btn);
+ lv_obj_add_event_cb(btn, event_cb, LV_EVENT_CLICKED, NULL);
+
+ lv_obj_t * label = lv_label_create(btn);
+ lv_label_set_text(label, "Click me!");
+ lv_obj_center(label);
+}
+
+#endif
diff --git a/lib/lvgl/examples/event/lv_example_event_1.py b/lib/lvgl/examples/event/lv_example_event_1.py
new file mode 100644
index 00000000..93376cf3
--- /dev/null
+++ b/lib/lvgl/examples/event/lv_example_event_1.py
@@ -0,0 +1,25 @@
+class Event_1():
+ def __init__(self):
+ self.cnt = 1
+ #
+ # Add click event to a button
+ #
+
+ btn = lv.btn(lv.scr_act())
+ btn.set_size(100, 50)
+ btn.center()
+ btn.add_event_cb(self.event_cb, lv.EVENT.CLICKED, None)
+
+ label = lv.label(btn)
+ label.set_text("Click me!")
+ label.center()
+
+ def event_cb(self,e):
+ print("Clicked")
+
+ btn = e.get_target()
+ label = btn.get_child(0)
+ label.set_text(str(self.cnt))
+ self.cnt += 1
+
+evt1 = Event_1()
diff --git a/lib/lvgl/examples/event/lv_example_event_2.c b/lib/lvgl/examples/event/lv_example_event_2.c
new file mode 100644
index 00000000..24991425
--- /dev/null
+++ b/lib/lvgl/examples/event/lv_example_event_2.c
@@ -0,0 +1,46 @@
+#include "../lv_examples.h"
+#if LV_BUILD_EXAMPLES && LV_USE_SWITCH
+
+static void event_cb(lv_event_t * e)
+{
+ lv_event_code_t code = lv_event_get_code(e);
+ lv_obj_t * label = lv_event_get_user_data(e);
+
+ switch(code) {
+ case LV_EVENT_PRESSED:
+ lv_label_set_text(label, "The last button event:\nLV_EVENT_PRESSED");
+ break;
+ case LV_EVENT_CLICKED:
+ lv_label_set_text(label, "The last button event:\nLV_EVENT_CLICKED");
+ break;
+ case LV_EVENT_LONG_PRESSED:
+ lv_label_set_text(label, "The last button event:\nLV_EVENT_LONG_PRESSED");
+ break;
+ case LV_EVENT_LONG_PRESSED_REPEAT:
+ lv_label_set_text(label, "The last button event:\nLV_EVENT_LONG_PRESSED_REPEAT");
+ break;
+ default:
+ break;
+ }
+}
+
+/**
+ * Handle multiple events
+ */
+void lv_example_event_2(void)
+{
+ lv_obj_t * btn = lv_btn_create(lv_scr_act());
+ lv_obj_set_size(btn, 100, 50);
+ lv_obj_center(btn);
+
+ lv_obj_t * btn_label = lv_label_create(btn);
+ lv_label_set_text(btn_label, "Click me!");
+ lv_obj_center(btn_label);
+
+ lv_obj_t * info_label = lv_label_create(lv_scr_act());
+ lv_label_set_text(info_label, "The last button event:\nNone");
+
+ lv_obj_add_event_cb(btn, event_cb, LV_EVENT_ALL, info_label);
+}
+
+#endif
diff --git a/lib/lvgl/examples/event/lv_example_event_2.py b/lib/lvgl/examples/event/lv_example_event_2.py
new file mode 100644
index 00000000..31392691
--- /dev/null
+++ b/lib/lvgl/examples/event/lv_example_event_2.py
@@ -0,0 +1,22 @@
+def event_cb(e,label):
+ code = e.get_code()
+ if code == lv.EVENT.PRESSED:
+ label.set_text("The last button event:\nLV_EVENT_PRESSED")
+ elif code == lv.EVENT.CLICKED:
+ label.set_text("The last button event:\nLV_EVENT_CLICKED")
+ elif code == lv.EVENT.LONG_PRESSED:
+ label.set_text("The last button event:\nLV_EVENT_LONG_PRESSED")
+ elif code == lv.EVENT.LONG_PRESSED_REPEAT:
+ label.set_text("The last button event:\nLV_EVENT_LONG_PRESSED_REPEAT")
+btn = lv.btn(lv.scr_act())
+btn.set_size(100, 50)
+btn.center()
+
+btn_label = lv.label(btn)
+btn_label.set_text("Click me!")
+btn_label.center()
+
+info_label = lv.label(lv.scr_act())
+info_label.set_text("The last button event:\nNone")
+
+btn.add_event_cb(lambda e: event_cb(e,info_label), lv.EVENT.ALL, None)
diff --git a/lib/lvgl/examples/event/lv_example_event_3.c b/lib/lvgl/examples/event/lv_example_event_3.c
new file mode 100644
index 00000000..5ead9440
--- /dev/null
+++ b/lib/lvgl/examples/event/lv_example_event_3.c
@@ -0,0 +1,44 @@
+#include "../lv_examples.h"
+#if LV_BUILD_EXAMPLES && LV_USE_FLEX
+
+static void event_cb(lv_event_t * e)
+{
+ /*The original target of the event. Can be the buttons or the container*/
+ lv_obj_t * target = lv_event_get_target(e);
+
+ /*The current target is always the container as the event is added to it*/
+ lv_obj_t * cont = lv_event_get_current_target(e);
+
+ /*If container was clicked do nothing*/
+ if(target == cont) return;
+
+ /*Make the clicked buttons red*/
+ lv_obj_set_style_bg_color(target, lv_palette_main(LV_PALETTE_RED), 0);
+}
+
+/**
+ * Demonstrate event bubbling
+ */
+void lv_example_event_3(void)
+{
+
+ lv_obj_t * cont = lv_obj_create(lv_scr_act());
+ lv_obj_set_size(cont, 290, 200);
+ lv_obj_center(cont);
+ lv_obj_set_flex_flow(cont, LV_FLEX_FLOW_ROW_WRAP);
+
+ uint32_t i;
+ for(i = 0; i < 30; i++) {
+ lv_obj_t * btn = lv_btn_create(cont);
+ lv_obj_set_size(btn, 80, 50);
+ lv_obj_add_flag(btn, LV_OBJ_FLAG_EVENT_BUBBLE);
+
+ lv_obj_t * label = lv_label_create(btn);
+ lv_label_set_text_fmt(label, "%"LV_PRIu32, i);
+ lv_obj_center(label);
+ }
+
+ lv_obj_add_event_cb(cont, event_cb, LV_EVENT_CLICKED, NULL);
+}
+
+#endif
diff --git a/lib/lvgl/examples/event/lv_example_event_3.py b/lib/lvgl/examples/event/lv_example_event_3.py
new file mode 100644
index 00000000..197b9b2e
--- /dev/null
+++ b/lib/lvgl/examples/event/lv_example_event_3.py
@@ -0,0 +1,32 @@
+def event_cb(e):
+
+ # The original target of the event. Can be the buttons or the container
+ target = e.get_target()
+ # print(type(target))
+
+ # If container was clicked do nothing
+ if type(target) != type(lv.btn()):
+ return
+
+ # Make the clicked buttons red
+ target.set_style_bg_color(lv.palette_main(lv.PALETTE.RED), 0)
+
+#
+# Demonstrate event bubbling
+#
+
+cont = lv.obj(lv.scr_act())
+cont.set_size(320, 200)
+cont.center()
+cont.set_flex_flow(lv.FLEX_FLOW.ROW_WRAP)
+
+for i in range(30):
+ btn = lv.btn(cont)
+ btn.set_size(80, 50)
+ btn.add_flag(lv.obj.FLAG.EVENT_BUBBLE)
+
+ label = lv.label(btn)
+ label.set_text(str(i))
+ label.center()
+
+cont.add_event_cb(event_cb, lv.EVENT.CLICKED, None)
diff --git a/lib/lvgl/examples/event/lv_example_event_4.c b/lib/lvgl/examples/event/lv_example_event_4.c
new file mode 100644
index 00000000..7d459b81
--- /dev/null
+++ b/lib/lvgl/examples/event/lv_example_event_4.c
@@ -0,0 +1,66 @@
+#include "../lv_examples.h"
+
+#if LV_BUILD_EXAMPLES
+
+static int n = 3;
+static lv_obj_t * label = NULL;
+
+static void timer_cb(lv_timer_t * timer)
+{
+ if(n < 3 || n > 32) {
+ n = 3;
+ }
+ else {
+ static uint32_t old_tick = 0;
+ uint32_t tick = lv_tick_get();
+ if(!old_tick) {
+ old_tick = tick;
+ }
+ if(tick - old_tick > 3000) {
+ n++;
+ lv_label_set_text_fmt(label, "%d sides", n);
+ old_tick = tick;
+ }
+ }
+ lv_obj_invalidate(timer->user_data);
+}
+
+static void event_cb(lv_event_t * e)
+{
+ /*The original target of the event. Can be the buttons or the container*/
+ lv_draw_ctx_t * draw_ctx = lv_event_get_draw_ctx(e);
+ lv_draw_rect_dsc_t draw_dsc;
+ lv_draw_rect_dsc_init(&draw_dsc);
+ draw_dsc.bg_color = lv_palette_main(LV_PALETTE_LIGHT_GREEN);
+ draw_dsc.bg_opa = LV_OPA_COVER;
+ lv_point_t points[32];
+ int i, r = 150;
+ uint32_t tick = lv_tick_get();
+ for(i = 0; i < n; i++) {
+ int angle = i * 360 / n + ((tick % 36000) / 100);
+ lv_coord_t x = 150 + (r * lv_trigo_cos(angle) >> LV_TRIGO_SHIFT), y =
+ 150 + (r * lv_trigo_sin(angle) >> LV_TRIGO_SHIFT);
+ points[i].x = x;
+ points[i].y = y;
+ }
+ lv_draw_polygon(draw_ctx, &draw_dsc, points, n);
+}
+
+/**
+ * Demonstrate event bubbling
+ */
+void lv_example_event_4(void)
+{
+
+ lv_obj_t * cont = lv_obj_create(lv_scr_act());
+ lv_obj_remove_style_all(cont);
+ lv_obj_set_size(cont, 300, 300);
+ label = lv_label_create(cont);
+ lv_label_set_text_fmt(label, "%d sides", n);
+ lv_obj_center(label);
+
+ lv_obj_add_event_cb(cont, event_cb, LV_EVENT_DRAW_MAIN, NULL);
+ lv_timer_create(timer_cb, 17, cont);
+}
+
+#endif