1313#include " common/smbas.h"
1414#include " lib/maapi.h"
1515#include " ui/utils.h"
16- #include " ui/audio.h"
1716#include " ui/theme.h"
1817#include " platform/emcc/runtime.h"
1918#include " platform/emcc/main_bas.h"
2019
2120#define MAIN_BAS " __main_bas__"
2221#define WAIT_INTERVAL 10
22+ #define EVENT_TYPE_RESTART 101
23+ #define EVENT_TYPE_SHOW_MENU 102
2324
2425Runtime *runtime;
2526
@@ -54,6 +55,7 @@ Runtime::Runtime() :
5455 logEntered ();
5556 runtime = this ;
5657
58+ // note: cannot call emscripten_sleep from inside the callbacks
5759 emscripten_set_mousedown_callback (EMSCRIPTEN_EVENT_TARGET_WINDOW, this , true , mouse_callback);
5860 emscripten_set_mouseup_callback (EMSCRIPTEN_EVENT_TARGET_WINDOW, this , true , mouse_callback);
5961 emscripten_set_mousemove_callback (EMSCRIPTEN_EVENT_TARGET_WINDOW, this , true , mouse_callback);
@@ -124,9 +126,7 @@ void Runtime::handleMouse(int eventType, const EmscriptenMouseEvent *e) {
124126 switch (eventType) {
125127 case EMSCRIPTEN_EVENT_MOUSEDOWN:
126128 if (e->button == 2 ) {
127- _menuX = e->clientX ;
128- _menuY = e->clientY ;
129- showMenu ();
129+ pushEvent (getMotionEvent (EVENT_TYPE_SHOW_MENU, e));
130130 } else {
131131 pushEvent (getMotionEvent (EVENT_TYPE_POINTER_PRESSED, e));
132132 }
@@ -144,7 +144,7 @@ void Runtime::pause(int timeout) {
144144 if (timeout == -1 ) {
145145 if (hasEvent ()) {
146146 MAEvent *event = popEvent ();
147- handleEvent (*event);
147+ processEvent (*event);
148148 delete event;
149149 }
150150 } else {
@@ -154,7 +154,7 @@ void Runtime::pause(int timeout) {
154154 break ;
155155 } else if (hasEvent ()) {
156156 MAEvent *event = popEvent ();
157- handleEvent (*event);
157+ processEvent (*event);
158158 delete event;
159159 }
160160 emscripten_sleep (WAIT_INTERVAL);
@@ -164,7 +164,6 @@ void Runtime::pause(int timeout) {
164164 }
165165 }
166166 }
167-
168167}
169168
170169MAEvent Runtime::processEvents (int waitFlag) {
@@ -187,7 +186,7 @@ MAEvent Runtime::processEvents(int waitFlag) {
187186 MAEvent event;
188187 if (hasEvent ()) {
189188 MAEvent *nextEvent = popEvent ();
190- handleEvent (*nextEvent);
189+ processEvent (*nextEvent);
191190 event = *nextEvent;
192191 delete nextEvent;
193192 } else {
@@ -196,14 +195,30 @@ MAEvent Runtime::processEvents(int waitFlag) {
196195 return event;
197196}
198197
198+ void Runtime::processEvent (MAEvent &event) {
199+ switch (event.type ) {
200+ case EVENT_TYPE_KEY_PRESSED:
201+ // handleKeyEvent(event);
202+ handleEvent (event);
203+ break ;
204+ case EVENT_TYPE_RESTART:
205+ setRestart ();
206+ break ;
207+ case EVENT_TYPE_SHOW_MENU:
208+ _menuX = event.point .x ;
209+ _menuY = event.point .y ;
210+ showMenu ();
211+ break ;
212+ default :
213+ handleEvent (event);
214+ break ;
215+ }
216+ }
217+
199218void Runtime::runShell () {
200219 logEntered ();
201-
202- audio_open ();
203220 runMain (MAIN_BAS);
204- audio_close ();
205221 _state = kDoneState ;
206- logLeaving ();
207222}
208223
209224void Runtime::setClipboardText (const char *text) {
@@ -271,3 +286,17 @@ int osd_devrestore(void) {
271286 runtime->setRunning (false );
272287 return 0 ;
273288}
289+
290+
291+ void osd_audio (const char *path) {
292+ }
293+
294+ void osd_beep () {
295+ }
296+
297+ void osd_clear_sound_queue () {
298+ }
299+
300+ void osd_sound (int frequency, int millis, int volume, int background) {
301+ }
302+
0 commit comments