Skip to content

Commit 469ee60

Browse files
committed
1 parent ee2d5dd commit 469ee60

File tree

8 files changed

+37
-17
lines changed

8 files changed

+37
-17
lines changed

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

+1-1
Original file line numberDiff line numberDiff line change
@@ -553,7 +553,7 @@ export interface IWasmFlowRuntime {
553553
_init(wasmModuleId: number, debuggerMessageSubsciptionFilter: number, assets: number, assetsSize: number, displayWidth: number, displayHeight: number, darkTheme: boolean, timeZone: number): void;
554554
_mainLoop(): boolean;
555555
_getSyncedBuffer(): number;
556-
_onMouseWheelEvent(wheelDeltaY: number, wheelClicked: number): void;
556+
_onMouseWheelEvent(wheelDeltaY: number, pressed: number): void;
557557
_onPointerEvent(x: number, y: number, pressed: number): void;
558558
_onKeyPressed(key: number): void;
559559
_onMessageFromDebugger(messageData: number, messageDataSize: number): void;

packages/project-editor/flow/runtime/cpp/lvgl-runtime/common/main.c

+2-3
Original file line numberDiff line numberDiff line change
@@ -283,7 +283,6 @@ static void hal_init() {
283283
lv_indev_set_type(encoder_indev, LV_INDEV_TYPE_ENCODER);
284284
lv_indev_set_read_cb(encoder_indev, my_mousewheel_read);
285285
//lv_indev_set_mode(encoder_indev, LV_INDEV_MODE_EVENT);
286-
287286
#else
288287
static lv_indev_drv_t indev_drv_3;
289288
lv_indev_drv_init(&indev_drv_3);
@@ -377,12 +376,12 @@ EM_PORT_API(void) onPointerEvent(int x, int y, int pressed) {
377376
mouse_pressed = pressed;
378377
}
379378

380-
EM_PORT_API(void) onMouseWheelEvent(double yMouseWheel, int clicked) {
379+
EM_PORT_API(void) onMouseWheelEvent(double yMouseWheel, int pressed) {
381380
if (yMouseWheel >= 100 || yMouseWheel <= -100) {
382381
yMouseWheel /= 100;
383382
}
384383
mouse_wheel_delta = round(yMouseWheel);
385-
mouse_wheel_pressed = clicked;
384+
mouse_wheel_pressed = pressed;
386385
}
387386

388387
EM_PORT_API(void) onKeyPressed(uint32_t key) {

packages/project-editor/flow/runtime/cpp/lvgl-runtime/common/src/flow.cpp

+5-3
Original file line numberDiff line numberDiff line change
@@ -683,9 +683,11 @@ void doUpdateTasks() {
683683
const char *cur_val = lv_dropdown_get_options(updateTask.obj);
684684
if (strcmp(new_val, cur_val) != 0) lv_dropdown_set_options(updateTask.obj, new_val);
685685
} else if (updateTask.updateTaskType == UPDATE_TASK_TYPE_DROPDOWN_SELECTED) {
686-
uint16_t new_val = (uint16_t)evalIntegerProperty(updateTask.flow_state, updateTask.component_index, updateTask.property_index, "Failed to evaluate Selected in Dropdown widget");
687-
uint16_t cur_val = lv_dropdown_get_selected(updateTask.obj);
688-
if (new_val != cur_val) lv_dropdown_set_selected(updateTask.obj, new_val);
686+
if (!(lv_obj_get_state(updateTask.obj) & LV_STATE_EDITED)) {
687+
uint16_t new_val = (uint16_t)evalIntegerProperty(updateTask.flow_state, updateTask.component_index, updateTask.property_index, "Failed to evaluate Selected in Dropdown widget");
688+
uint16_t cur_val = lv_dropdown_get_selected(updateTask.obj);
689+
if (new_val != cur_val) lv_dropdown_set_selected(updateTask.obj, new_val);
690+
}
689691
} else if (updateTask.updateTaskType == UPDATE_TASK_TYPE_ROLLER_OPTIONS) {
690692
const char *new_val = evalStringArrayPropertyAndJoin(updateTask.flow_state, updateTask.component_index, updateTask.property_index, "Failed to evaluate Selected in Dropdown widget", "\n");
691693
const char *cur_val = lv_roller_get_options(updateTask.obj);
Binary file not shown.
Binary file not shown.

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

+25-4
Original file line numberDiff line numberDiff line change
@@ -135,8 +135,11 @@ export class WasmRuntime extends RemoteRuntime {
135135
y: number;
136136
pressed: number;
137137
}[] = [];
138+
139+
wheelUpdated = false;
138140
wheelDeltaY = 0;
139-
wheelClicked = 0;
141+
wheelPressed = 0;
142+
140143
keysPressed: number[] = [];
141144
screen: any;
142145
lastScreen: any;
@@ -574,8 +577,9 @@ export class WasmRuntime extends RemoteRuntime {
574577
wheel: this.isPaused
575578
? undefined
576579
: {
580+
updated: this.wheelUpdated,
577581
deltaY: this.wheelDeltaY,
578-
clicked: this.wheelClicked
582+
pressed: this.wheelPressed
579583
},
580584
pointerEvents: this.isPaused ? undefined : this.pointerEvents,
581585
keysPressed: this.isPaused ? undefined : this.keysPressed,
@@ -586,8 +590,8 @@ export class WasmRuntime extends RemoteRuntime {
586590

587591
this.worker.postMessage(message);
588592

593+
this.wheelUpdated = false;
589594
this.wheelDeltaY = 0;
590-
this.wheelClicked = 0;
591595
this.pointerEvents = [];
592596
this.keysPressed = [];
593597
};
@@ -1300,8 +1304,10 @@ export const WasmCanvas = observer(
13001304
}
13011305

13021306
if (event.buttons == 4) {
1303-
wasmRuntime.wheelClicked = 1;
1307+
wasmRuntime.wheelUpdated = true;
1308+
wasmRuntime.wheelPressed = 1;
13041309
}
1310+
13051311
canvas.setPointerCapture(event.pointerId);
13061312
this.sendPointerEvent(event);
13071313
};
@@ -1315,6 +1321,13 @@ export const WasmCanvas = observer(
13151321
if (!canvas) {
13161322
return;
13171323
}
1324+
1325+
const wasmRuntime = this.context.runtime as WasmRuntime;
1326+
if (wasmRuntime) {
1327+
wasmRuntime.wheelUpdated = true;
1328+
wasmRuntime.wheelPressed = 0;
1329+
}
1330+
13181331
canvas.releasePointerCapture(event.pointerId);
13191332
this.sendPointerEvent(event);
13201333
};
@@ -1324,6 +1337,13 @@ export const WasmCanvas = observer(
13241337
if (!canvas) {
13251338
return;
13261339
}
1340+
1341+
const wasmRuntime = this.context.runtime as WasmRuntime;
1342+
if (wasmRuntime) {
1343+
wasmRuntime.wheelUpdated = true;
1344+
wasmRuntime.wheelPressed = 0;
1345+
}
1346+
13271347
canvas.releasePointerCapture(event.pointerId);
13281348
this.sendPointerEvent(event);
13291349
};
@@ -1342,6 +1362,7 @@ export const WasmCanvas = observer(
13421362
if (!wasmRuntime) {
13431363
return;
13441364
}
1365+
wasmRuntime.wheelUpdated = true;
13451366
wasmRuntime.wheelDeltaY += event.deltaY;
13461367
};
13471368

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

+2-1
Original file line numberDiff line numberDiff line change
@@ -16,8 +16,9 @@ export interface RendererToWorkerMessage {
1616

1717
// mouse data from Canvas
1818
wheel?: {
19+
updated: boolean;
1920
deltaY: number;
20-
clicked: number;
21+
pressed: number;
2122
};
2223
pointerEvents?: {
2324
x: number;

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

+2-5
Original file line numberDiff line numberDiff line change
@@ -883,13 +883,10 @@ export function createWasmWorker(
883883
}
884884

885885
if (rendererToWorkerMessage.wheel) {
886-
if (
887-
rendererToWorkerMessage.wheel.deltaY != 0 ||
888-
rendererToWorkerMessage.wheel.clicked != 0
889-
) {
886+
if (rendererToWorkerMessage.wheel.updated) {
890887
WasmFlowRuntime._onMouseWheelEvent(
891888
rendererToWorkerMessage.wheel.deltaY,
892-
rendererToWorkerMessage.wheel.clicked
889+
rendererToWorkerMessage.wheel.pressed
893890
);
894891
}
895892
}

0 commit comments

Comments
 (0)