meta-digi/meta-digi-dey/recipes-graphics/lvgl/files/0004-lvgl-demo-add-input-de...

77 lines
2.5 KiB
Diff

From d7696f869a014d6fa15e25cf7818e43f3c110acb Mon Sep 17 00:00:00 2001
From: Mike Engel <Mike.Engel@digi.com>
Date: Tue, 2 Sep 2025 11:49:32 +0200
Subject: [PATCH] lvgl-demo: add input device discovery support to LVGL-demo
This commit adds input device discovery support to the demo.
When input device is a mouse it will create the cursor.
Signed-off-by: Mike Engel <Mike.Engel@digi.com>
---
main.c | 29 +++++++++++++++++++++++++++++
1 file changed, 29 insertions(+)
diff --git a/main.c b/main.c
index ba03f23..f821936 100644
--- a/main.c
+++ b/main.c
@@ -1,5 +1,6 @@
#include "lvgl/lvgl.h"
#include "lvgl/demos/lv_demos.h"
+#include "lvgl/src/core/lv_global.h"
#include <unistd.h>
#include <pthread.h>
#include <time.h>
@@ -11,6 +12,30 @@ static const char *getenv_default(const char *name, const char *dflt)
return getenv(name) ? : dflt;
}
+static void indev_deleted_cb(lv_event_t * e)
+{
+ if(LV_GLOBAL_DEFAULT()->deinit_in_progress)
+ return;
+ lv_obj_t * cursor_obj = lv_event_get_user_data(e);
+ lv_obj_delete(cursor_obj);
+}
+
+static void discovery_cb(lv_indev_t * indev, lv_evdev_type_t type, void * user_data)
+{
+ LV_LOG_USER("new '%s' device discovered", type == LV_EVDEV_TYPE_REL ? "REL" :
+ type == LV_EVDEV_TYPE_ABS ? "ABS" :
+ type == LV_EVDEV_TYPE_KEY ? "KEY" :
+ "unknown");
+ /* if input device is mouse add cursor */
+ if(type == LV_EVDEV_TYPE_REL) {
+ LV_IMAGE_DECLARE(mouse_cursor_icon);
+ lv_obj_t * cursor_obj = lv_image_create(lv_screen_active());
+ lv_image_set_src(cursor_obj, &mouse_cursor_icon);
+ lv_indev_set_cursor(indev, cursor_obj);
+ lv_indev_add_event_cb(indev, indev_deleted_cb, LV_EVENT_DELETE, cursor_obj);
+ }
+}
+
#if LV_USE_LINUX_FBDEV
static void lv_linux_disp_init(void)
{
@@ -18,6 +43,8 @@ static void lv_linux_disp_init(void)
lv_display_t * disp = lv_linux_fbdev_create();
lv_linux_fbdev_set_file(disp, device);
+ /* search for input devices */
+ lv_evdev_discovery_start(discovery_cb, NULL);
}
#elif LV_USE_LINUX_DRM
static void lv_linux_disp_init(void)
@@ -26,6 +53,8 @@ static void lv_linux_disp_init(void)
lv_display_t * disp = lv_linux_drm_create();
lv_linux_drm_set_file(disp, device, -1);
+ /* search for input devices */
+ lv_evdev_discovery_start(discovery_cb, NULL);
}
#elif LV_USE_SDL
static void lv_linux_disp_init(void)
--
2.51.0