Create wrapper for lv_textare_create to automatically support hardware keyboards

This commit is contained in:
Ken Van Hoeylandt 2025-08-13 21:19:29 +02:00
parent f899ccbf1c
commit 5868ba15c5
16 changed files with 15 additions and 41 deletions

View File

@ -55,6 +55,7 @@ if (DEFINED ENV{ESP_IDF_VERSION})
add_compile_definitions(LV_CONF_PATH="${LVGL_CONFIG_FULL_PATH}/lv_conf_kconfig.h")
idf_build_set_property(LINK_OPTIONS "-Wl,--wrap=esp_panic_handler" APPEND)
idf_build_set_property(LINK_OPTIONS "-Wl,--wrap=esp_log_write" APPEND)
idf_build_set_property(LINK_OPTIONS "-Wl,--wrap=lv_textarea_create" APPEND)
else ()
message("Building for sim target")
add_compile_definitions(CONFIG_TT_BOARD_ID="simulator")

View File

@ -117,7 +117,6 @@ public:
lv_textarea_set_one_line(speedTextarea, true);
lv_obj_set_width(speedTextarea, LV_PCT(50));
lv_obj_align(speedTextarea, LV_ALIGN_TOP_RIGHT, 0, 40);
service::gui::keyboardAddTextArea(speedTextarea);
auto* baud_rate_label = lv_label_create(wrapper);
lv_obj_align(baud_rate_label, LV_ALIGN_TOP_LEFT, 0, 50);

View File

@ -186,7 +186,6 @@ public:
lv_obj_set_width(logTextarea, LV_PCT(100));
lv_obj_add_state(logTextarea, LV_STATE_DISABLED);
lv_obj_set_style_margin_ver(logTextarea, 0, 0);
service::gui::keyboardAddTextArea(logTextarea);
auto* input_wrapper = lv_obj_create(parent);
lv_obj_set_size(input_wrapper, LV_PCT(100), LV_SIZE_CONTENT);
@ -200,7 +199,6 @@ public:
lv_textarea_set_placeholder_text(inputTextarea, "Text to send");
lv_obj_set_width(inputTextarea, LV_PCT(100));
lv_obj_set_flex_grow(inputTextarea, 1);
service::gui::keyboardAddTextArea(inputTextarea);
auto* terminator_dropdown = lv_dropdown_create(input_wrapper);
lv_dropdown_set_options(terminator_dropdown, "\\n\n\\r\\n");

View File

@ -48,12 +48,4 @@ bool hardware_keyboard_is_available();
*/
void hardware_keyboard_set_indev(lv_indev_t* device);
/**
* Glue code for the on-screen keyboard and the hardware keyboard:
* - Attach automatic hide/show parameters for the on-screen keyboard.
* - Registers the textarea to the default lv_group_t for hardware keyboards.
* @param[in] textarea
*/
void keyboard_add_textarea(lv_obj_t* textarea);
}

View File

@ -154,7 +154,6 @@ public:
lv_obj_set_height(input_field, LV_PCT(100));
lv_textarea_set_placeholder_text(input_field, "Type a message...");
lv_textarea_set_one_line(input_field, true);
service::gui::keyboardAddTextArea(input_field);
// Send button
auto* send_btn = lv_btn_create(input_panel);

View File

