Skip to content

Commit 3158543

Browse files
committedFeb 3, 2025
1 parent 38df4c2 commit 3158543

File tree

16 files changed

+60
-93
lines changed

16 files changed

+60
-93
lines changed
 

‎packages/eez-studio-types/index.d.ts

+3-1
Original file line numberDiff line numberDiff line change
@@ -556,7 +556,7 @@ export interface IWasmFlowRuntime {
556556
} | undefined;
557557

558558
// eez framework API
559-
_init(wasmModuleId: number, debuggerMessageSubsciptionFilter: number, assets: number, assetsSize: number, displayWidth: number, displayHeight: number, darkTheme: boolean, timeZone: number, deleteOnScreenUnload: number): void;
559+
_init(wasmModuleId: number, debuggerMessageSubsciptionFilter: number, assets: number, assetsSize: number, displayWidth: number, displayHeight: number, darkTheme: boolean, timeZone: number, screensLifetimeSupport: boolean): void;
560560
_mainLoop(): boolean;
561561
_getSyncedBuffer(): number;
562562
_onMouseWheelEvent(wheelDeltaY: number, pressed: number): void;
@@ -814,6 +814,8 @@ export interface IWasmFlowRuntime {
814814
_lvglGroupRemoveObjectsForScreen(screenObj: number): void;
815815

816816
_lvglObjInvalidate(obj: number);
817+
818+
_lvglDeleteScreenOnUnload(screenIndex: number);
817819
}
818820

