Skip to content

Commit

Permalink
fix issue#48
Browse files Browse the repository at this point in the history
  • Loading branch information
caiiiycuk committed Feb 23, 2019
1 parent 1deed0e commit 7c3bac9
Show file tree
Hide file tree
Showing 7 changed files with 154 additions and 15 deletions.
10 changes: 9 additions & 1 deletion dist/docs/api/js-dos-cpp/include/js-dos-events.md
Expand Up @@ -44,8 +44,17 @@ class Events {
private:
friend class CommandInterface;
enum Browser {
Firefox = 0,
Other = 1
};
Browser browser;
Events();
void fixEventKeyCode(SDL_Event* event);
```

Expand All @@ -71,7 +80,6 @@ C++ --> JS


```
private:
void ready();
public:
Expand Down
85 changes: 82 additions & 3 deletions dist/docs/api/js-dos-cpp/js-dos-events.md
Expand Up @@ -11,6 +11,7 @@
#include <js-dos-events.h>
#include <js-dos-json.h>
#include <unordered_map>
#include <SDL/SDL_events.h>
#ifdef EMSCRIPTEN
Expand Down Expand Up @@ -226,11 +227,20 @@ void ping(const char *event) {
#endif
}
Events::Events() {
Events::Events(): browser(Browser::Other) {
registerSendFn();
registerExit();
registerScreenshot();
registerPushSDLEvent();
#ifdef EMSCRIPTEN
browser = (Events::Browser) EM_ASM_INT((
if (navigator.userAgent.toLowerCase().indexOf('firefox') > -1) {
return 0; // firefox
}
return 1; // othters
));
#endif
}
void Events::ready() { ping("ready"); }
Expand All @@ -257,7 +267,6 @@ do nothing
} else if (frameCount == 1) {
ready();
} else {
ping("frame");
supplyScreenshotIfNeeded();
}
Expand Down Expand Up @@ -302,16 +311,86 @@ void Events::supplyScreenshotIfNeeded() {
#endif
}
void Events::fixEventKeyCode(SDL_Event* event) {
```







event->key.keysum.sym is used to map keys
You can find correct key by logging CreateKeyBind








printf("event-in %d %d \n", event->key.keysym.sym, event->key.keysym.scancode);




```
#ifdef EMSCRIPTEN
if (browser != Browser::Firefox) {
switch ((int)event->key.keysym.sym) {
case 186: { // ':'
event->key.keysym.sym = 59;
} break;
case 187: { // '='
event->key.keysym.sym = 61;
} break;
case 189: { // '-'
event->key.keysym.sym = 45;
} break;
default:;
}
}
switch ((int)event->key.keysym.sym) {
case 39: { // '\''
event->key.keysym.sym = 222;
} break;
default:;
}
```







printf("event-out %d %d \n", event->key.keysym.sym, event->key.keysym.scancode);




```
#endif
}
std::vector<SDL_Event> sdlEvents;
int Events::pollSDLEvent(SDL_Event *event) {
auto result = SDL_PollEvent(event);
if (result == 0) {
if (!sdlEvents.empty()) {
*event = sdlEvents.back();
sdlEvents.pop_back();
return 1;
result = 1;
}
}
if (result > 0 && (event->type == SDL_KEYDOWN || event->type == SDL_KEYUP)) {
fixEventKeyCode(event);
}
return result;
}
Expand Down
6 changes: 3 additions & 3 deletions dist/docs/api/js-dos-ts/js-dos-build.md
Expand Up @@ -20,9 +20,9 @@ gulpfile.js --> generateBuildInfo
```
export const Build = {
version: "6.22.17 (572ea5319d828f0107d26fd24a96c27875e485f9)",
wasmSize: 2167052,
jsSize: 503703,
version: "6.22.17 (1deed0e747da3176651b900a53f46f442b3befcb)",
wasmSize: 2167445,
jsSize: 503772,
};
Expand Down
Expand Up @@ -2702,7 +2702,7 @@ void MAPPER_StartUp(Section * sec) {
/* Emscripten generates scancodes from SDL keys,
* so supporting them doesn't seem useful.
*/
#ifndef EMSCRIPTEN
#if !defined(JSDOS)
if (section->Get_bool("usescancodes")) {
usescancodes=true;

Expand Down
10 changes: 9 additions & 1 deletion js-dos-cpp/include/js-dos-events.h
Expand Up @@ -13,12 +13,20 @@ class Events {
private:
friend class CommandInterface;

enum Browser {
Firefox = 0,
Other = 1
};

Browser browser;

Events();

void fixEventKeyCode(SDL_Event* event);

// C++ --> JS
// ----------
// **ready** - triggered when runtime is ready
private:
void ready();

public:
Expand Down
50 changes: 47 additions & 3 deletions js-dos-cpp/js-dos-events.cpp
Expand Up @@ -2,6 +2,7 @@
#include <js-dos-events.h>
#include <js-dos-json.h>
#include <unordered_map>

#include <SDL/SDL_events.h>

#ifdef EMSCRIPTEN
Expand Down Expand Up @@ -124,11 +125,20 @@ void ping(const char *event) {
#endif
}

Events::Events() {
Events::Events(): browser(Browser::Other) {
registerSendFn();
registerExit();
registerScreenshot();
registerPushSDLEvent();
#ifdef EMSCRIPTEN
browser = (Events::Browser) EM_ASM_INT((
if (navigator.userAgent.toLowerCase().indexOf('firefox') > -1) {
return 0; // firefox
}
return 1; // othters
));
#endif

}

void Events::ready() { ping("ready"); }
Expand All @@ -141,7 +151,6 @@ void Events::frame() {
} else if (frameCount == 1) {
ready();
} else {
ping("frame");
supplyScreenshotIfNeeded();
}

Expand Down Expand Up @@ -186,16 +195,51 @@ void Events::supplyScreenshotIfNeeded() {
#endif
}

void Events::fixEventKeyCode(SDL_Event* event) {
// event->key.keysum.sym is used to map keys
// You can find correct key by logging CreateKeyBind

// printf("event-in %d %d \n", event->key.keysym.sym, event->key.keysym.scancode);
#ifdef EMSCRIPTEN
if (browser != Browser::Firefox) {
switch ((int)event->key.keysym.sym) {
case 186: { // ':'
event->key.keysym.sym = 59;
} break;
case 187: { // '='
event->key.keysym.sym = 61;
} break;
case 189: { // '-'
event->key.keysym.sym = 45;
} break;
default:;
}
}

switch ((int)event->key.keysym.sym) {
case 39: { // '\''
event->key.keysym.sym = 222;
} break;
default:;
}

// printf("event-out %d %d \n", event->key.keysym.sym, event->key.keysym.scancode);
#endif
}

std::vector<SDL_Event> sdlEvents;
int Events::pollSDLEvent(SDL_Event *event) {
auto result = SDL_PollEvent(event);
if (result == 0) {
if (!sdlEvents.empty()) {
*event = sdlEvents.back();
sdlEvents.pop_back();
return 1;
result = 1;
}
}
if (result > 0 && (event->type == SDL_KEYDOWN || event->type == SDL_KEYUP)) {
fixEventKeyCode(event);
}
return result;
}

Expand Down
6 changes: 3 additions & 3 deletions js-dos-ts/js-dos-build.ts
Expand Up @@ -3,7 +3,7 @@
// gulpfile.js --> generateBuildInfo

export const Build = {
version: "6.22.17 (572ea5319d828f0107d26fd24a96c27875e485f9)",
wasmSize: 2167052,
jsSize: 503703,
version: "6.22.17 (1deed0e747da3176651b900a53f46f442b3befcb)",
wasmSize: 2167445,
jsSize: 503772,
};

0 comments on commit 7c3bac9

Please sign in to comment.