From 5f4a0ea9ec5c6bd951d98d7ef46693186a92c4ef Mon Sep 17 00:00:00 2001 From: Martin Vladic Date: Fri, 15 Nov 2024 14:01:17 +0100 Subject: [PATCH] Fixed: [LVGL] Keyboard and Textarea association doesn't work when Textarea is inside User Widget and Keyboard is not --- packages/eez-studio-types/index.d.ts | 2 +- .../cpp/lvgl-runtime/common/src/flow.cpp | 2 +- .../cpp/lvgl-runtime/common/src/flow.h | 1 + .../lvgl-runtime/common/src/studio_api.cpp | 9 ++- .../flow/runtime/lvgl_runtime_v8.3.wasm | Bin 2000079 -> 2000146 bytes .../flow/runtime/lvgl_runtime_v9.0.wasm | Bin 1961681 -> 1961748 bytes .../flow/runtime/wasm-runtime.tsx | 3 +- packages/project-editor/lvgl/build.ts | 2 +- packages/project-editor/lvgl/page-runtime.ts | 28 ++++++- .../project-editor/lvgl/widgets/Imgbutton.tsx | 24 ++++-- .../project-editor/lvgl/widgets/Keyboard.tsx | 70 +++++++++++------- 11 files changed, 99 insertions(+), 42 deletions(-) diff --git a/packages/eez-studio-types/index.d.ts b/packages/eez-studio-types/index.d.ts index 8e45c611..2b9e7aa5 100644 --- a/packages/eez-studio-types/index.d.ts +++ b/packages/eez-studio-types/index.d.ts @@ -737,7 +737,7 @@ export interface IWasmFlowRuntime { _lvglFreeFont(font_ptr: number): void; _lvglAddObjectFlowCallback(obj: number, filter: number, flow_state: number, component_index: number, output_or_property_index: number, userDataValuePtr: number): void; _lvglSetImgbuttonImageSrc(obj: number, statE: number, img_src: number): void; - _lvglSetKeyboardTextarea(obj: number, textarea: number): void; + _lvglSetKeyboardTextarea(obj: number, textareaIndex: number): void; _lvglMeterAddScale(obj: number, minorTickCount: number, minorTickLineWidth: number, minorTickLength: number, minorTickColor: number, diff --git a/packages/project-editor/flow/runtime/cpp/lvgl-runtime/common/src/flow.cpp b/packages/project-editor/flow/runtime/cpp/lvgl-runtime/common/src/flow.cpp index 12cf7ac2..7a89f173 100644 --- a/packages/project-editor/flow/runtime/cpp/lvgl-runtime/common/src/flow.cpp +++ b/packages/project-editor/flow/runtime/cpp/lvgl-runtime/common/src/flow.cpp @@ -914,7 +914,7 @@ void setObjectIndex(lv_obj_t *obj, int32_t index) { indexToObject.insert(std::make_pair(index, obj)); } -static lv_obj_t *getLvglObjectFromIndex(int32_t index) { +lv_obj_t *getLvglObjectFromIndex(int32_t index) { auto it = indexToObject.find(index); if (it == indexToObject.end()) { return nullptr; diff --git a/packages/project-editor/flow/runtime/cpp/lvgl-runtime/common/src/flow.h b/packages/project-editor/flow/runtime/cpp/lvgl-runtime/common/src/flow.h index 6f09b6ab..05bdd46b 100644 --- a/packages/project-editor/flow/runtime/cpp/lvgl-runtime/common/src/flow.h +++ b/packages/project-editor/flow/runtime/cpp/lvgl-runtime/common/src/flow.h @@ -108,3 +108,4 @@ enum UpdateTaskType { void addUpdateTask(enum UpdateTaskType updateTaskType, lv_obj_t *obj, void *flow_state, unsigned component_index, unsigned property_index, void *subobj, int param); void setObjectIndex(lv_obj_t *obj, int32_t index); +lv_obj_t *getLvglObjectFromIndex(int32_t index); \ No newline at end of file diff --git a/packages/project-editor/flow/runtime/cpp/lvgl-runtime/common/src/studio_api.cpp b/packages/project-editor/flow/runtime/cpp/lvgl-runtime/common/src/studio_api.cpp index 56a5c126..75d0b4fe 100644 --- a/packages/project-editor/flow/runtime/cpp/lvgl-runtime/common/src/studio_api.cpp +++ b/packages/project-editor/flow/runtime/cpp/lvgl-runtime/common/src/studio_api.cpp @@ -930,9 +930,12 @@ EM_PORT_API(void) lvglSetImgbuttonImageSrc(lv_obj_t *obj, lv_imgbtn_state_t stat lv_obj_update_layout(obj); } -EM_PORT_API(void) lvglSetKeyboardTextarea(lv_obj_t *obj, lv_obj_t *textarea) { - lv_keyboard_set_textarea(obj, textarea); - lv_obj_update_layout(obj); +EM_PORT_API(void) lvglSetKeyboardTextarea(lv_obj_t *obj, int32_t textareaIndex) { + lv_obj_t *textarea = getLvglObjectFromIndex(textareaIndex); + if (textarea) { + lv_keyboard_set_textarea(obj, textarea); + lv_obj_update_layout(obj); + } } #if LVGL_VERSION_MAJOR >= 9 diff --git a/packages/project-editor/flow/runtime/lvgl_runtime_v8.3.wasm b/packages/project-editor/flow/runtime/lvgl_runtime_v8.3.wasm index 513bbda55cca75baed2ff4d566c39b2c7825896d..2bdf7b22e40c5b21cf16018a1164aec0a29e99d9 100644 GIT binary patch delta 12284 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 diff --git a/packages/project-editor/flow/runtime/lvgl_runtime_v9.0.wasm b/packages/project-editor/flow/runtime/lvgl_runtime_v9.0.wasm index a874926e51c7245fdcf7fa72d348e8c27f30a369..8d71c2335347e99d7ffce93cc468be8673124907 100644 GIT binary patch delta 12157 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 diff --git a/packages/project-editor/flow/runtime/wasm-runtime.tsx b/packages/project-editor/flow/runtime/wasm-runtime.tsx index 16a9e3a6..f42985d0 100644 --- a/packages/project-editor/flow/runtime/wasm-runtime.tsx +++ b/packages/project-editor/flow/runtime/wasm-runtime.tsx @@ -395,7 +395,8 @@ export class WasmRuntime extends RemoteRuntime { ); } else if (workerToRenderMessage.getLvglObjectByName) { return this.lgvlPageRuntime?.getLvglObjectByName( - workerToRenderMessage.getLvglObjectByName.name + workerToRenderMessage.getLvglObjectByName.name, + [] ); } else if (workerToRenderMessage.getLvglGroupByName) { return this.lgvlPageRuntime?.getLvglGroupByName( diff --git a/packages/project-editor/lvgl/build.ts b/packages/project-editor/lvgl/build.ts index ef23b9e8..93ee3ba2 100644 --- a/packages/project-editor/lvgl/build.ts +++ b/packages/project-editor/lvgl/build.ts @@ -588,7 +588,7 @@ export class LVGLBuild extends Build { const pageIdentifiers = this.getPageIdentifiers(widget); if (!pageIdentifiers) { - return 0; + return "0"; } const accessor = pageIdentifiers.widgetToAccessor.get(widget); diff --git a/packages/project-editor/lvgl/page-runtime.ts b/packages/project-editor/lvgl/page-runtime.ts index 4fcd3f6a..43807590 100644 --- a/packages/project-editor/lvgl/page-runtime.ts +++ b/packages/project-editor/lvgl/page-runtime.ts @@ -1196,8 +1196,32 @@ export class LVGLPageViewerRuntime extends LVGLPageRuntime { return this.nextWidgetIndex++; } - getLvglObjectByName(objectName: string) { - return this.runtime.assetsMap.lvglWidgetIndexes[objectName]; + getLvglObjectByName( + objectName: string, + userWidgetsStack: LVGLUserWidgetWidget[] + ) { + const identifier = [ + ...userWidgetsStack.map( + widget => + widget.identifier || + this.runtime.assetsMap.lvglWidgetGeneratedIdentifiers[ + widget.objID + ] + ), + objectName + ] + .map(identifier => + identifier + ? getName( + "", + identifier, + NamingConvention.UnderscoreLowerCase + ) + : "?" + ) + .join(USER_WIDGET_IDENTIFIER_SEPARATOR); + + return this.runtime.assetsMap.lvglWidgetIndexes[identifier]; } } diff --git a/packages/project-editor/lvgl/widgets/Imgbutton.tsx b/packages/project-editor/lvgl/widgets/Imgbutton.tsx index b21a39a8..4dc761a5 100644 --- a/packages/project-editor/lvgl/widgets/Imgbutton.tsx +++ b/packages/project-editor/lvgl/widgets/Imgbutton.tsx @@ -359,32 +359,44 @@ export class LVGLImgbuttonWidget extends LVGLWidget { if (this.imageReleased) { build.line( - `${setSrcFuncName}(obj, ${prefix}RELEASED, NULL, &img_${this.imageReleased}, NULL);` + `${setSrcFuncName}(obj, ${prefix}RELEASED, NULL, &${build.getImageVariableName( + this.imageReleased + )}, NULL);` ); } if (this.imagePressed) { build.line( - `${setSrcFuncName}(obj, ${prefix}PRESSED, NULL, &img_${this.imagePressed}, NULL);` + `${setSrcFuncName}(obj, ${prefix}PRESSED, NULL, &${build.getImageVariableName( + this.imagePressed + )}, NULL);` ); } if (this.imageDisabled) { build.line( - `${setSrcFuncName}(obj, ${prefix}DISABLED, NULL, &img_${this.imageDisabled}, NULL);` + `${setSrcFuncName}(obj, ${prefix}DISABLED, NULL, &${build.getImageVariableName( + this.imageDisabled + )}, NULL);` ); } if (this.imageCheckedReleased) { build.line( - `${setSrcFuncName}(obj, ${prefix}CHECKED_PRESSED, NULL, &img_${this.imageCheckedReleased}, NULL);` + `${setSrcFuncName}(obj, ${prefix}CHECKED_PRESSED, NULL, &${build.getImageVariableName( + this.imageCheckedReleased + )}, NULL);` ); } if (this.imageCheckedPressed) { build.line( - `${setSrcFuncName}(obj, ${prefix}CHECKED_RELEASED, NULL, &img_${this.imageCheckedPressed}, NULL);` + `${setSrcFuncName}(obj, ${prefix}CHECKED_RELEASED, NULL, &${build.getImageVariableName( + this.imageCheckedPressed + )}, NULL);` ); } if (this.imageCheckedDisabled) { build.line( - `${setSrcFuncName}(obj, ${prefix}CHECKED_DISABLED, NULL, &img_${this.imageCheckedDisabled}, NULL);` + `${setSrcFuncName}(obj, ${prefix}CHECKED_DISABLED, NULL, &${build.getImageVariableName( + this.imageCheckedDisabled + )}, NULL);` ); } } diff --git a/packages/project-editor/lvgl/widgets/Keyboard.tsx b/packages/project-editor/lvgl/widgets/Keyboard.tsx index a7eecbc9..3a2ebe0d 100644 --- a/packages/project-editor/lvgl/widgets/Keyboard.tsx +++ b/packages/project-editor/lvgl/widgets/Keyboard.tsx @@ -13,7 +13,6 @@ import { ProjectType } from "project-editor/project/project"; import { specificGroup } from "project-editor/ui-components/PropertyGrid/groups"; import { - LVGLNonActivePageViewerRuntime, LVGLPageRuntime, LVGLPageViewerRuntime } from "project-editor/lvgl/page-runtime"; @@ -225,39 +224,39 @@ export class LVGLKeyboardWidget extends LVGLWidget { KEYBOARD_MODES[this.mode] ); - runtime.addPostCreateCallback(() => { - if (this.textarea) { - const lvglIdentifier = ProjectEditor.getProjectStore( - this - ).lvglIdentifiers.getIdentifierByName( - ProjectEditor.getFlow(this), - this.textarea - ); + const textarea = this.textarea; + + if (runtime instanceof LVGLPageViewerRuntime && textarea) { + const lvglIdentifier = ProjectEditor.getProjectStore( + this + ).lvglIdentifiers.getIdentifierByName( + ProjectEditor.getFlow(this), + textarea + ); + if (lvglIdentifier && lvglIdentifier.widgets.length == 1) { + const textareaWidget = lvglIdentifier.widgets[0]; + + if (textareaWidget instanceof LVGLTextareaWidget) { + const textareaWidgetIndex = runtime.getLvglObjectByName( + textarea, + runtime.userWidgetsStack + ); - if (lvglIdentifier && lvglIdentifier.widgets.length == 1) { - const textareaWidget = lvglIdentifier.widgets[0]; + console.log(textarea, textareaWidgetIndex); - if ( - textareaWidget instanceof LVGLTextareaWidget && - (runtime instanceof LVGLPageViewerRuntime || - runtime instanceof LVGLNonActivePageViewerRuntime) - ) { + runtime.addPostCreateCallback(() => { setTimeout(() => { - if ( - this._lvglObj && - textareaWidget._lvglObj && - runtime.isMounted - ) { + if (this._lvglObj && runtime.isMounted) { runtime.wasm._lvglSetKeyboardTextarea( this._lvglObj, - textareaWidget._lvglObj + textareaWidgetIndex ); } }); - } + }); } } - }); + } return obj; } @@ -287,10 +286,27 @@ export class LVGLKeyboardWidget extends LVGLWidget { lvglIdentifier.widgets.length == 1 ) { const textareaWidget = lvglIdentifier.widgets[0]; + + let keyboardAccessor = build.getLvglObjectAccessor(this); + + let textareaAccessor = + build.getLvglObjectAccessor(textareaWidget); + + if (textareaAccessor.indexOf("startWidgetIndex +") != -1) { + let index = build.getWidgetObjectIndexByName( + this, + this.textarea + ); + + if (keyboardAccessor.indexOf("startWidgetIndex +") != -1) { + textareaAccessor = `((lv_obj_t **)&objects)[startWidgetIndex + ${index}]`; + } else { + textareaAccessor = `((lv_obj_t **)&objects)[${index}]`; + } + } + build.line( - `lv_keyboard_set_textarea(${build.getLvglObjectAccessor( - this - )}, ${build.getLvglObjectAccessor(textareaWidget)});` + `lv_keyboard_set_textarea(${keyboardAccessor}, ${textareaAccessor});` ); } }