819821
export interface IDashboardComponentContext {

‎packages/project-editor/flow/runtime/lvgl_runtime_v8.3.js

+1
Original file line numberDiff line numberDiff line change
@@ -4859,6 +4859,7 @@ var _lvglScrollTo = Module['_lvglScrollTo'] = createExportWrapper('lvglScrollTo'
48594859
var _lvglGetScrollX = Module['_lvglGetScrollX'] = createExportWrapper('lvglGetScrollX');
48604860
var _lvglGetScrollY = Module['_lvglGetScrollY'] = createExportWrapper('lvglGetScrollY');
48614861
var _lvglObjInvalidate = Module['_lvglObjInvalidate'] = createExportWrapper('lvglObjInvalidate');
4862+
var _lvglDeleteScreenOnUnload = Module['_lvglDeleteScreenOnUnload'] = createExportWrapper('lvglDeleteScreenOnUnload');
48624863
var _onMqttEvent = Module['_onMqttEvent'] = createExportWrapper('onMqttEvent');
48634864
var ___errno_location = createExportWrapper('__errno_location');
48644865
var _fflush = Module['_fflush'] = createExportWrapper('fflush');
Binary file not shown.

‎packages/project-editor/flow/runtime/lvgl_runtime_v9.0.js

+1
Original file line numberDiff line numberDiff line change
@@ -4859,6 +4859,7 @@ var _lvglScrollTo = Module['_lvglScrollTo'] = createExportWrapper('lvglScrollTo'
48594859
var _lvglGetScrollX = Module['_lvglGetScrollX'] = createExportWrapper('lvglGetScrollX');
48604860
var _lvglGetScrollY = Module['_lvglGetScrollY'] = createExportWrapper('lvglGetScrollY');
48614861
var _lvglObjInvalidate = Module['_lvglObjInvalidate'] = createExportWrapper('lvglObjInvalidate');
4862+
var _lvglDeleteScreenOnUnload = Module['_lvglDeleteScreenOnUnload'] = createExportWrapper('lvglDeleteScreenOnUnload');
48624863
var _fflush = Module['_fflush'] = createExportWrapper('fflush');
48634864
var _onMqttEvent = Module['_onMqttEvent'] = createExportWrapper('onMqttEvent');
48644865
var ___errno_location = createExportWrapper('__errno_location');
Binary file not shown.

‎packages/project-editor/flow/runtime/wasm-runtime.tsx

+1-5
Original file line numberDiff line numberDiff line change
@@ -270,11 +270,7 @@ export class WasmRuntime extends RemoteRuntime {
270270
this.displayWidth,
271271
this.displayHeight,
272272
this.projectStore.project.settings.general.darkTheme,
273-
this.projectStore.project.settings.build.screensLifetimeSupport
274-
? this.projectStore.lvglIdentifiers.userPages.map(
275-
page => page.deleteOnScreenUnload
276-
)
277-
: undefined,
273+
this.projectStore.project.settings.build.screensLifetimeSupport,
278274
(className: string) => getClassByName(this.projectStore, className),
279275
(key: string) => {
280276
return this.projectStore.runtimeSettings.readSettings(key);

‎packages/project-editor/flow/runtime/wasm-worker.ts

+2-13
Original file line numberDiff line numberDiff line change
@@ -673,7 +673,7 @@ export function createWasmWorker(
673673
displayWidth: number,
674674
displayHeight: number,
675675
darkTheme: boolean,
676-
deleteOnScreenUnload: boolean[] | undefined,
676+
screensLifetimeSupport: boolean,
677677
getClassByName: (className: string) => any,
678678
readSettings: (key: string) => any,
679679
writeSettings: (key: string, value: any) => any,
@@ -910,17 +910,6 @@ export function createWasmWorker(
910910
var ptr = WasmFlowRuntime._malloc(assets.length);
911911
WasmFlowRuntime.HEAPU8.set(assets, ptr);
912912

913-
let deleteOnScreenUnloadPtr = 0;
914-
if (deleteOnScreenUnload) {
915-
deleteOnScreenUnloadPtr = WasmFlowRuntime._malloc(
916-
deleteOnScreenUnload.length
917-
);
918-
for (let i = 0; i < deleteOnScreenUnload.length; i++) {
919-
WasmFlowRuntime.HEAPU8[deleteOnScreenUnloadPtr + i] =
920-
deleteOnScreenUnload[i] ? 1 : 0;
921-
}
922-
}
923-
924913
WasmFlowRuntime._init(
925914
wasmModuleId,
926915
debuggerMessageSubsciptionFilter,
@@ -930,7 +919,7 @@ export function createWasmWorker(
930919
displayHeight,
931920
darkTheme,
932921
-(new Date().getTimezoneOffset() / 60) * 100,
933-
deleteOnScreenUnloadPtr
922+
screensLifetimeSupport
934923
);
935924

936925
WasmFlowRuntime._free(ptr);

‎packages/project-editor/lvgl/build.ts

+13-8
Original file line numberDiff line numberDiff line change
@@ -1214,6 +1214,19 @@ export class LVGLBuild extends Build {
12141214

12151215
page.lvglBuild(this);
12161216

1217+
if (
1218+
this.assets.projectStore.projectTypeTraits.hasFlowSupport &&
1219+
build.project.settings.build.screensLifetimeSupport &&
1220+
page.deleteOnScreenUnload
1221+
) {
1222+
build.line("");
1223+
build.line(
1224+
`eez_flow_delete_screen_on_unload(SCREEN_ID_${this.getScreenIdentifier(
1225+
page
1226+
).toUpperCase()} - 1);`
1227+
);
1228+
}
1229+
12171230
if (!page.isUsedAsUserWidget) {
12181231
build.line("");
12191232
build.line(`${this.getScreenTickFunctionName(page)}();`);
@@ -1665,14 +1678,6 @@ export class LVGLBuild extends Build {
16651678
) {
16661679
build.line("eez_flow_set_create_screen_func(create_screen);");
16671680
build.line("eez_flow_set_delete_screen_func(delete_screen);");
1668-
build.line(
1669-
`static bool delete_on_screen_unload[] = { ${this.userPages
1670-
.map(page => (page.deleteOnScreenUnload ? "true" : "false"))
1671-
.join(", ")} };`
1672-
);
1673-
build.line(
1674-
"eez_flow_set_delete_on_screen_unload(delete_on_screen_unload);"
1675-
);
16761681
build.line("");
16771682
}
16781683

‎packages/project-editor/lvgl/page-runtime.ts

+12-4
Original file line numberDiff line numberDiff line change
@@ -623,7 +623,7 @@ export class LVGLPageEditorRuntime extends LVGLPageRuntime {
623623
this.displayHeight,
624624
this.project.settings.general.darkTheme,
625625
-(new Date().getTimezoneOffset() / 60) * 100,
626-
0
626+
false
627627
);
628628

629629
this.requestAnimationFrameId = window.requestAnimationFrame(
@@ -837,7 +837,7 @@ export class LVGLNonActivePageViewerRuntime extends LVGLPageRuntime {
837837
this.page.height,
838838
this.project.settings.general.darkTheme,
839839
-(new Date().getTimezoneOffset() / 60) * 100,
840-
0
840+
false
841841
);
842842

843843
this.requestAnimationFrameId = window.requestAnimationFrame(
@@ -1137,6 +1137,14 @@ export class LVGLPageViewerRuntime extends LVGLPageRuntime {
11371137

11381138
const pageObj = this.lvglCreatePage();
11391139

1140+
if (
1141+
pageObj &&
1142+
this.project.settings.build.screensLifetimeSupport &&
1143+
this.page.deleteOnScreenUnload
1144+
) {
1145+
this.wasm._lvglDeleteScreenOnUnload(pageIndex);
1146+
}
1147+
11401148
const pageState = this.pageStates.get(this.page)!;
11411149

11421150
pageState.pageObj = pageObj;
@@ -1463,7 +1471,7 @@ export class LVGLStylesEditorRuntime extends LVGLPageRuntime {
14631471
this.displayHeight,
14641472
this.project.settings.general.darkTheme,
14651473
-(new Date().getTimezoneOffset() / 60) * 100,
1466-
0
1474+
false
14671475
);
14681476

14691477
this.requestAnimationFrameId = window.requestAnimationFrame(
@@ -1739,7 +1747,7 @@ export class LVGLReflectEditorRuntime extends LVGLPageRuntime {
17391747
this.displayHeight,
17401748
this.project.settings.general.darkTheme,
17411749
-(new Date().getTimezoneOffset() / 60) * 100,
1742-
0
1750+
false
17431751
);
17441752

17451753
const pageObj = this.lvglCreatePage();

‎resources/eez-framework-amalgamation/eez-flow.cpp

+15-25
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
/* Autogenerated on February 3, 2025 11:51:03 AM from eez-framework commit 3db93fbe5aa9a3f27d57ad064f0ba7ce83b88255 */
1+
/* Autogenerated on February 3, 2025 3:55:56 PM from eez-framework commit 46e3fd71c9682cf60f626adbbc6c5a7821dda9f2 */
22
/*
33
* eez-framework
44
*
@@ -7393,7 +7393,6 @@ static void (*g_changeColorTheme)(uint32_t themeIndex);
73937393
static uint32_t g_selectedThemeIndex;
73947394
static void (*g_createScreenFunc)(int screenIndex);
73957395
static void (*g_deleteScreenFunc)(int screenIndex);
7396-
bool *g_deleteOnScreenUnload;
73977396
static lv_obj_t *getLvglObjectFromIndex(int32_t index) {
73987397
if (index >= 0 && index < g_numObjects) {
73997398
return g_objects[index];
@@ -7461,9 +7460,6 @@ void eez_flow_set_create_screen_func(void (*createScreenFunc)(int screenIndex))
74617460
void eez_flow_set_delete_screen_func(void (*deleteScreenFunc)(int screenIndex)) {
74627461
g_deleteScreenFunc = deleteScreenFunc;
74637462
}
7464-
void eez_flow_set_delete_on_screen_unload(bool *deleteOnScreenUnload) {
7465-
g_deleteOnScreenUnload = deleteOnScreenUnload;
7466-
}
74677463
static void lvglSetColorTheme(const char *themeName) {
74687464
for (uint32_t i = 0; i < g_numThemes; i++) {
74697465
if (strcmp(themeName, g_themeNames[i]) == 0) {
@@ -7528,6 +7524,20 @@ bool eez_flow_is_screen_created(int16_t screenId) {
75287524
int16_t screenIndex = screenId - 1;
75297525
return isScreenCreated(screenIndex);
75307526
}
7527+
void on_screen_unloaded(lv_event_t *e) {
7528+
if (lv_event_get_code(e) == LV_EVENT_SCREEN_UNLOADED) {
7529+
int16_t screenIndex = (int16_t)(lv_uintptr_t)lv_event_get_user_data(e);
7530+
deleteScreen(screenIndex);
7531+
}
7532+
}
7533+
void eez_flow_delete_screen_on_unload(int screenIndex) {
7534+
lv_obj_add_event_cb(
7535+
eez::flow::getLvglObjectFromIndexHook(screenIndex),
7536+
on_screen_unloaded,
7537+
LV_EVENT_SCREEN_UNLOADED,
7538+
(void*)(lv_uintptr_t)(screenIndex)
7539+
);
7540+
}
75317541
extern "C" void eez_flow_init(const uint8_t *assets, uint32_t assetsSize, lv_obj_t **objects, size_t numObjects, const ext_img_desc_t *images, size_t numImages, ActionExecFunc *actions) {
75327542
g_objects = objects;
75337543
g_numObjects = numObjects;
@@ -7586,12 +7596,6 @@ extern "C" bool eez_flow_is_stopped() {
75867596
namespace eez {
75877597
ActionExecFunc g_actionExecFunctions[] = { 0 };
75887598
}
7589-
void on_screen_unloaded(lv_event_t *e) {
7590-
if (lv_event_get_code(e) == LV_EVENT_SCREEN_UNLOADED) {
7591-
int16_t screenIndex = (int16_t)(lv_uintptr_t)lv_event_get_user_data(e);
7592-
deleteScreen(screenIndex);
7593-
}
7594-
}
75957599
void replacePageHook(int16_t pageId, uint32_t animType, uint32_t speed, uint32_t delay) {
75967600
int16_t screenIndex = pageId - 1;
75977601
createScreen(screenIndex);
@@ -7600,20 +7604,6 @@ void replacePageHook(int16_t pageId, uint32_t animType, uint32_t speed, uint32_t
76007604
return;
76017605
}
76027606
eez::flow::onPageChanged(g_currentScreen + 1, pageId);
7603-
if (
7604-
g_currentScreen != -1 &&
7605-
g_currentScreen != screenIndex &&
7606-
g_deleteScreenFunc &&
7607-
g_deleteOnScreenUnload &&
7608-
g_deleteOnScreenUnload[g_currentScreen]
7609-
) {
7610-
lv_obj_add_event_cb(
7611-
eez::flow::getLvglObjectFromIndexHook(g_currentScreen),
7612-
on_screen_unloaded,
7613-
LV_EVENT_SCREEN_UNLOADED,
7614-
(void*)(lv_uintptr_t)(g_currentScreen)
7615-
);
7616-
}
76177607
g_currentScreen = screenIndex;
76187608
lv_scr_load_anim(screen, (lv_scr_load_anim_t)animType, speed, delay, false);
76197609
}

‎resources/eez-framework-amalgamation/eez-flow.h

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
/* Autogenerated on February 3, 2025 11:51:03 AM from eez-framework commit 3db93fbe5aa9a3f27d57ad064f0ba7ce83b88255 */
1+
/* Autogenerated on February 3, 2025 3:55:56 PM from eez-framework commit 46e3fd71c9682cf60f626adbbc6c5a7821dda9f2 */
22
/*
33
* eez-framework
44
*
@@ -3046,7 +3046,6 @@ void eez_flow_init_style_names(const char **styleNames, size_t numStyles);
30463046
void eez_flow_init_themes(const char **themeNames, size_t numThemes, void (*changeColorTheme)(uint32_t themeIndex));
30473047
void eez_flow_set_create_screen_func(void (*createScreenFunc)(int screenIndex));
30483048
void eez_flow_set_delete_screen_func(void (*deleteScreenFunc)(int screenIndex));
3049-
void eez_flow_set_delete_on_screen_unload(bool *deleteOnScreenUnload);
30503049
void eez_flow_tick();
30513050
bool eez_flow_is_stopped();
30523051
extern int16_t g_currentScreen;
@@ -3057,6 +3056,7 @@ void eez_flow_pop_screen(lv_scr_load_anim_t animType, uint32_t speed, uint32_t d
30573056
void eez_flow_create_screen(int16_t screenId);
30583057
void eez_flow_delete_screen(int16_t screenId);
30593058
bool eez_flow_is_screen_created(int16_t screenId);
3059+
void eez_flow_delete_screen_on_unload(int screenIndex);
30603060
void flowOnPageLoaded(unsigned pageIndex);
30613061
void *getFlowState(void *flowState, unsigned userWidgetComponentIndexOrPageIndex);
30623062
void deletePageFlowState(unsigned pageIndex);

‎wasm/lvgl-runtime/common/main.c

+2-2
Original file line numberDiff line numberDiff line change
@@ -323,7 +323,7 @@ static uint32_t g_prevTick;
323323
static void dump_widgets_flags_info();
324324
static void dump_custom_styles();
325325

326-
EM_PORT_API(void) init(uint32_t wasmModuleId, uint32_t debuggerMessageSubsciptionFilter, uint8_t *assets, uint32_t assetsSize, uint32_t displayWidth, uint32_t displayHeight, bool darkTheme, uint32_t timeZone, bool *deleteOnScreenUnload) {
326+
EM_PORT_API(void) init(uint32_t wasmModuleId, uint32_t debuggerMessageSubsciptionFilter, uint8_t *assets, uint32_t assetsSize, uint32_t displayWidth, uint32_t displayHeight, bool darkTheme, uint32_t timeZone, bool screensLifetimeSupport) {
327327
is_editor = assetsSize == 0;
328328

329329
hor_res = displayWidth;
@@ -342,7 +342,7 @@ EM_PORT_API(void) init(uint32_t wasmModuleId, uint32_t debuggerMessageSubsciptio
342342
//dump_widgets_flags_info();
343343

344344
if (!is_editor) {
345-
flowInit(wasmModuleId, debuggerMessageSubsciptionFilter, assets, assetsSize, darkTheme, timeZone, deleteOnScreenUnload);
345+
flowInit(wasmModuleId, debuggerMessageSubsciptionFilter, assets, assetsSize, darkTheme, timeZone, screensLifetimeSupport);
346346
}
347347

348348
#if LVGL_VERSION_MAJOR >= 9

‎wasm/lvgl-runtime/common/src/flow.cpp

+2-27
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,6 @@
2525

2626
bool is_editor = false;
2727
bool g_screensLifetimeSupport = false;
28-
extern bool *g_deleteOnScreenUnload;
2928

3029
uint32_t screenLoad_animType = 0;
3130
uint32_t screenLoad_speed = 0;
@@ -1094,7 +1093,7 @@ void deleteScreen(int screenIndex) {
10941093

10951094
////////////////////////////////////////////////////////////////////////////////
10961095

1097-
extern "C" void flowInit(uint32_t wasmModuleId, uint32_t debuggerMessageSubsciptionFilter, uint8_t *assets, uint32_t assetsSize, bool darkTheme, uint32_t timeZone, bool *deleteOnScreenUnload) {
1096+
extern "C" void flowInit(uint32_t wasmModuleId, uint32_t debuggerMessageSubsciptionFilter, uint8_t *assets, uint32_t assetsSize, bool darkTheme, uint32_t timeZone, bool screensLifetimeSupport) {
10981097
lv_disp_t * dispp = lv_disp_get_default();
10991098
lv_theme_t * theme = lv_theme_default_init(dispp, lv_palette_main(LV_PALETTE_BLUE), lv_palette_main(LV_PALETTE_RED), darkTheme, LV_FONT_DEFAULT);
11001099
//DISPLAY_WIDTH = eez::g_mainAssets->settings->displayWidth;
@@ -1130,12 +1129,10 @@ extern "C" void flowInit(uint32_t wasmModuleId, uint32_t debuggerMessageSubscipt
11301129

11311130
eez::flow::start(eez::g_mainAssets);
11321131

1133-
g_screensLifetimeSupport = deleteOnScreenUnload != 0;
1134-
1132+
g_screensLifetimeSupport = screensLifetimeSupport;
11351133
if (g_screensLifetimeSupport) {
11361134
eez_flow_set_create_screen_func(createScreen);
11371135
eez_flow_set_delete_screen_func(deleteScreen);
1138-
eez_flow_set_delete_on_screen_unload(deleteOnScreenUnload);
11391136
}
11401137

11411138
g_currentScreen = 0;
@@ -1166,28 +1163,6 @@ void flowOnPageLoadedStudio(unsigned pageIndex) {
11661163
eez::flow::getPageFlowState(eez::g_mainAssets, pageIndex);
11671164
}
11681165

1169-
void on_lvgl_screen_unloaded(lv_event_t *e) {
1170-
if (lv_event_get_code(e) == LV_EVENT_SCREEN_UNLOADED) {
1171-
int16_t screenIndex = (int16_t)(lv_uintptr_t)lv_event_get_user_data(e);
1172-
deleteScreen(screenIndex);
1173-
}
1174-
}
1175-
1176-
void addScreenUnloadedCallback(unsigned screenIndex, lv_obj_t *screen) {
1177-
if (
1178-
g_screensLifetimeSupport &&
1179-
g_deleteOnScreenUnload &&
1180-
g_deleteOnScreenUnload[screenIndex]
1181-
) {
1182-
lv_obj_add_event_cb(
1183-
screen,
1184-
on_lvgl_screen_unloaded,
1185-
LV_EVENT_SCREEN_UNLOADED,
1186-
(void*)(lv_uintptr_t)(screenIndex)
1187-
);
1188-
}
1189-
}
1190-
11911166
native_var_t native_vars[] = {
11921167
{ NATIVE_VAR_TYPE_NONE, 0, 0 },
11931168
};

‎wasm/lvgl-runtime/common/src/flow.h

+1-3
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ extern uint32_t screenLoad_delay;
1515
#ifdef __cplusplus
1616
extern "C" {
1717
#endif
18-
void flowInit(uint32_t wasmModuleId, uint32_t debuggerMessageSubsciptionFilter, uint8_t *assets, uint32_t assetsSize, bool darkTheme, uint32_t timeZone, bool *deleteOnScreenUnload);
18+
void flowInit(uint32_t wasmModuleId, uint32_t debuggerMessageSubsciptionFilter, uint8_t *assets, uint32_t assetsSize, bool darkTheme, uint32_t timeZone, bool screensLifetimeSupport);
1919
bool flowTick();
2020
#ifdef __cplusplus
2121
}
@@ -110,5 +110,3 @@ void addUpdateTask(enum UpdateTaskType updateTaskType, lv_obj_t *obj, void *flow
110110
void setObjectIndex(lv_obj_t *obj, int32_t index);
111111
void deleteObjectIndex(int32_t index);
112112
lv_obj_t *getLvglObjectFromIndex(int32_t index);
113-
114-
void addScreenUnloadedCallback(unsigned screenIndex, lv_obj_t *screen);

‎wasm/lvgl-runtime/common/src/studio_api.cpp

+4-2
Original file line numberDiff line numberDiff line change
@@ -596,8 +596,6 @@ EM_PORT_API(lv_obj_t *) lvglCreateWindow(lv_obj_t *parentObj, int32_t index, lv_
596596
static lv_obj_t *current_screen = 0;
597597

598598
EM_PORT_API(void) lvglScreenLoad(unsigned page_index, lv_obj_t *obj) {
599-
addScreenUnloadedCallback(page_index, obj);
600-
601599
#if LVGL_VERSION_MAJOR >= 9
602600
lv_screen_load_anim(obj, (lv_scr_load_anim_t)screenLoad_animType, screenLoad_speed, screenLoad_delay, false);
603601
#else
@@ -1281,4 +1279,8 @@ EM_PORT_API(void) lvglObjInvalidate(lv_obj_t *obj) {
12811279
return lv_obj_invalidate(obj);
12821280
}
12831281

1282+
EM_PORT_API(void) lvglDeleteScreenOnUnload(unsigned screenIndex) {
1283+
eez_flow_delete_screen_on_unload(screenIndex);
1284+
}
1285+
12841286
////////////////////////////////////////////////////////////////////////////////

0 commit comments

Comments
 (0)