@ -200,7 +200,6 @@ void View::init(lv_obj_t* parent, Mode mode) {
path_textarea = lv_textarea_create(bottom_wrapper);
lv_textarea_set_one_line(path_textarea, true);
lv_obj_set_flex_grow(path_textarea, 1);
service::gui::keyboardAddTextArea(path_textarea);
lv_obj_add_event_cb(path_textarea, onPathTextChanged, LV_EVENT_VALUE_CHANGED, this);
select_button = lv_button_create(bottom_wrapper);

View File

@ -106,7 +106,6 @@ public:
if (parameters->optString(PARAMETER_BUNDLE_KEY_PREFILLED, prefilled)) {
lv_textarea_set_text(textarea, prefilled.c_str());
}
service::gui::keyboardAddTextArea(textarea);
auto* button_wrapper = lv_obj_create(parent);
lv_obj_set_flex_flow(button_wrapper, LV_FLEX_FLOW_ROW);

View File

@ -172,8 +172,6 @@ class NotesApp : public App {
if (!file::findOrCreateDirectory(context.getPaths()->getDataDirectory(), 0777)) {
TT_LOG_E(TAG, "Failed to find or create path %s", context.getPaths()->getDataDirectory().c_str());
}
lvgl::keyboard_add_textarea(uiNoteText);
}
void onResult(AppContext& appContext, LaunchId launchId, Result result, std::unique_ptr<Bundle> resultData) override {

View File

@ -271,9 +271,6 @@ void ScreenshotApp::onShow(AppContext& appContext, lv_obj_t* parent) {
createFilePathWidgets(wrapper);
createTimerSettingsWidgets(wrapper);
service::gui::keyboardAddTextArea(delayTextArea);
service::gui::keyboardAddTextArea(pathTextArea);
updateScreenshotMode();
if (!updateTimer->isRunning()) {

View File

@ -221,7 +221,6 @@ public:
lv_obj_add_event_cb(textarea, onTextareaValueChangedCallback, LV_EVENT_VALUE_CHANGED, this);
filterTextareaWidget = textarea;
lv_obj_set_flex_grow(textarea, 1);
service::gui::keyboardAddTextArea(textarea);
auto* list = lv_list_create(parent);
lv_obj_set_width(list, LV_PCT(100));

View File

@ -187,10 +187,6 @@ void View::init(AppContext& app, lv_obj_t* parent) {
// Bottom buttons
createBottomButtons(wrapper);
// Keyboard bindings
service::gui::keyboardAddTextArea(ssid_textarea);
service::gui::keyboardAddTextArea(password_textarea);
// Init from app parameters
auto bundle = app.getParameters();
if (bundle != nullptr) {

View File

@ -37,8 +37,4 @@ void hardware_keyboard_set_indev(lv_indev_t* device) {
keyboard_device = device;
}
void keyboard_add_textarea(lv_obj_t* textarea) {
service::gui::keyboardAddTextArea(textarea);
}
}

View File

@ -0,0 +1,14 @@
#include <lvgl.h>
#include <Tactility/service/gui/Gui.h>
extern "C" {
extern lv_obj_t * __real_lv_textarea_create(lv_obj_t * parent);
lv_obj_t * __wrap_lv_textarea_create(lv_obj_t * parent) {
auto textarea = __real_lv_textarea_create(parent);
tt::service::gui::keyboardAddTextArea(textarea);
return textarea;
}
}

View File

@ -50,14 +50,6 @@ bool tt_lvgl_hardware_keyboard_is_available();
*/
void tt_lvgl_hardware_keyboard_set_indev(lv_indev_t* device);
/**
* Glue code for the on-screen keyboard and the hardware keyboard:
* - Attach automatic hide/show parameters for the on-screen keyboard.
* - Registers the textarea to the default lv_group_t for hardware keyboards.
* @param[in] textarea
*/
void tt_lvgl_keyboard_add_textarea(lv_obj_t* textarea);
#ifdef __cplusplus
}
#endif

View File

@ -139,7 +139,6 @@ const struct esp_elfsym elf_symbols[] {
ESP_ELFSYM_EXPORT(tt_lvgl_software_keyboard_deactivate),
ESP_ELFSYM_EXPORT(tt_lvgl_hardware_keyboard_is_available),
ESP_ELFSYM_EXPORT(tt_lvgl_hardware_keyboard_set_indev),
ESP_ELFSYM_EXPORT(tt_lvgl_keyboard_add_textarea),
ESP_ELFSYM_EXPORT(tt_lvgl_toolbar_create),
ESP_ELFSYM_EXPORT(tt_lvgl_toolbar_create_for_app),
ESP_ELFSYM_EXPORT(tt_message_queue_alloc),

View File

@ -30,8 +30,4 @@ void tt_lvgl_hardware_keyboard_set_indev(lv_indev_t* device) {
tt::lvgl::hardware_keyboard_set_indev(device);
}
void tt_lvgl_keyboard_add_textarea(lv_obj_t* textarea) {
tt::lvgl::keyboard_add_textarea(textarea);
}
}